ALB Ingress は、カスタム転送ルールをサポートしています。転送ルールは、転送条件と転送アクションで構成されます。ドメイン名、パス、リクエストヘッダー、クエリ文字列、リクエストメソッド、Cookie、またはソース IP に基づいてカスタム転送条件を定義できます。また、固定レスポンスの返却、リダイレクトの作成、リクエストヘッダーの挿入または削除、トラフィックミラーリング、複数のバックエンドサーバーグループへのリクエスト転送、リクエストの書き換えなどのカスタム転送アクションも定義できます。これらのカスタム転送ルールは、コンソールで設定するか、Ingress リソースにアノテーションを追加することで設定できます。
前提条件
ALB Ingress Controller コンポーネントがインストールされており、バージョンが v2.5.0 以降である必要があります。詳細については、「コンポーネントの管理」をご参照ください。
転送条件
1 つの転送ルールには、最大 10 個の条件を含めることができます。
ResponseHeaderおよびResponseStatusCode転送条件は、レスポンスベースの転送ルールに対してのみ有効です。
転送条件
ALB Ingress は、alb.ingress.kubernetes.io/conditions.<service-name> アノテーションで転送条件の設定をサポートしています。異なるルーティングルールブロック間には論理 AND 関係があり、同じルーティングルールブロック内の値には論理 OR 関係があります。たとえば、2 つの異なる Header ルールブロックは論理 AND 関係にありますが、同じ Header ルールブロックで指定された値は論理 OR 関係にあります。ルーティングルールの詳細な説明は以下の通りです。
転送条件 | 説明 |
ドメイン名 | 一致するドメイン名に基づいてリクエストをルーティングします。以下に例を示します。
|
パス | 一致するパスに基づいてリクエストをルーティングします。以下に例を示します。
|
ヘッダー | 一致するリクエストヘッダーに基づいてリクエストをルーティングします。以下に例を示します。
|
クエリ文字列 | 一致するクエリ文字列に基づいてリクエストをルーティングします。以下に例を示します。
ユースケースと例については、「ユースケース 3:クエリ文字列、複数のヘッダー、複数のパスに基づくトラフィックのルーティング」をご参照ください。 |
リクエストメソッド | 一致するリクエストメソッドに基づいてリクエストをルーティングします。以下に例を示します。
|
Cookie | 一致する Cookie に基づいてリクエストをルーティングします。以下に例を示します。
ユースケースと例については、「ユースケース 2:ドメイン名、リクエストメソッド、Cookie に基づくトラフィックのルーティング」をご参照ください。 |
ソース IP | 一致するソース IP アドレスに基づいてリクエストをルーティングします。以下に例を示します。
ユースケースと例については、「ユースケース 1:ソース IP とヘッダーに基づくトラフィックのルーティング」をご参照ください。 |
レスポンスヘッダー | レスポンスヘッダーを照合し、正しいヘッダーを含むレスポンスに対してのみ転送アクションを実行します。これは
|
レスポンスステータスコード | レスポンスステータスコードを照合します。サービスには、正しいステータスコードが返された場合にのみアクセスできます。この機能は、レスポンス方向の転送アクションとレスポンス方向の転送ルールアノテーション
|
ユースケース 1:ソース IP とヘッダーのルーティング
1 つの転送ルールに最大 5 つの ソース IP 条件を指定できます。
この YAML は、ソース IP、ヘッダー、パスが指定された条件に一致する場合にのみリクエストをルーティングする Ingress を定義します。
リクエストのソース IP アドレスが 192.168.0.0/16 または 172.16.0.0/16 であり、リクエストヘッダーに値が 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: | # サービス名は 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 # このバックエンドサービス名は、`conditions` アノテーションの名前と一致する必要があります。これにより、それらの条件が適用されます。
port:
number: 88alb.ingress.kubernetes.io/order:Ingress の優先度を指定します。数値が小さいほど優先度が高くなります。
ユースケース 2:ドメイン、メソッド、Cookie のルーティング
この YAML は、ドメイン名、リクエストメソッド、Cookie が指定された条件に一致する場合にのみリクエストをルーティングする Ingress を定義します。
これは、リクエストメソッドが 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: | # サービス名は 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 # このバックエンドサービス名は、`conditions` アノテーションの名前と一致する必要があります。これにより、それらの条件が適用されます。
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88ユースケース 3:クエリ文字列、ヘッダー、パスのルーティング
この YAML は、クエリ文字列、ヘッダー、パスが指定された条件に一致する場合にのみリクエストをルーティングする Ingress を定義します。
これは、リクエストパスが /pathvalue1、/pathvalue2、または /test であり、クエリ文字列のキーが querystringkey1 で値が querystringvalue2 であり、リクエストヘッダーに headerkey1 と headerkey2 が含まれている必要があることを意味します。さらに、headerkey1 を含むリクエストヘッダーの値は headervalue1 または headervalue2 でなければならず、headerkey2 を含むリクエストヘッダーの値は headervalue3 または headervalue4 でなければなりません。それ以外の場合、リクエストは service-b サービスにルーティングされます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.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 # このバックエンドサービス名は、`conditions` アノテーションの名前と一致する必要があります。これにより、それらの条件が適用されます。
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88転送アクション
転送アクション
ALB Ingress では、 alb.ingress.kubernetes.io/actions.<service-name> アノテーションを使用して、リクエストとレスポンスの転送アクションを設定できます。サポートされているアクションには、固定レスポンスの返却、リダイレクト、ヘッダーの挿入または削除、トラフィックミラーリング、複数のバックエンドサーバーグループへの転送、リクエストの書き換えなどがあります。これらの転送アクションを定義することで、ALB Ingress でリクエストとレスポンスがどのように処理されるかを柔軟に管理できます。
alb.ingress.kubernetes.io/actions.<service-name>アノテーションでは、アノテーション内のサービス名がruleフィールドのbackendの下にあるサービス名と一致することを確認してください。同じ転送ルールでは、リダイレクト、固定レスポンス、複数のサーバーグループへの転送など、終端となる転送アクションは 1 つだけ使用してください。
リダイレクト、固定レスポンス、または複数のサーバーグループへの転送を設定する場合、
backend.service.port.nameをuse-annotationに設定する必要があります。
リクエスト転送アクション
アクション | 説明 |
固定レスポンス | Application Load Balancer (ALB) からクライアントに固定レスポンスを送信します。レスポンスのステータスコード、コンテンツ、コンテンツタイプを設定できます。以下のコードは例です。
ユースケースと例については、「ユースケース 1:固定レスポンスの設定」をご参照ください。 |
リダイレクト | HTTP 3xx ステータスコードを使用して、クライアントを別のアドレスにリダイレクトします。以下のコードは例です。
重要 host、path、port、protocol、query パラメーターを元のリクエストの値を使用するように設定できますが、少なくとも 1 つはデフォルト以外の値に設定する必要があります。たとえば、host を ユースケースと例については、「ユースケース 2:301 リダイレクトの使用」をご参照ください。 |
トラフィックミラーリング | リクエストをコピーし、トラフィックミラーリングサーバーグループに転送します。サーバーグループの ID を指定する必要があります。以下のコードは例です。 重要
ユースケースと例については、「ユースケース 4:トラフィックのミラーリング」をご参照ください。 |
複数のバックエンドサーバーグループへの転送 | ALB リクエストを複数のバックエンドサーバーグループに転送します。ServerGroupID を使用してバックエンドサーバーグループを指定するか、ServiceName+ServicePort を使用してサーバーグループを作成またはアタッチできます。また、各バックエンドサーバーグループに転送の重みを設定し、サーバーグループ間のセッション維持を有効にすることもできます。 重要
ユースケースと例については、「ユースケース 5:複数のサーバーグループへの転送」をご参照ください。 |
書き換え | バックエンドに転送する前にリクエストを書き換えます。Application Load Balancer (ALB) は、リクエストのホスト、パス、クエリ文字列を変更できます。 重要
重要 パラメーター host、path、query は、元のリクエストの値を使用するように設定できます。ただし、これらのパラメーターの少なくとも 1 つは、デフォルト以外の値に設定する必要があります。たとえば、host を ユースケースと例については、「ユースケース 6:リクエストの書き換え」をご参照ください。 |
ヘッダーの挿入 | ヘッダーフィールド名とコンテンツを設定します。これにより、リクエスト内の同じ名前の既存のヘッダーが上書きされます。以下のコードは例です。
ユースケースと例については、「ユースケース 3:リクエストヘッダーの挿入」をご参照ください。 |
ヘッダーの削除 | リクエストからヘッダーを削除します。以下のコードは例です。 type:転送アクションのタイプ。リクエストヘッダーを削除するには、これを RemoveHeader に設定します。 key:削除するヘッダーフィールドの名前。 |
QPS 制限 | このアクションは、リクエストレートを秒間クエリ数 (QPS) で制限します。全体的な制限と、クライアントのソース IP ごとの個別の制限を設定できます。 以下のコードは設定例です: 重要
|
レスポンス転送アクション
アクション | 説明 |
ヘッダーの挿入 | レスポンスルールに適用されると、このアクションはレスポンスにヘッダーフィールドとその値を設定します。これにより、同じ名前の既存のレスポンスヘッダーが上書きされます。以下のコードは例です。
レスポンスヘッダーの変更に関するユースケースと例については、「ユースケース 7:レスポンスヘッダーの変更」および「ユースケース 8:ステータスコードによるレスポンスヘッダーの変更」をご参照ください。 |
ヘッダーの削除 | レスポンスルールに適用されると、このアクションはレスポンスからヘッダーを削除します。以下のコードは例です。 type:転送アクションのタイプ。レスポンスヘッダーを削除するには、これを key:削除するヘッダーフィールドの名前。 |
ユースケース 1:固定レスポンスの設定
コンソール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
[Ingress] ページで、[Ingress の作成] をクリックします。[Ingress の作成] ダイアログボックスで、Ingress を設定します。
パラメーター
説明
例
ゲートウェイタイプ
ビジネス要件に応じて、[ALB Ingress]、[MSE Ingress]、または [Nginx Ingress] を選択できます。
3 つのゲートウェイタイプの違いについては、「Nginx Ingress、ALB Ingress、MSE Ingress の比較」をご参照ください。
[ALB Ingress]
名前
Ingress のカスタム名。
ingress
Ingress クラス
関連付けられた Ingress クラスの名前。
alb
ルール
[+ ルールの追加] をクリックしてルーティングルールを追加します。
[ホスト]:カスタムホスト。
[マッピング]:以下のパラメーターを設定します。
[一致タイプ]:
[プレフィックス一致]:リクエスト URL パスのプレフィックスに一致します。
[完全一致]:リクエスト URL パスに完全に一致します。
[ImplementationSpecific (デフォルト値)]:動作は Ingress コントローラーの実装に依存します。ALB Ingress の場合、これは完全一致にデフォルト設定されます。
[サービス]:ターゲットサービスを選択します。これは Kubernetes サービスです。
[ポート]:サービスが公開するポートを選択します。
Ingress は同じホストの下で複数のパスをサポートします。[+ 追加] をクリックしてパスを追加します。
[ホスト]:空のままにします。
[マッピング]:
[パス]:/
[一致タイプ]:プレフィックス一致
[サービス]:response-503
[ポート]:80
カスタム転送ルール
詳細なトラフィック管理のためにカスタム転送ルールを設定します。
説明1 つの転送ルールには、最大 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
以下の YAML は、サービスへのリクエストが行われたときに 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 # 注:バックエンドサービスの名前は、カスタム転送アクションアノテーションの "service-name" と一致する必要があります。転送アクションはこのバックエンドサービスに適用されます。
port:
name: use-annotation # サービスポート名は use-annotation に設定する必要があります。ユースケース 2:301 リダイレクトの使用
この YAML の例は、リクエストをサービスの 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": "demo.domain.ingress.top",
"path": "/test",
"port": "443",
"protocol": "https",
"query": "querystring",
"httpCode": "301"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: redirect # 注:バックエンドサービスの名前は、カスタム転送アクションアノテーションの "redirect" と一致する必要があります。転送アクションはこのバックエンドサービスに適用されます。
port:
name: use-annotation # サービスポート名は use-annotation に設定する必要があります。複数のリダイレクト
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/listen-ports: |
[{"HTTP": 8001}]
alb.ingress.kubernetes.io/actions.redirect-1: |
[{
"type": "Redirect",
"RedirectConfig": {
"host": "demo.domain.ingress.top",
"path": "/test",
"port": "443",
"protocol": "https",
"query": "querystring",
"httpCode": "301"
}
}]
alb.ingress.kubernetes.io/actions.redirect-2: |
[{
"type": "Redirect",
"RedirectConfig": {
"host": "demo.domain.ingress.top",
"path": "/test",
"port": "443",
"protocol": "https",
"httpCode": "301"
}
}]
spec:
ingressClassName: ml-test-ingressclass-rolechain-2
rules:
- http:
paths:
- path: /foo
pathType: Prefix
backend:
service:
name: redirect-1
port:
name: use-annotation
- path: /bar
pathType: Prefix
backend:
service:
name: redirect-2
port:
name: use-annotationユースケース 3:リクエストヘッダーの挿入
この YAML の例は、リクエストヘッダーを 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 # 注:バックエンドサービスの名前は、カスタム転送アクションアノテーションの "insert-header" と一致する必要があります。転送アクションはこのバックエンドサービスに適用されます。
port:
number: 80ユースケース 4:トラフィックのミラーリング
以下の YAML は、トラフィックをサーバーグループにミラーリングする方法の例を示しています。
Application Load Balancer (ALB) コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。[サーバーグループ] ページで、サーバーグループ ID を取得します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: traffic-mirror-ingress
annotations:
# mirror-svc は、以下で指定された backend.service 名のいずれかである必要があります。
# 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 # 注:バックエンドサービスの名前は、カスタム転送アクションアノテーションの "mirror-svc" と一致する必要があります。転送アクションはこのバックエンドサービスに適用されます。
port:
number: 80ユースケース 5:複数のサーバーグループへの転送
コンソール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
[Ingress] ページで、[Ingress の作成] をクリックします。[Ingress の作成] ダイアログボックスで、Ingress を設定します。
パラメーター
説明
例
ゲートウェイタイプ
ビジネス要件に応じて、[ALB Ingress]、[MSE Ingress]、または [Nginx Ingress] を選択できます。
3 つのゲートウェイタイプの違いについては、「Nginx Ingress、ALB Ingress、MSE Ingress の比較」をご参照ください。
[ALB Ingress]
名前
Ingress のカスタム名。
forward-ingress
Ingress クラス
関連付けられた Ingress クラスの名前。
alb
ルール
[+ ルールの追加] をクリックしてルーティングルールを追加します。
[ホスト]:カスタムホスト。
[マッピング]:以下のパラメーターを設定します。
マッチタイプ:
[プレフィックス一致]:リクエスト URL パスのプレフィックスに一致します。
[完全一致]:リクエスト URL パスに完全に一致します。
[ImplementationSpecific (デフォルト値)]:Ingress コントローラーによって実装されたロジックに依存します。ALB Ingress は完全一致ロジックを使用します。
[サービス]:ターゲットサービスを選択します。これは Kubernetes サービスです。
[ポート]:サービスが公開するポートを選択します。
Ingress は同じホストの下で複数のパスをサポートします。[+ 追加] をクリックしてパスを追加します。
[ホスト]:demo.domain.ingress.top
[マッピング]:
[パス]:/path
[一致タイプ]:プレフィックス一致
サービス: 転送
[ポート]:80
カスタム転送ルール
インバウンドトラフィックを詳細に制御するために、カスタム転送ルールを有効にします。
説明1 つの転送ルールには、最大 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
他のパラメーターはデフォルト値のままにします。
設定が完了したら、[Ingress の作成] ページ左下の [OK] をクリックします。
Kubectl
以下の YAML は、クラスター内の複数のサービスにリクエストを転送する方法の例を示しています。
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 # 注:バックエンドサービスの名前は、カスタム転送アクションアノテーションの "service-name" と一致する必要があります。転送アクションはこのバックエンドサービスに適用されます。
port:
name: use-annotation # サービスポート名は use-annotation に設定する必要があります。ユースケース 6:リクエストの書き換え
書き換えは、リクエストがバックエンドに転送される前に URL を変更します。ALB Ingress はホスト、パス、クエリ文字列を変更でき、URL の簡素化、クライアントに透過的なリダイレクトの実行、バックエンドの実装詳細の隠蔽に役立ちます。以下の例では、alb.ingress.kubernetes.io/actions.service-name アノテーションを使用して書き換えが設定されています。
たとえば、クライアントが https://example.com/api/users にアクセスすると、書き換えによって URL は https://example.org/users に変更されますが、元のクエリ文字列は保持されます。
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": "example.org",
"Path": "/users",
"Query": "${query}" # ${query} は、元のリクエストのクエリ文字列が使用されることを示します。
}
}]
spec:
ingressClassName: alb
rules:
- host: example.com
http:
paths:
- path: /api/users
pathType: ImplementationSpecific
backend:
service:
name: service-name # バックエンドサービスの名前は、カスタム転送アクションアノテーションの "service-name" と一致する必要があります。転送アクションはこのバックエンドサービスに適用されます。
port:
number: 80ユースケース 7:レスポンスヘッダーの変更
デフォルトでは、ALB Ingress の転送ルールはリクエストに適用されます。ルールをレスポンスに適用するには、
alb.ingress.kubernetes.io/rule-direction.<service-name>アノテーションをResponseに設定する必要があります。レスポンスの転送ルールを作成する場合、
backend.service.port.nameをuse-annotationに設定する必要があります。
以下のコードブロックは、ResponseHeader が一致した場合、つまりヘッダーに値が value1 または value2 の response-hello が含まれている場合に、新しいリクエストヘッダー source: alibaba を挿入することを定義しています。
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 # サービスポート名は use-annotation に設定する必要があります。ユースケース 8:ステータスコードによるレスポンスヘッダーの変更
デフォルトでは、ALB Ingress の転送ルールはリクエストに適用されます。ルールをレスポンスに適用するには、
alb.ingress.kubernetes.io/rule-direction.<service-name>アノテーションをResponseに設定する必要があります。レスポンスの転送ルールを作成する場合、
backend.service.port.nameをuse-annotationに設定する必要があります。
この YAML の例では、レスポンスステータスコードが 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 # サービスポート名は use-annotation に設定する必要があります。転送条件とアクション
ユースケース 1:ドメイン名に基づくトラフィックの転送
このセクションでは、ACK コンソールでドメイン名に基づいて転送条件とアクションを設定し、特定のサービスにトラフィックをルーティングする方法を説明します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
[Ingress] ページで、[Ingress の作成] をクリックします。[Ingress の作成] ダイアログボックスで、Ingress を設定します。
パラメーター
説明
例
ゲートウェイタイプ
ビジネス要件に応じて、[ALB Ingress]、[MSE Ingress]、または [Nginx Ingress] を選択できます。
3 つのゲートウェイタイプの違いについては、「Nginx Ingress、ALB Ingress、MSE Ingress の比較」をご参照ください。
ALB イングレス
名前
Ingress のカスタム名。
alb_ingress
Ingress クラス
関連付けられた IngressClass の名前。
alb
[ルール]
[+ ルールの追加] をクリックして、1 つ以上のルーティングルールを追加します。
[ドメイン名]:カスタムドメイン名。
[マッピング]:以下のパラメーターを設定します。
[パス]:リクエストマッチングのための URL パス。
[ルール]:
[プレフィックス (プレフィックス一致)]:リクエスト URL パスのプレフィックスに一致します。
[完全 (完全一致)]:リクエスト URL パスに完全に一致します。
[ImplementationSpecific (デフォルト)]:動作は Ingress コントローラーの実装に依存します。ALB Ingress の場合、このオプションは完全一致として機能します。
[サービス名]:ターゲットサービスを選択します。これは Kubernetes サービスです。
[ポート]:サービスが公開するポートを選択します。
Ingress は同じドメイン名の下で複数のパスをサポートします。[+ パスの追加] をクリックして、さらにパスを追加します。
[ドメイン名]:*.example.com
[マッピング]:
[パス]:/tes
ルール:ImplementationSpecific
[サービス名]:tea-svc
[ポート]:80
[カスタム転送ルール]
インバウンドトラフィックを詳細に制御するために、カスタム転送ルールを定義します。
説明1 つの転送ルールには、最大 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 サービスはサポートされていません。
[転送先] を選択した場合、ルールで サービスを公開するための ALB Ingress の作成と使用 を設定する必要はありません。
[条件]:[ドメイン名]、[パス]、[HTTP ヘッダー] を選択します。
[ドメイン名]:example.com。[ドメイン名の追加] をクリックして、test.com などの別のドメイン名を追加します。
[アクション]:[転送先] を選択します。
[サービス名]:tea-svc
[ポート]:80
重み: 100
他のパラメーターはデフォルト値のままにします。
設定は完了です。[Ingress の作成] ページの左下隅にある [OK] をクリックします。