Application Load Balancer(ALB)イングレスを使用すると、カスタムルーティング規則を設定できます。ルーティング規則は、ルーティング条件とアクションで構成されます。リクエスト内のドメイン名、パス、リクエストヘッダー、クエリ文字列、リクエストメソッド、Cookie、または送信元IPアドレスに一致するルーティング条件を追加できます。また、固定レスポンスを返す、リクエストをリダイレクトする、リクエストヘッダーを挿入する、リクエストヘッダーを削除する、トラフィックをミラーリングする、複数のバックエンドサーバーグループにリクエストを転送する、またはリクエストを書き換えるルーティングアクションを追加することもできます。このトピックでは、ALBイングレスのルーティング規則をカスタマイズする方法について説明します。
前提条件
ALBイングレスコントローラー 2.5.0以降がクラスターにインストールされています。詳細については、「コンポーネントの管理」をご参照ください。
ALBコンソールでALBイングレスのカスタムルーティング規則を設定できます。この機能はカナリーリリースされています。この機能を使用するには、チケットを送信してください。
ルーティング条件
1つのルーティング規則には最大10個のルーティング条件を追加できます。
ルーティング条件ResponseHeaderとResponseStatusCodeは、カスタムアウトバウンドルーティング規則でのみ有効です。
ルーティング条件の概要
ALBイングレスでは、alb.ingress.kubernetes.io/conditions.<サービス名>
アノテーションでルーティング条件を設定できます。異なるルールブロック間の論理関係はANDです。1つのルールブロックで複数の値が指定されている場合、値間の論理関係はORです。たとえば、2つのヘッダールールブロックを設定した場合、2つのヘッダールールブロック間の論理関係はANDです。ヘッダールールブロックで複数のヘッダーを設定した場合、ヘッダー間の論理関係はORです。次の表に、ALBイングレスに作成できるルーティング規則を示します。
ルーティング条件 | 説明 |
ドメイン名 | 指定されたドメイン名宛てのリクエストのみをルーティングするために、この条件を追加できます。例:
|
リクエストがリダイレクトされるURL。 | 指定されたパスに送信されたリクエストのみをルーティングするために、この条件を追加できます。例:
|
ヘッダー | 指定されたヘッダーを含むリクエストのみをルーティングするために、この条件を追加できます。例:
|
クエリ文字列 | 指定されたクエリ文字列を含むリクエストのみをルーティングするために、この条件を追加できます。例:
|
リクエストメソッド | 指定されたリクエストメソッドを使用するリクエストのみをルーティングするために、この条件を追加できます。例:
|
Cookie | 指定されたCookieを含むリクエストのみをルーティングするために、この条件を追加できます。例:
|
SourceIP | 指定された送信元IPアドレスからのリクエストのみをルーティングするために、この条件を追加できます。例:
|
ResponseHeader | 指定されたレスポンスヘッダーを含むレスポンスのみをルーティングするために、この条件を追加できます。例:
|
ResponseStatusCode | 指定されたステータスコードを返すリクエストのみをルーティングするために、この条件を追加できます。例:
|
シナリオ1: 送信元IPアドレスとリクエストヘッダーに基づいてトラフィックをルーティングする
1つのルーティング規則のカスタム条件には、最大5つの送信元IPアドレスを追加できます。
次のコードブロックは、送信元IPアドレス、リクエストヘッダー、およびパスに基づいてパケットをルーティングするために使用されます。
次のコードブロックでは、送信元IPアドレスは 192.168.0.0/16 と 172.16.0.0/16 に設定され、ヘッダーキーは gray-hello に設定され、ヘッダー値は value1 と value2 に設定され、パスは /hello に設定されています。送信元IPアドレス、ヘッダー、およびパスが上記のすべての条件に一致するリクエストのみが gray-hello サービスにルーティングされます。その他のリクエストは他のサービスにルーティングされます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "1"
alb.ingress.kubernetes.io/conditions.gray-hello: |
[{
"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
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /hello
pathType: ImplementationSpecific
backend:
service:
name: gray-hello
port:
number: 88
alb.ingress.kubernetes.io/order: Ingressの優先順位。値が小さいほど優先順位が高くなります。
シナリオ2: ドメイン名、リクエストメソッド、およびCookieに基づいてトラフィックをルーティングする
次のコードブロックは、ドメイン名、リクエストメソッド、およびCookieに基づいてパケットをルーティングするために使用されます。
次のコードブロックでは、リクエストメソッドは GET と HEAD に設定され、ドメイン名は www.hostvalue1.edu と www.hostvalue2.edu に設定され、Cookieのキーは cookiekey1 に設定され、Cookieの値は cookievalue1 に設定され、パスは /test に設定されています。ドメイン名、リクエストメソッド、Cookie、およびパスが上記のすべての条件に一致するリクエストのみが gray-hello サービスにルーティングされます。その他のリクエストは service-b サービスにルーティングされます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.service-a: |
[{
"type": "Cookie",
"cookieConfig": {
"values": [
{
"key":"cookiekey1",
"value":"cookievalue1"
}
]
}
},
{
"type": "Method",
"methodConfig": {
"values": [
"GET",
"HEAD"
]
}
},
{
"type": "Host",
"hostConfig": {
"values": [
"www.hostvalue1.edu",
"www.hostvalue2.edu"
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: 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 でなければならず、headervalue2 のヘッダー値は headervalue3 または headervalue4 でなければなりません。クエリ文字列、リクエストヘッダー、およびパスが上記のすべての条件に一致するリクエストのみが service-a サービスにルーティングされます。その他のリクエストは service-b サービスにルーティングされます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.service-a: |
[{
"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
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88
ルーティングアクション
ルーティングアクションの概要
ALBイングレスでは、alb.ingress.kubernetes.io/actions.<サービス名>
アノテーションで、インバウンドおよびアウトバウンドルーティング規則のルーティングアクションを設定できます。固定レスポンスを返す、リクエストをリダイレクトする、リクエストヘッダーを挿入する、リクエストヘッダーを削除する、トラフィックをミラーリングする、複数のバックエンドサーバーグループにリクエストを転送する、またはリクエストを書き換えるルーティングアクションを追加できます。ALBイングレスでは、必要に応じてリクエストとレスポンスを処理するために、さまざまなルーティングアクションを定義できます。
alb.ingress.kubernetes.io/actions.<Service name>
アノテーションのサービス名は、backend
内のrule
フィールドで指定されたサービス名と同じである必要があります。同じルーティングルールでは、複数の終了アクションを同時に追加することはできません。たとえば、固定応答を返す、リクエストをリダイレクトする、または複数のバックエンドサーバーグループにリクエストを転送するルーティングアクションを同時に追加することはできません。
固定応答を返す、リクエストをリダイレクトする、または複数のバックエンドサーバーグループにリクエストを転送するルーティングアクションを追加する場合、サービスポート
backend
rule
フィールドの アノテーションを使用 で指定された servicePort の名前は、 である必要があります。
受信ルーティング規則のルーティング アクション
ルーティングアクション | 説明 |
固定レスポンスを返す | ALB Ingress を設定して、クライアントに固定コンテンツを返すことができます。クライアントに返されるステータスコード、コンテンツ、およびコンテンツのタイプを指定できます。例:
|
リクエストをリダイレクトする | HTTP 3XX ステータスコードを使用して、リクエストを他のサービスアドレスにリダイレクトできます。例: 重要 httpCode を除き、すべてのリダイレクトパラメーターのデフォルト設定を同時に維持することはできません。
|
トラフィックをミラーリングする | サーバーグループの ID を指定して、トラフィックを指定したサーバーグループにミラーリングできます。例: 重要
|
複数のバックエンドサーバーグループにリクエストを転送する | 複数のバックエンドサーバーグループにリクエストを転送するには、ServerGroupID フィールドを設定してサーバーグループ ID を指定するか、ServiceName と ServicePort フィールドを設定してサーバーグループを作成または関連付ける必要があります。各バックエンドサーバーグループの重みを指定することもできます。例: 重要
|
リクエストを書き換える | ALB インスタンスの書き換えルールを設定すると、リクエストのドメイン名、パス、およびクエリ文字列が書き換えられます。例: 重要
書き換えルールの詳細については、「書き換えルールを設定する」をご参照ください。 |
リクエストヘッダーを挿入する | ヘッダーフィールドの名前と値を指定して、リクエスト内の既存のヘッダー変数を上書きできます。例:
|
リクエストヘッダーを削除する | リクエストヘッダーのキーと値を削除できます。例:
|
QPS 調整 | ALB インスタンスの転送ルールを設定する際に、グローバルリクエストレート制限とクライアント IP アドレスに基づくリクエストレート制限を設定できます。 サンプルコード: 重要
|
インバウンドルーティング規則のルーティングアクション
ルーティングアクション | 説明 |
リクエストヘッダーの挿入 | リクエスト内の既存のヘッダー変数を上書きするために、ヘッダーフィールドの名前と値を指定できます。例:
|
リクエストヘッダーの削除 | リクエストヘッダーのキーと値を削除できます。例:
|
シナリオ 1:ステータスコード 503 と固定コンテンツを返す
ACSコンソールを使用する
[ACSコンソール] にログオンします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、そのIDをクリックします。クラスター詳細ページの左側のナビゲーションペインで、[ネットワーク] > [イングレス] を選択します。
[イングレス] ページで、[イングレスの作成] をクリックします。[イングレスの作成] ダイアログボックスで、イングレスを設定します。
パラメーター
説明
例
ゲートウェイタイプ
ビジネス要件に基づいて、ALBまたはMSEイングレスを選択できます。
ALB
名前
イングレスの名前を指定します。
ingress
イングレスクラス
イングレスのクラスを指定します。
alb
リスナー/ポート
AlbConfigで指定したALBインスタンスのリスナーポートとプロトコル。リスナーとプロトコルは、ALBインスタンスがトラフィックを受信および処理する方法を定義します。
HTTP:80
ルール
[+ルールを追加] をクリックして、イングレスルールを追加します。
ドメイン名: カスタムドメイン名を入力します。
マッピング: 次のパラメーターを指定します。
パス: バックエンドサービスのURLパスを入力します。この例では、ルートパス / が使用されています。
ルール: [プレフィックス(プレフィックスベースのマッチ)]、[完全一致(完全一致)]、または [実装固有(デフォルト値)] を選択できます。
サービス: バックエンドサービスを選択します。
ポート: 公開するサービスポートを指定します。
ドメイン名に複数のパスを設定できます。[+追加] をクリックしてパスを追加します。
ドメイン名: このパラメーターは空のままにします。
マッピング:
パス: /
ルール: プレフィックス(プレフィックスベースのマッチ)がデフォルトで選択されています。
サービス: response-503
ポート: 80.
TLS設定
TLS認証を有効にするかどうかを指定します。イングレスのTLS認証を有効にすることができます。
ドメイン名: カスタムドメイン名を入力します。
シークレット: クラスターで使用されるシークレット。ビジネス要件に基づいてシークレットを選択します。
[TLS設定] をオフにします。この例では、TLS証明書を設定する必要はありません。
詳細
カナリアリリース: カナリアリリースを有効にします。リクエストヘッダー、Cookie、および重みに基づいてカナリアリリースルールを設定できます。
説明リクエストヘッダー、Cookie、および重みのいずれか1つの要素のみに基づいてカナリアリリースルールを設定できます。また、リクエストヘッダー、Cookie、および重みに基づいて同時にカナリアリリースルールを設定することもできます。この場合、リクエストヘッダー、Cookie、および重みは優先順位の高い順に有効になります。
リクエストヘッダーに基づく:
nginx.ingress.kubernetes.io/canary-by-header
、nginx.ingress.kubernetes.io/canary-by-header-value
、またはnginx.ingress.kubernetes.io/canary-by-header-pattern
アノテーションを追加することにより、リクエストヘッダーに基づいてトラフィックを分散します。Cookieに基づく:
nginx.ingress.kubernetes.io/canary-by-cookie
アノテーションを追加することにより、Cookieに基づいてトラフィックを分散します。重みに基づく:
nginx.ingress.kubernetes.io/canary-weight
アノテーションを追加することにより、サービスの重み(0~100の整数)に基づいてトラフィックを分散します。
プロトコル:
nginx.ingress.kubernetes.io/backend-protocol
アノテーションを追加することにより、バックエンドサービスで使用されるプロトコルを選択します。HTTP、HTTPS、gRPC、およびgRPCSがサポートされています。
パスの書き換え:
nginx.ingress.kubernetes.io/rewrite-target
アノテーションを追加して、リクエストがバックエンドサービスに転送される前に、クライアントリクエストのパスを書き換えます。
[カナリアリリース] をオフにします。[プロトコル] パラメーターと [パスの書き換え] パラメーターのデフォルト値を使用します。この例では、これらのパラメーターを設定する必要はありません。
カスタム転送ルール
説明ALBコンソールでALBイングレスのカスタムルーティングルールを設定できます。この機能はカナリアリリース版です。この機能を使用するには、チケットを送信 してください。
カスタム転送ルールを有効にして、受信トラフィックをきめ細かく管理できます。
説明転送ルールには最大 10 個の条件を追加できます。
[条件を追加] ドロップダウンリストでは、次の条件タイプを使用できます。
ドメイン名:
指定された1つ以上のドメイン名を含むリクエストのみがルーティングされます。複数のドメイン名の論理関係はORです。ドメイン名を指定すると、システムは
alb.ingress.kubernetes.io/conditions.host-example
アノテーションを追加します。パス:
指定された1つ以上のパスを含むリクエストのみがルーティングされます。複数のパスの論理関係はORです。パスを指定すると、システムは
alb.ingress.kubernetes.io/conditions.path-example
アノテーションを追加します。HTTPヘッダー:
指定された1つ以上のHTTPヘッダーを含むリクエストのみがルーティングされます。各HTTPリクエストヘッダーはキーと値のペアです。たとえば、[キー] を
headername
に、[値] をheadervalue1
に設定できます。複数のヘッダー値を指定した場合、ヘッダー値間の論理関係はORです。ヘッダーを指定すると、システムはalb.ingress.kubernetes.io/conditions.http-header-example
アノテーションを追加します。
[アクション] ドロップダウンリストでは、次のアクションを使用できます。
転送先
受信トラフィックを複数のバックエンドサーバーグループに転送します。受信トラフィックを転送するには、次の操作を実行します。[サービス] ドロップダウンリストからアクセスするサービスを選択します。[ポート] ドロップダウンリストからサービスへの接続に使用するポートを選択します。各バックエンドサーバーグループのカスタムの重みを指定します。
説明クラスターがFlannelコンポーネントを使用している場合、ClusterIPサービスはサポートされていません。
[アクション] ドロップダウンリストから [転送先] を選択した場合、ルールの [マッピング] パラメーターを設定する必要はありません。
固定レスポンスを返す
ALBインスタンスによってクライアントに固定コンテンツが返されるように指定します。クライアントに返されるステータスコード、コンテンツ、およびコンテンツのタイプを指定できます。ビジネス要件に基づいて、[レスポンスステータスコード]、[レスポンスコンテンツタイプ(オプション)]、および [レスポンスコンテンツ(オプション)] パラメーターを設定します。
レスポンスコンテンツタイプ パラメーターの有効な値:
text/plain: コンテンツがプレーンテキストであることを示します。
text/css: コンテンツがXML形式であることを示します。
text/html: コンテンツがHTML形式であることを示します。
application/javascript: コンテンツがJavaScript形式であることを示します。
application/json: コンテンツがJSON形式であることを示します。
カスタム転送ルールでは、複数の条件とアクションを指定できます。ドメイン名、パス、およびHTTPリクエストヘッダーを転送条件として設定し、受信トラフィックをバックエンドサーバーグループに転送したり、クライアントに固定コンテンツを返したりできます。
[条件の追加] ドロップダウンリストでは、デフォルトで [パス] が選択されています。(デフォルト設定を維持します)
アクション ドロップダウンリストで、固定応答を返す が選択されています。
レスポンスステータスコード: 503
レスポンスコンテンツタイプ(オプション): text/plain
レスポンスコンテンツ(オプション): エラー
アノテーション
カスタムアノテーション名と値を入力できます。ドロップダウンリストから名前でアノテーションを選択または検索することもできます。イングレスアノテーションの詳細については、「ALBイングレスGlobalConfigurationディクショナリ」をご参照ください。
[+アノテーションを追加] をクリックして、アノテーションを追加します。ACSでは、追加できるイングレスアノテーションの数に制限はありません。
この例では、アノテーションを設定する必要はありません。
ラベル
イングレスの特性を記述するためにラベルを追加できます。
[+ラベルを追加] をクリックして、ラベルを追加します。追加できるイングレスラベルの数に制限はありません。
この例では、ラベルを設定する必要はありません。
設定が完了したら、[イングレスの作成] パネルの左下隅にある [OK] をクリックします。
kubectl
次のコードブロックは、ステータスコード 503 と 503 error text
を返すために使用されます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.response-503: |
[{
"type": "FixedResponse", // タイプを「FixedResponse」に設定します
"FixedResponseConfig": {
"contentType": "text/plain", // コンテンツタイプを「text/plain」に設定します
"httpCode": "503", // HTTPコードを「503」に設定します
"content": "503 error text" // コンテンツを「503 error text」に設定します
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: response-503
port:
name: use-annotation # サービスポートの名前は use-annotation である必要があります。
シナリオ 2:301 リダイレクトを使用して HTTPS ポートにリクエストをリダイレクトする
次のコードブロックは、リクエストを HTTPS ポートにリダイレクトするために使用されます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.redirect: |
[{
"type": "Redirect",
"RedirectConfig": {
"host": "${host}",
"path": "${path}",
"port": "${port}",
"protocol": "https",
"query": "${query}",
"httpCode": "301"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: redirect
port:
name: use-annotation # Serviceポートの名前は use-annotation である必要があります。
シナリオ 3:リクエストにソース:alibaba ヘッダーを挿入する
次のコードブロックは、リクエスト内の既存のヘッダーを source: alibaba ヘッダーで上書きするために使用されます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
# アノテーションで指定されたサービスは、クラスター内の既存のサービスである必要があり、サービス名は、ruleフィールドのbackendパラメーターで指定されたサービス名と同じである必要があります。
alb.ingress.kubernetes.io/actions.insert-header: |
[{
"type": "InsertHeader",
"InsertHeaderConfig": {
"key": "source",
"value": "alibaba",
"valueType": "UserDefined"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: insert-header
port:
number: 80
シナリオ 4:サーバーグループへのトラフィックのミラーリング
次のコードブロックは、指定されたサーバーグループにトラフィックをミラーリングするために使用されます。
サーバーロードバランサー(SLB)コンソールにログオンします。左側のナビゲーションペインで、 を選択します。[サーバーグループ] ページで、サーバーグループの ID を表示できます。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: traffic-mirror-ingress
annotations:
# アノテーションで指定されたサービスは、クラスター内の既存のサービスである必要があり、サービス名は、ruleフィールドのbackendで指定されたサービス名と同じである必要があります。
alb.ingress.kubernetes.io/actions.traffic-mirror: |
[{
"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: traffic-mirror
port:
number: 80
シナリオ 5:複数のバックエンドサーバーグループへのリクエストの転送
ACSコンソールを使用する
[ACSコンソール] にログオンします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、そのIDをクリックします。クラスター詳細ページの左側のナビゲーションペインで、[ネットワーク] > [イングレス] を選択します。
[イングレス] ページで、[イングレスの作成] をクリックします。[イングレスの作成] ダイアログボックスで、イングレスを設定します。
パラメーター
説明
例
ゲートウェイタイプ
ビジネス要件に基づいて、ALBまたはMSEイングレスを選択できます。
ALB
名前
イングレスの名前を指定します。
forward-ingress
イングレスクラス
イングレスのクラスを指定します。
alb
リスナー/ポート
AlbConfigで指定したALBインスタンスのリスナーポートとプロトコル。リスナーとプロトコルは、ALBインスタンスがトラフィックを受信および処理する方法を定義します。
HTTP:80
ルール
[+ルールを追加] をクリックして、イングレスルールを追加します。
ドメイン名: カスタムドメイン名を入力します。
マッピング: 次のパラメーターを指定します。
パス: バックエンドサービスのURLパスを入力します。この例では、ルートパス / が使用されています。
ルール: [プレフィックス (プレフィックスベースのマッチ)]、[完全一致 (完全一致)]、または [implementationspecific (デフォルト値)] を選択できます。
サービス: バックエンドサービスを選択します。
ポート: 公開するサービスポートを指定します。
ドメイン名に複数のパスを設定できます。[+ 追加] をクリックして、パスを追加します。
ドメイン名: demo.domain.ingress.top
マッピング:
パス: /path
ルール: プレフィックス (プレフィックスベースのマッチ) がデフォルトで選択されています。
サービス: forward
ポート: 80
TLS設定
TLS認証を有効にするかどうかを指定します。イングレスのTLS認証を有効にできます。
ドメイン名: カスタムドメイン名を入力します。
シークレット: クラスターで使用されるシークレット。ビジネス要件に基づいてシークレットを選択します。シークレットを作成する場合、次の手順を実行します。
シークレット の右側にある [作成] をクリックします。
[シークレットの作成] ダイアログボックスで、名前、証明書、キー の各パラメーターを設定します。次に、[OK] をクリックします。
シークレット ドロップダウンリストから作成したシークレットを選択します。
[TLS設定] をオフにします。この例では、TLS証明書を設定する必要はありません。
詳細
カナリアリリース: カナリアリリースを有効にします。リクエストヘッダー、Cookie、および重みに基づいてカナリアリリースルールを設定できます。
説明リクエストヘッダー、Cookie、および重みのいずれか1つの要素に基づいてのみカナリアリリースルールを設定できます。また、リクエストヘッダー、Cookie、および重みに基づいて同時にカナリアリリースルールを設定することもできます。この場合、リクエストヘッダー、Cookie、および重みは優先順位の高い順に有効になります。
リクエストヘッダーに基づく:
nginx.ingress.kubernetes.io/canary-by-header
、nginx.ingress.kubernetes.io/canary-by-header-value
、またはnginx.ingress.kubernetes.io/canary-by-header-pattern
アノテーションを追加することにより、リクエストヘッダーに基づいてトラフィックを分散します。Cookieに基づく:
nginx.ingress.kubernetes.io/canary-by-cookie
アノテーションを追加することにより、Cookieに基づいてトラフィックを分散します。重みに基づく:
nginx.ingress.kubernetes.io/canary-weight
アノテーションを追加することにより、サービスの重み (0~100の整数) に基づいてトラフィックを分散します。
プロトコル:
nginx.ingress.kubernetes.io/backend-protocol
アノテーションを追加することにより、バックエンドサービスで使用されるプロトコルを選択します。HTTP、HTTPS、gRPC、およびgRPCSがサポートされています。
パスの書き換え:
nginx.ingress.kubernetes.io/rewrite-target
アノテーションを追加して、リクエストがバックエンドサービスに転送される前に、クライアントリクエストのパスを書き換えます。
カナリアリリースをオフにします。プロトコルおよびパスの書き換えパラメーターのデフォルト値を使用します。この例では、これらのパラメーターを設定する必要はありません。
カスタム転送ルール
説明ALBコンソールでALBイングレスのカスタムルーティングルールを設定できます。この機能はカナリアリリース版です。この機能を使用するには、チケットを提出 してください。
カスタム転送ルールを有効にして、受信トラフィックをきめ細かく管理できます。
説明転送ルールには最大 10 個の条件を追加できます。
[条件を追加] ドロップダウンリストでは、次の条件タイプを使用できます。
ドメイン名:
指定された1つ以上のドメイン名を含むリクエストのみがルーティングされます。複数のドメイン名間の論理関係はORです。ドメイン名を指定すると、システムは
alb.ingress.kubernetes.io/conditions.host-example
アノテーションを追加します。パス:
指定された1つ以上のパスを含むリクエストのみがルーティングされます。複数のパス間の論理関係はORです。パスを指定すると、システムは
alb.ingress.kubernetes.io/conditions.path-example
アノテーションを追加します。HTTPヘッダー:
指定された1つ以上のHTTPヘッダーを含むリクエストのみがルーティングされます。各HTTPリクエストヘッダーはキーと値のペアです。たとえば、キー を
headername
に、値 をheadervalue1
に設定できます。複数のヘッダー値を指定した場合、ヘッダー値間の論理関係はORです。ヘッダーを指定すると、システムはalb.ingress.kubernetes.io/conditions.http-header-example
アノテーションを追加します。
[アクション] ドロップダウンリストでは、次のアクションを使用できます。
転送先
受信トラフィックを複数のバックエンドサーバーグループに転送します。受信トラフィックを転送するには、次の操作を実行します。[サービス] ドロップダウンリストからアクセスするサービスを選択します。[ポート] ドロップダウンリストからサービスへの接続に使用するポートを選択します。各バックエンドサーバーグループのカスタムの重みを指定します。
説明クラスターがFlannelコンポーネントを使用している場合、ClusterIPサービスはサポートされていません。
[アクション] ドロップダウンリストから [転送先] を選択した場合、ルールの [マッピング] パラメーターを設定する必要はありません。
固定レスポンスを返す
ALBインスタンスによってクライアントに固定コンテンツが返されることを指定します。クライアントに返されるステータスコード、コンテンツ、およびコンテンツのタイプを指定できます。ビジネス要件に基づいて、[レスポンスステータスコード]、[レスポンスコンテンツタイプ (オプション)]、および [レスポンスコンテンツ (オプション)] パラメーターを設定します。
[レスポンスコンテンツタイプ] パラメーターの有効な値:
text/plain: コンテンツがプレーンテキストであることを示します。
text/css: コンテンツがXML形式であることを示します。
text/html: コンテンツがHTML形式であることを示します。
application/javascript: コンテンツがJavaScript形式であることを示します。
application/json: コンテンツがJSON形式であることを示します。
カスタム転送ルールでは、複数の条件とアクションを指定できます。ドメイン名、パス、およびHTTPリクエストヘッダーを転送条件として設定し、受信トラフィックをバックエンドサーバーグループに転送したり、クライアントに固定コンテンツを返したりできます。
[条件を追加] ドロップダウンリストで、[ドメイン名] が選択されています。ドメイン名: demo.domain.ingress.top
[アクション] ドロップダウンリストで、[転送先] が選択されています。
サービス: tea-svc
ポート: 80
重み: 80
[サービスを追加]
サービス: coffee-svc
ポート: 80
重み: 20
アノテーション
カスタムアノテーション名と値を入力できます。ドロップダウンリストから名前でアノテーションを選択または検索することもできます。イングレスアノテーションの詳細については、「ALBイングレス GlobalConfigurationディクショナリ」をご参照ください。
[+アノテーションを追加] をクリックして、アノテーションを追加します。ACSは、追加できるイングレスアノテーションの数に制限を設けていません。
この例では、アノテーションを設定する必要はありません。
ラベル
イングレスの特性を記述するためにラベルを追加できます。
[+ラベルを追加] をクリックして、ラベルを追加します。追加できるイングレスラベルの数に制限はありません。
この例では、ラベルを設定する必要はありません。
設定が完了したら、[イングレスの作成] パネルの左下隅にある [OK] をクリックします。
kubectl
次のコードブロックは、クラスター内の複数のサービスにリクエストを転送するイングレスを定義しています。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: forward-ingress
annotations:
# アノテーションで指定されたサービスは、クラスター内の既存のサービスでなければならず、サービス名は、ruleフィールドのbackendで指定されたサービス名と同じでなければなりません。
alb.ingress.kubernetes.io/actions.forward: |
[{
"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: forward
port:
name: use-annotation # サービスポートの名前は use-annotation でなければなりません。
シナリオ 6:リクエストの書き換え
次のコードブロックは、リクエストのドメイン名、パス、およびクエリ文字列を書き換える Ingress を定義しています。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/actions.rewrite: |
[{
"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: rewrite
port: 80
シナリオ 7:ResponseHeader に基づいてレスポンスヘッダーを変更する
デフォルトでは、カスタムルーティングルールは受信方向に適用されます。カスタムルーティングルールを送信方向に適用するには、
alb.ingress.kubernetes.io/rule-direction.<Service name>
アノテーションを Response に設定します。アノテーションはデフォルトで Request に設定されています。カスタム送信ルーティングルールを作成する場合、
ingressSpec.rules.backend
フィールドのservicePort
の名前はuse-annotation
である必要があります。
次のコードブロックでは、response header
が一致する場合(ヘッダーに response-hello
が含まれ、値が value1
または value2
である必要がある場合)、新しいリクエストヘッダー 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: |
[{
"type": "ResponseHeader",
"responseHeaderConfig": {
"key": "response-hello",
"values": [
"value1",
"value2"
]
}
}]
alb.ingress.kubernetes.io/actions.response-header: |
[{
"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
port:
name: use-annotation # Serviceポートの名前は use-annotation である必要があります。
シナリオ 8:レスポンスステータスコードに基づいてレスポンスヘッダーを変更する
デフォルトでは、カスタムルーティングルールは受信方向に適用されます。カスタムルーティングルールを送信方向に適用するには、
alb.ingress.kubernetes.io/rule-direction.<Service name>
アノテーションを Response に設定します。アノテーションはデフォルトで Request に設定されています。カスタム送信ルーティングルールを作成する場合、
ingressSpec.rules.backend
フィールドのservicePort
の名前は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: |
[{
"type": "ResponseStatusCode",
"responseStatusCodeConfig": {
"values": [
"200",
"300"
]
}
}]
alb.ingress.kubernetes.io/actions.response-hello: |
[{
"type": "RemoveHeader",
"RemoveHeaderConfig": {
"key": "response-hello"
}
}]
name: response-hello
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /*
pathType: ImplementationSpecific
backend:
service:
name: response-hello
port:
name: use-annotation # Serviceポートの名前は use-annotation である必要があります。