ALB Ingress は、カスタム転送ルールをサポートしています。転送ルールは、転送条件と転送アクションで構成されます。リクエストのドメイン名、パス、リクエストヘッダー、クエリ文字列、リクエストメソッド、Cookie、またはソース IP に基づいてカスタム転送条件を定義できます。また、固定レスポンスの返却、リダイレクトの作成、リクエストヘッダーの挿入または削除、トラフィックのミラーリング、複数のバックエンドサーバーグループへのリクエストの転送、リクエストの書き換えなどのカスタム転送アクションを定義することもできます。これらのカスタム転送ルールは、コンソールで設定するか、Ingress リソースにアノテーションを追加することで設定できます。
シナリオインデックス
カスタムルール | シナリオ |
転送条件 | |
転送アクション | |
転送条件とアクションの実践 |
前提条件
ALB Ingress Controller コンポーネントがインストールされていること。コンポーネントのバージョンは v2.5.0 以降である必要があります。詳細については、「コンポーネントの管理」をご参照ください。
転送条件
転送ルールには最大 10 個の条件を設定できます。
`ResponseHeader` および `ResponseStatusCode` 転送条件は、カスタムレスポンス転送ルールに対してのみ有効です。
転送条件の概要
ALB Ingress の alb.ingress.kubernetes.io/conditions.<service-name> アノテーションで転送条件を設定できます。異なる条件ブロックは AND 論理演算子で結合されます。同じ条件ブロック内の値は OR 論理演算子で結合されます。たとえば、2 つの異なる `Header` 条件ブロックを設定した場合、それらは AND 論理演算子で結合されます。ただし、単一の `Header` 条件ブロック内で指定された値は OR 論理演算子で結合されます。次の表に、転送条件を示します。
転送条件 | 説明 |
ドメイン名 | リクエストドメイン名に一致します。一致するドメイン名を持つリクエストのみがサービスにアクセスできます。次のコードに例を示します。
|
パス | リクエストパスに一致します。一致するパスを持つリクエストのみがサービスにアクセスできます。次のコードに例を示します。
|
ヘッダー | リクエストヘッダーに一致します。一致するヘッダーを持つリクエストのみがサービスにアクセスできます。次のコードに例を示します。
|
クエリ文字列 | クエリ文字列に一致します。一致するクエリ文字列を含むリクエストのみがサービスにアクセスできます。次のコードに例を示します。
|
リクエストメソッド | リクエストメソッドに一致します。一致するメソッドを持つリクエストのみがサービスにアクセスできます。次のコードに例を示します。
|
Cookie | Cookie に一致します。一致する Cookie を含むリクエストのみがサービスにアクセスできます。次のコードに例を示します。
|
ソース IP | リクエストのソース IP アドレスに一致します。一致するソース IP アドレスからのリクエストのみがサービスにアクセスできます。次のコードに例を示します。
|
ResponseHeader | レスポンスヘッダーに一致します。転送アクションは、一致するヘッダーを持つレスポンスに対してのみ実行されます。これは、レスポンス転送アクションおよび
|
ResponseStatusCode | レスポンスステータスコードに一致します。一致するステータスコードを返すレスポンスのみがサービスにアクセスできます。これは、レスポンス転送アクションおよび
|
シナリオ 1: ソース IP とヘッダーに基づいてトラフィックを分散する
転送ルールのカスタム条件には、最大 5 つのソース IP アドレスを指定できます。
次のコードブロックは、リクエストのソース IP、ヘッダー、およびパスが設定に一致する場合にのみ、トラフィックをターゲットに転送するルールを定義します。
リクエストのソース IP アドレスが 192.168.0.0/16 または 172.16.0.0/16 CIDR ブロックにあり、リクエストヘッダーに値が value1 または value2 の gray-hello が含まれ、リクエストパスが /hello の場合、リクエストは gray-hello-svc サービスに転送されます。それ以外の場合、リクエストは他のサービスに転送されます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "1"
alb.ingress.kubernetes.io/conditions.gray-hello-svc: | # 注: このアノテーションの "gray-hello-svc" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送条件は、対応するバックエンドサービスに適用されます。
[{
"type": "Header",
"headerConfig": {
"key":"gray-hello",
"values": [
"value1",
"value2"
]
}
},
{
"type": "SourceIp",
"sourceIpConfig": {
"values": [
"192.168.0.0/16",
"172.16.0.0/16"
]
}
}]
name: gray-hello-ingress
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /hello
pathType: ImplementationSpecific
backend:
service:
name: gray-hello-svc # 注: ここで設定されたバックエンドサービス名は、カスタム転送条件アノテーションの "gray-hello-svc" と一致する必要があります。アノテーションで設定された転送条件は、このバックエンドサービスに適用されます。
port:
number: 88alb.ingress.kubernetes.io/order: Ingress の優先順位を指定します。数値が小さいほど優先順位が高くなります。
シナリオ 2: ドメイン名、リクエストメソッド、Cookie に基づいてトラフィックを分散する
次のコードブロックは、リクエストのドメイン名、リクエストメソッド、およびリクエスト Cookie が設定に一致する場合にのみ、トラフィックをターゲットに転送するルールを定義します。
リクエストメソッドが GET または HEAD、リクエストドメイン名が example.com または *.edu、リクエスト Cookie のキーが cookiekey1 で値が cookievalue1、リクエストパスが /test の場合、リクエストは service-a サービスに転送されます。それ以外の場合、リクエストは service-b サービスに転送されます。
ドメイン名に基づく転送ルールは、ワイルドカードドメイン名をサポートしています。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.service-a: | # 注: このアノテーションの "service-a" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送条件は、対応するバックエンドサービスに適用されます。
[{
"type": "Cookie",
"cookieConfig": {
"values": [
{
"key":"cookiekey1",
"value":"cookievalue1"
}
]
}
},
{
"type": "Method",
"methodConfig": {
"values": [
"GET",
"HEAD"
]
}
},
{
"type": "Host",
"hostConfig": {
"values": [
"example.com",
"*.edu"
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-a # 注: ここで設定されたバックエンドサービス名は、カスタム転送条件アノテーションの "service-a" と一致する必要があります。アノテーションで設定された転送条件は、このバックエンドサービスに適用されます。
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88シナリオ 3: クエリ文字列、複数のヘッダー、複数のパスに基づいてトラフィックを分散する
次のコードブロックは、リクエストのクエリ文字列、ヘッダー、およびパスが設定に一致する場合にのみ、トラフィックをターゲットに転送するルールを定義します。
リクエストパスが /pathvalue1、/pathvalue2、または /test、クエリ文字列のキーが querystringkey1 で値が querystringvalue2、リクエストヘッダーに headerkey1 と headerkey2 の両方のヘッダーが含まれ、headerkey1 ヘッダーの値が headervalue1 または headervalue2、headerkey2 ヘッダーの値が headervalue3 または headervalue4 の場合、リクエストは service-a サービスに転送されます。それ以外の場合、リクエストは service-b サービスに転送されます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.service-a: | # 注: このアノテーションの "service-a" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送条件は、対応するバックエンドサービスに適用されます。
[{
"type": "Path",
"pathConfig": {
"values": [
"/pathvalue1",
"/pathvalue2"
]
}
},
{
"type": "QueryString",
"queryStringConfig": {
"values": [
{
"key":"querystringkey1",
"value":"querystringvalue2"
}
]
}
},
{
"type": "Header",
"headerConfig": {
"key":"headerkey1",
"values": [
"headervalue1",
"headervalue2"
]
}
},
{
"type": "Header",
"headerConfig": {
"key":"headerkey2",
"values": [
"headervalue3",
"headervalue4"
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-a # 注: ここで設定されたバックエンドサービス名は、カスタム転送条件アノテーションの "service-a" と一致する必要があります。アノテーションで設定された転送条件は、このバックエンドサービスに適用されます。
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88転送アクション
転送アクションの概要
alb.ingress.kubernetes.io/actions.<service-name> アノテーションを使用して、リクエストとレスポンスの転送アクションを設定できます。サポートされているアクションには、固定レスポンスの返却、リダイレクトの作成、リクエストヘッダーの挿入または削除、トラフィックミラーリング、複数のバックエンドサーバーグループへのリクエストの転送、リクエストの書き換えなどがあります。
alb.ingress.kubernetes.io/actions.<service-name>アノテーションの場合、アノテーション内のサービス名がruleフィールドのbackendの下のサービス名と一致していることを確認してください。同じ転送ルールでは、リダイレクト、固定レスポンス、複数のサーバーグループへの転送など、1 つの終端転送アクションのみを使用できます。
リダイレクト、固定レスポンス、または複数のサーバーグループへの転送を設定する場合、
backend.service.port.nameをuse-annotationに設定する必要があります。
リクエスト転送アクション
転送アクション | 説明 |
固定レスポンス | ALB を介してクライアントに固定レスポンスを返します。レスポンスのステータスコード、コンテンツ、およびコンテンツタイプを設定できます。次のコードに例を示します。
|
リダイレクト | HTTP 3xx ステータスコードを使用して、クライアントを別のアドレスに誘導してサービスにアクセスさせます。次のコードに例を示します。 重要 httpCode を除き、他のリダイレクトパラメーターをすべてデフォルト値に設定することはできません。
|
トラフィックミラーリング | トラフィックミラーリング用のサーバーグループの ID を設定します。これにより、リクエストがコピーされ、トラフィックミラーリングサーバーグループに転送されます。次のコードに例を示します。 重要
|
複数のバックエンドサーバーグループへの転送 | ALB リクエストを複数のバックエンドサーバーグループに転送します。ServerGroupID を使用してバックエンドサーバーグループを指定するか、ServiceName+ServicePort を使用してサーバーグループを作成またはアタッチできます。各バックエンドサーバーグループへのリクエスト転送の重みを設定し、サーバーグループ間のセッション維持を有効にすることができます。 重要
|
書き換え | ALB の書き換え機能を有効にします。これにより、リクエストのドメイン名、パス、およびクエリ文字列が上書きされます。次のコードに例を示します。 重要
書き換えルールの詳細については、「書き換えのサポート」をご参照ください。 |
リクエストヘッダーの挿入 | ヘッダーフィールド名とコンテンツを設定します。これにより、リクエスト内の既存のヘッダー変数が上書きされます。次のコードに例を示します。
|
リクエストヘッダーの削除 | ヘッダーフィールド名とコンテンツを削除します。次のコードに例を示します。 type: 転送アクションのタイプ。リクエストヘッダーの削除を設定するには、これを RemoveHeader に設定します。 key: リクエストヘッダーのフィールド名。 |
QPS スロットリング | ALB の転送ルールを設定する際に、全体的なリクエストレート制限と、クライアントのソース IP に基づくリクエストレート制限の両方を設定できます。 次のコードに設定例を示します。 重要
|
レスポンス転送アクション
転送アクション | 説明 |
リクエストヘッダーの挿入 | ヘッダーフィールド名とコンテンツを設定します。これにより、リクエスト内の既存のヘッダー変数が上書きされます。次のコードに例を示します。
|
リクエストヘッダーの削除 | ヘッダーフィールド名とコンテンツを削除します。次のコードに例を示します。 type: 転送アクションのタイプ。リクエストヘッダーの削除を設定するには、これを key: リクエストヘッダーのフィールド名。 |
シナリオ 1: 503 ステータスコードとコンテンツで固定レスポンスを設定する
コンソール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、 を選択します。
[Ingress] ページで、[Ingress の作成] をクリックします。[Ingress の作成] ダイアログボックスで、Ingress を設定します。
設定項目
説明
例
ゲートウェイタイプ
[ALB Ingress]、[MSE Ingress]、または [Nginx Ingress] を選択できます。
これらのゲートウェイタイプの違いの詳細については、「Nginx Ingress、ALB Ingress、および MSE Ingress の比較」をご参照ください。
ALB
名前
Ingress のカスタム名。
ingress
Ingress クラス
alb
ルール
ドメイン名: 空のままにします
パスマッピング:
パス: /
一致ルール: ImplementationSpecific (プレフィックス)
サービス名: response-503
ポート: 80
カスタム転送ルール
カスタム転送ルールを有効にして、インバウンドトラフィックを詳細に制御します。
説明転送ルールには最大 10 個の条件を設定できます。
[転送条件] ドロップダウンリストから、次のいずれかを選択します。
[ドメイン名]:
リクエストドメイン名に一致します。複数のドメイン名を指定した場合、それらは OR 関係になります。これを設定すると、
alb.ingress.kubernetes.io/conditions.host-exampleアノテーションが追加されます。[パス]:
リクエストパスに一致します。複数のパスを指定した場合、それらは OR 関係になります。これを設定すると、
alb.ingress.kubernetes.io/conditions.path-exampleアノテーションが追加されます。[HTTP ヘッダー]:
キーと値のペア形式でリクエストヘッダー情報に一致します。たとえば、[キーが次の場合]:
headername、[値が次の場合]:headervalue1。複数のヘッダー値を指定した場合、それらは OR 関係になります。これを設定すると、alb.ingress.kubernetes.io/conditions.http-header-exampleアノテーションが追加されます。
[転送アクション] ドロップダウンリストから、次を選択します。
[固定レスポンスを返す]
ALB を介してクライアントに固定レスポンスを返します。レスポンスのステータスコード、コンテンツ、およびコンテンツタイプを設定できます。必要に応じて、[レスポンスステータスコード]、[レスポンスコンテンツタイプ (オプション)]、および [レスポンスコンテンツ (オプション)] を設定します。
レスポンスコンテンツタイプ:
[text/plain]: プレーンテキストのコンテンツタイプ。
[text/css]: CSS コンテンツを示します。
[text/html]: HTML コンテンツタイプ。
[application/javascript]: JavaScript コンテンツタイプ。
[application/json]: JSON コンテンツタイプ。
転送条件: [パス] を選択します。(デフォルトのまま)
転送アクション: [固定レスポンスを返す]
レスポンスステータスコード: 503
レスポンスコンテンツタイプ (オプション): [text/plain]
レスポンスコンテンツ (オプション): error
他の設定はデフォルト値のままにします。
設定が完了したら、[OK] をクリックします。
kubectl
次のコードブロックは、サービスへのリクエストが行われたときに 503 ステータスコードとテキスト 503 error text を返す例を示しています。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.service-name: | # 注: このアノテーションの "service-name" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送アクションは、対応するバックエンドサービスに適用されます。
[{
"type": "FixedResponse",
"FixedResponseConfig": {
"contentType": "text/plain",
"httpCode": "503",
"content": "503 error text"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service-name # 注: ここで設定されたバックエンドサービス名は、カスタム転送アクションアノテーション alb.ingress.kubernetes.io/actions.service-name の "service-name" と一致する必要があります。アノテーションで設定された転送アクションは、このバックエンドサービスに適用されます。
port:
name: use-annotation # servicePort の名前は use-annotation である必要があります。シナリオ 2: HTTP 301 ステータスコードを使用して HTTPS ポートにリダイレクトする
次のコードブロックは、リクエストをサービスの HTTPS ポートにリダイレクトする例を示しています。
リダイレクト
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.redirect: | # 注: このアノテーションの "redirect" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送アクションは、対応するバックエンドサービスに適用されます。
[{
"type": "Redirect",
"RedirectConfig": {
"host": "${host}",
"path": "${path}",
"port": "443",
"protocol": "https",
"query": "${query}",
"httpCode": "301"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: redirect # 注: ここで設定されたバックエンドサービス名は、カスタム転送アクションアノテーション alb.ingress.kubernetes.io/actions.redirect の "redirect" と一致する必要があります。アノテーションで設定された転送アクションは、このバックエンドサービスに適用されます。
port:
name: use-annotation # servicePort の名前は use-annotation である必要があります。複数のリダイレクト
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.redirect-1: |
[{
"type": "Redirect",
"RedirectConfig": {
"host": "${host}",
"path": "${path}",
"port": "443",
"protocol": "https",
"query": "${query}",
"httpCode": "301"
}
}]
alb.ingress.kubernetes.io/actions.redirect-2: |
[{
"type": "Redirect",
"RedirectConfig": {
"host": "${host}",
"path": "${path}",
"port": "443",
"protocol": "https",
"httpCode": "301"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: redirect
port:
name: use-annotation # servicePort の名前は use-annotation である必要があります。シナリオ 3: source: alibaba リクエストヘッダーを挿入する
次のコードブロックは、サービスへのリクエストが行われたときに、元のリクエストヘッダーを source: alibaba で上書きする例を示しています。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.insert-header: | # 注: このアノテーションの "insert-header" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送アクションは、対応するバックエンドサービスに適用されます。
[{
"type": "InsertHeader",
"InsertHeaderConfig": {
"key": "source",
"value": "alibaba",
"valueType": "UserDefined"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: insert-header # 注: ここで設定されたバックエンドサービス名は、カスタム転送アクションアノテーション alb.ingress.kubernetes.io/actions.insert-header の "insert-header" と一致する必要があります。アノテーションで設定された転送アクションは、このバックエンドサービスに適用されます。
port:
number: 80シナリオ 4: サーバーグループにトラフィックをミラーリングする
次のコードブロックは、リクエストをトラフィックミラーリングサーバーグループにミラーリングする例を示しています。
Application Load Balancer (ALB) コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。[サーバーグループ] ページで、サーバーグループ ID を取得します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: traffic-mirror-ingress
annotations:
# mirror-svc は、以下に入力された backend.services の 1 つである必要があります。
# ALB Ingress は、mirror-svc に転送されたトラフィックを "ServerGroupID" で指定されたバックエンドサーバーにミラーリングします。
# 複数のサービスにトラフィックミラーリングを設定するには、各サービスに個別のアノテーションを追加します。
alb.ingress.kubernetes.io/actions.mirror-svc: | # 注: このアノテーションの "mirror-svc" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送アクションは、対応するバックエンドサービスに適用されます。
[{
"type": "TrafficMirror",
"TrafficMirrorConfig": {
"TargetType" : "ForwardGroupMirror",
"MirrorGroupConfig": {
"ServerGroupTuples" : [{
"ServerGroupID": "sgp-2auud2fxj1r46*****"
}]
}
}
}]
spec:
ingressClassName: alb
rules:
- host: demo.domain.ingress.top
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: mirror-svc # 注: ここで設定されたバックエンドサービス名は、カスタム転送アクションアノテーション alb.ingress.kubernetes.io/actions.mirror-svc の "mirror-svc" と一致する必要があります。アノテーションで設定された転送アクションは、このバックエンドサービスに適用されます。
port:
number: 80シナリオ 5: 複数のバックエンドサーバーグループにリクエストを転送する
コンソール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、 を選択します。
[Ingress] ページで、[Ingress の作成] をクリックします。[Ingress の作成] ダイアログボックスで、Ingress を設定します。
設定項目
説明
例
ゲートウェイタイプ
[ALB Ingress]、[MSE Ingress]、または [Nginx Ingress] を選択できます。
これらのゲートウェイタイプの違いの詳細については、「Nginx Ingress、ALB Ingress、および MSE Ingress の比較」をご参照ください。
Application Load Balancer (ALB)
名前
Ingress のカスタム名。
forward-ingress
Ingress クラス
alb
ルール
ドメイン名: demo.domain.ingress.top
パスマッピング:
パス: /path
一致ルール: プレフィックス一致 (デフォルト)
サービス名: forward
ポート: 80
カスタム転送ルール
カスタム転送ルールを有効にして、インバウンドトラフィックを詳細に制御します。
説明転送ルールには最大 10 個の条件を設定できます。
[転送条件] ドロップダウンリストから、次のいずれかを選択します。
[ドメイン名]:
リクエストドメイン名に一致します。複数のドメイン名を指定した場合、それらは OR 関係になります。これを設定すると、
alb.ingress.kubernetes.io/conditions.host-exampleアノテーションが追加されます。[パス]:
リクエストパスに一致します。複数のパスを指定した場合、それらは OR 関係になります。これを設定すると、
alb.ingress.kubernetes.io/conditions.path-exampleアノテーションが追加されます。[HTTP ヘッダー]:
キーと値のペア形式でリクエストヘッダー情報に一致します。たとえば、[キーが次の場合]:
headername、[値が次の場合]:headervalue1。複数のヘッダー値を指定した場合、それらは OR 関係になります。これを設定すると、alb.ingress.kubernetes.io/conditions.http-header-exampleアノテーションが追加されます。
[転送アクション] ドロップダウンリストから、次を選択します。
[転送先]
複数のバックエンドサーバーグループに転送します。[サービス名] で、ターゲットサービスを選択します。[ポート] で、ターゲットポート番号を選択します。次に、カスタムの重み値を設定します。
説明Flannel ネットワークプラグインを使用するクラスターでは、ClusterIP サービスはサポートされていません。
[転送先] を選択した場合、ルールでパスマッピングを設定する必要はありません。
転送条件: [ドメイン名] を選択します。ドメイン名: demo.domain.ingress.top
転送アクション: [転送先]
サービス名: tea-svc
ポート: 80
重みを設定: 80
サービスを追加
サービス名: coffee-svc
ポート: 80
重みを設定: 20
他の設定はデフォルト値のままにします。
kubectl
次のコードブロックは、クラスター内の複数のサービスにリクエストを転送する例を示しています。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: forward-ingress
annotations:
# アノテーション内のサービスはクラスター内に存在する必要があり、その名前は rule フィールドの backend の下のサービス名と一致する必要があります。
alb.ingress.kubernetes.io/actions.service-name: | # 注: このアノテーションの "service-name" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送アクションは、対応するバックエンドサービスに適用されます。
[{
"type": "ForwardGroup",
"ForwardConfig": {
"ServerGroups" : [{
"ServiceName": "tea-svc",
"Weight": 80,
"ServicePort": 80
},
{
"ServiceName": "coffee-svc",
"Weight": 20,
"ServicePort": 80
}]
}
}]
spec:
ingressClassName: alb
rules:
- host: demo.domain.ingress.top
http:
paths:
- path: /path
pathType: Prefix
backend:
service:
name: service-name # 注: ここで設定されたバックエンドサービス名は、カスタム転送アクションアノテーション alb.ingress.kubernetes.io/actions.service-name の "service-name" と一致する必要があります。アノテーションで設定された転送アクションは、このバックエンドサービスに適用されます。
port:
name: use-annotation # servicePort の名前は use-annotation である必要があります。シナリオ 6: リクエスト設定を書き換える
次のコードブロックは、リクエストのドメイン名、パス、およびクエリ文字列を書き換える例を示しています。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/actions.service-name: | # 注: このアノテーションの "service-name" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送アクションは、対応するバックエンドサービスに適用されます。
[{
"type": "Rewrite",
"RewriteConfig": {
"Host": "demo.domain.ingress.top",
"Path": "/test",
"Query": "querystring"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /path
pathType: Prefix
backend:
service:
name: service-name # 注: ここで設定されたバックエンドサービス名は、カスタム転送アクションアノテーション alb.ingress.kubernetes.io/actions.service-name の "service-name" と一致する必要があります。アノテーションで設定された転送アクションは、このバックエンドサービスに適用されます。
port:
number: 80シナリオ 7: ResponseHeader に基づいてレスポンス内のリクエストヘッダーを変更する
デフォルトでは、カスタム ALB Ingress 転送ルールはリクエストに適用されます。レスポンスの転送ルールを作成するには、
alb.ingress.kubernetes.io/rule-direction.<service-name>アノテーションを Response に設定する必要があります。デフォルト値は Request です。レスポンスの転送ルールを作成する場合、
backend.service.port.nameをuse-annotationに設定する必要があります。
次のコードブロックは、ResponseHeader 条件が満たされた場合に、新しいリクエストヘッダー (source: alibaba) を挿入する例を示しています。条件は、ヘッダーに値が value1 または value2 の response-hello が含まれている場合に満たされます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/rule-direction.response-header: Response
alb.ingress.kubernetes.io/conditions.response-header: | # 注: このアノテーションの "response-header" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送条件は、対応するバックエンドサービスに適用されます。
[{
"type": "ResponseHeader",
"responseHeaderConfig": {
"key": "response-hello",
"values": [
"value1",
"value2"
]
}
}]
alb.ingress.kubernetes.io/actions.response-header: | # 注: このアノテーションの "response-header" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送アクションは、対応するバックエンドサービスに適用されます。
[{
"type": "InsertHeader",
"InsertHeaderConfig": {
"key": "source",
"value": "alibaba",
"valueType": "UserDefined"
}
}]
name: response-header
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: response-header # 注: ここで設定されたバックエンドサービス名は、カスタム転送条件/アクションアノテーションの "response-header" と一致する必要があります。アノテーションで設定された転送条件/アクションは、このバックエンドサービスに適用されます。
port:
name: use-annotation # servicePort の名前は use-annotation である必要があります。シナリオ 8: レスポンスステータスコードに基づいてレスポンス内のリクエストヘッダーを変更する
デフォルトでは、カスタム ALB Ingress 転送ルールはリクエストに適用されます。レスポンスの転送ルールを作成するには、
alb.ingress.kubernetes.io/rule-direction.<service-name>アノテーションを Response に設定する必要があります。デフォルト値は Request です。レスポンスの転送ルールを作成する場合、
backend.service.port.nameをuse-annotationに設定する必要があります。
次のコードブロックは、レスポンスステータスコードが 200 または 300 の場合に、リクエストヘッダーから response-hello ヘッダーを削除する例を示しています。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/rule-direction.response-hello: Response
alb.ingress.kubernetes.io/conditions.response-hello: | # 注: このアノテーションの "response-hello" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送条件は、対応するバックエンドサービスに適用されます。
[{
"type": "ResponseStatusCode",
"responseStatusCodeConfig": {
"values": [
"200",
"300"
]
}
}]
alb.ingress.kubernetes.io/actions.response-hello: | # 注: このアノテーションの "response-hello" は、spec.rules で設定されたバックエンドサービス名と一致する必要があります。アノテーションで設定された転送アクションは、対応するバックエンドサービスに適用されます。
[{
"type": "RemoveHeader",
"RemoveHeaderConfig": {
"key": "response-hello"
}
}]
name: response-hello
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /*
pathType: ImplementationSpecific
backend:
service:
name: response-hello # 注: ここで設定されたバックエンドサービス名は、カスタム転送条件/アクションアノテーションの "response-hello" と一致する必要があります。アノテーションで設定された転送条件/アクションは、このバックエンドサービスに適用されます。
port:
name: use-annotation # servicePort の名前は use-annotation である必要があります。転送条件とアクションの実践
シナリオ 1: ドメイン名条件とアクションに基づいて特定のサービスにトラフィックを転送する
このセクションでは、ACK コンソールでドメイン名ベースの転送条件と対応する転送アクションを設定して、特定のサービスにトラフィックを転送する方法について説明します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、 を選択します。
[Ingress] ページで、[Ingress の作成] をクリックします。[Ingress の作成] ダイアログボックスで、Ingress を設定します。
設定項目
説明
例
ゲートウェイタイプ
[ALB Ingress]、[MSE Ingress]、または [Nginx Ingress] を選択できます。
これらのゲートウェイタイプの違いの詳細については、「Nginx Ingress、ALB Ingress、および MSE Ingress の比較」をご参照ください。
[Application Load Balancer (ALB)]
名前
Ingress のカスタム名。
alb_ingress
Ingress クラス
alb
ルール
[ドメイン名]: *.example.com
[パスマッピング]:
[パス]: /tes
[一致ルール]: ImplementationSpecific
[サービス名]: tea-svc
[ポート]: 80
カスタム転送ルール
カスタム転送ルールを有効にして、インバウンドトラフィックを詳細に制御します。
説明転送ルールには最大 10 個の条件を設定できます。
[転送条件] ドロップダウンリストから、次のいずれかを選択します。
[ドメイン名]:
リクエストドメイン名に一致します。複数のドメイン名を指定した場合、それらは OR 関係になります。これを設定すると、
alb.ingress.kubernetes.io/conditions.host-exampleアノテーションが追加されます。[パス]:
リクエストパスに一致します。複数のパスを指定した場合、それらは OR 関係になります。これを設定すると、
alb.ingress.kubernetes.io/conditions.path-exampleアノテーションが追加されます。重要パス転送条件を設定すると、コンソールは自動的にパス
/created-by-<ALB-ID>を持つ転送ルールを Ingress に追加します。[HTTP ヘッダー]:
キーと値のペア形式でリクエストヘッダー情報に一致します。たとえば、[キーが次の場合]:
headername、[値が次の場合]:headervalue1。複数のヘッダー値を指定した場合、それらは OR 関係になります。これを設定すると、alb.ingress.kubernetes.io/conditions.http-header-exampleアノテーションが追加されます。
[転送アクション] ドロップダウンリストから、次を選択します。
[転送先]
複数のバックエンドサーバーグループに転送します。[サービス名] で、ターゲットサービスを選択します。[ポート] で、ターゲットポート番号を選択します。次に、カスタムの重み値を設定します。
説明Flannel ネットワークプラグインを使用するクラスターでは、ClusterIP サービスはサポートされていません。
[転送先] を選択した場合、ルールで [パスマッピング] を設定する必要はありません。
[転送条件]: [ドメイン名]、[パス]、および [HTTP ヘッダー] を選択します。
[ドメイン名]: is example.com。[ドメイン名を追加] をクリックするか、test.com。
[転送アクション]: [転送先] を選択します。
[サービス名]: tea-svc
[ポート]: 80
[重み]: 100
他の設定はデフォルト値のままにします。