許容モードのトラフィックレーンを使用して、アプリケーションのバージョンを隔離できます。伝播されたリクエストヘッダーと Ingress リクエストヘッダーに基づいて、トラフィックは異なるレーンにルーティングされます。レーン内のサービスが相互に呼び出す際、現在のレーンに宛先サービスが存在しない場合、システムはリクエストをベースラインレーンに転送します。これにより、呼び出しチェーンの整合性が確保され、トラフィック管理が簡素化されます。
開始する前に、「許容モードのトラフィックレーンを使用したエンドツーエンドのトラフィック管理」とその関連概念を読み、理解してください。
シナリオ概要
この例では、mocka、mockb、mockc の 3 つのサービスを使用して、呼び出しチェーンの 3 つのバージョン (s1、s2、s3) を表す 3 つのトラフィックレーンを作成します。レーン s1 はベースラインレーンであり、3 つすべてのサービスを含みます。レーン s2 は mocka と mockc サービスのみを含みます。レーン s3 は mockb サービスのみを含みます。
ステップ 1:レーングループとレーンの作成
-
レーングループを作成します。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
Mesh Management ページで、対象のインスタンス名をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Traffic Lane ページで、Create Swimlane Group をクリックします。Create Swimlane Group パネルでパラメーターを設定し、OK をクリックします。
パラメーター
説明
Name of swim lane group
この例では、名前を test に設定します。
Entrance gateway
[ingressgateway] を選択します。
Lane Mode
Permissive Mode を選択します。
Pass-through Mode of Trace Context
Pass Through Trace ID を選択します。
Trace ID Request Header
サンプルアプリケーションは、呼び出しチェーンを通じて
my-trace-idリクエストヘッダーを伝播します。したがって、このパラメーターをmy-trace-idに設定します。Routing Request Header
このヘッダーは、ゲートウェイが Ingress トラフィックを異なるレーンにルーティングし、レーンコンテキストを維持するために使用されます。有効なヘッダー名を指定できます。この例では、x-asm-prefer-tag を使用します。
Swimlane Services
対象の Kubernetes クラスターと [default] 名前空間を選択します。利用可能なサービスのリストから [mocka]、[mockb]、[mockc] を選択し、
アイコンをクリックして selected リストに移動します。構成を完了すると、システムは対応する
TrafficLabelリソースを自動的に生成します。左側のナビゲーションウィンドウで TrafficLabel をクリックすると、リソースを表示できます。例えば、mockaサービス用に次のTrafficLabelが生成されます。
-
-
s1、s2、s3 のレーンを作成し、それぞれ v1、v2、v3 バージョンにバインドします。
-
Traffic Lane ページで、Traffic Rule Definition セクションの Create swimlanes をクリックします。
-
Create swimlanes ダイアログボックスでパラメーターを設定し、OK をクリックします。
パラメーター
説明
Swimlane Name
3 つのレーンにそれぞれ s1、s2、s3 と名前を付けます。
Configure Service Tag
Label Key:ASM_TRAFFIC_TAG を選択します。
Label Value:レーン s1 には v1、レーン s2 には v2、レーン s3 には v3 を選択します。
Add Service
s1 レーン:mocka(default)、mockb(default)、mockc(default) を選択します。
s2 レーン:mocka(default) と mockc(default) を選択します。
s3 レーン:mockb(default) を選択します。
3 つのレーンを作成すると、結果は次の図のようになります:
説明デフォルトでは、レーングループで最初に作成したトラフィックレーンがベースラインレーンになります。ベースラインレーンは変更できます。リクエストの対象サービスが現在のレーンにない場合、フォールバックメカニズムによってベースラインレーンに転送されます。詳細については、「許容モードでのベースラインレーンの変更」をご参照ください。
3 つのレーンが作成されると、システムはレーングループ内の各サービスに対して
DestinationRuleとVirtualServiceを生成します。左側のナビゲーションウィンドウで、 または を選択してこれらのリソースを表示します。たとえば、mockaサービスに対して次のDestinationRuleとVirtualServiceが自動的に作成されます。
-
-
3 つのレーンに対して Ingress トラフィックルールを作成します。
-
Traffic Lane ページで、Traffic Rule Definition セクションで対象のレーンを見つけ、Actions 列の Ingress traffic rules をクリックします。
-
Add drainage rule ダイアログボックスでパラメーターを設定し、OK をクリックします。
この例では、すべてのレーンサービスの Ingress API が
/mockであると仮定します。各レーンに同じ Ingress トラフィックルールを設定します。パラメーター
説明
Ingress service
[mocka.default.svc.cluster.local] を選択します。
Ingress traffic rules
3 つのルールの Name をそれぞれ r1、r2、r3 に設定します。realm name を * に設定します。
Matching request URI
Method を Exact に、Content を /mock に設定します。
3 つのレーンの Ingress トラフィックルールを作成した後、設定は次のようになります:レーン s1 (ベースライン、ラベル v1、サービス mocka、mockb、mockc を含む)、レーン s2 (ラベル v2、サービス mocka、mockc を含む)、レーン s3 (ラベル v3、サービス mockb を含む)。各 Ingress トラフィックルールには、対応するレーン名と完全に一致する
x-asm-prefer-tagのヘッダー一致条件も含まれます。ルールを作成すると、システムは各レーンに対して Ingress トラフィックルール (VirtualService) を自動的に生成します。たとえば、レーン s2 に対して次の VirtualService が生成されます。
-
ステップ 2:エンドツーエンドカナリア機能の検証
-
ASM イングレスゲートウェイのパブリック IP アドレスを取得します。詳細については、「ASM イングレスゲートウェイの IP アドレスの取得」をご参照ください。
-
次のコマンドを実行して環境変数を設定します。
xxx.xxx.xxx.xxxを前のステップで取得した IP アドレスに置き換えます。export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx -
エンドツーエンドカナリア機能が期待どおりに動作することを確認します。
-
次のコマンドを実行して、レーン s1 へのアクセスを確認します。
x-asm-prefer-tagヘッダーの値s1は、ステップ 1 のサブステップ 2 で設定したレーン s1 の名前に一致します。for i in {1..100}; do curl -H 'x-asm-prefer-tag: s1' -H'my-trace-id: x000'$i http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;期待される出力:
-> mocka(version: v1, ip: 172.17.0.54)-> mockb(version: v1, ip: 172.17.0.129)-> mockc(version: v1, ip: 172.17.0.130)出力は、リクエストヘッダー
x-asm-prefer-tag: s1を持つトラフィックが、期待どおりにレーン s1 のサービスにルーティングされることを示しています。 -
次のコマンドを実行して、レーン s2 へのアクセスを確認します。
x-asm-prefer-tagヘッダーの値s2は、ステップ 1 のサブステップ 2 で設定したレーン s2 の名前に一致します。for i in {1..100}; do curl -H 'x-asm-prefer-tag: s2' -H'my-trace-id: x000'$i http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;期待される出力:
-> mocka(version: v2, ip: 172.17.0.9)-> mockb(version: v1, ip: 172.17.0.129)-> mockc(version: v2, ip: 172.17.0.128)出力は、リクエストヘッダー
x-asm-prefer-tag: s2を持つトラフィックがレーン s2 のサービスにルーティングされることを示しています。レーン s2 に存在しないmockbサービスにトラフィックが送信されると、フォールバックメカニズムがリクエストをベースラインレーン s1 のmockbサービスにルーティングします。呼び出しチェーンがmockcサービスに続くと、トラフィックは正しくレーン s2 のmockcサービスにルーティングされます。これは期待どおりの動作です。 -
次のコマンドを実行して、レーン s3 へのアクセスを確認します。
x-asm-prefer-tagヘッダーの値s3は、ステップ 1 のサブステップ 2 で設定したレーン s3 の名前に一致します。for i in {1..100}; do curl -H 'x-asm-prefer-tag: s3' -H'my-trace-id: x000'$i http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;期待される出力:
mocka(version: v1, ip: 172.17.0.54)-> mockb(version: v3, ip: 192.168.1.120)-> mockc(version: v1, ip: 172.17.0.130)出力は、リクエストヘッダー
x-asm-prefer-tag: s3を持つトラフィックがレーン s3 のサービスにルーティングされることを示しています。レーン s3 に存在しないmockaおよびmockcサービスにトラフィックが送信されると、フォールバックメカニズムがリクエストをベースラインレーン s1 のmockaおよびmockcサービスにルーティングします。これは期待どおりの動作です。
-
許容モードでのベースラインレーンの変更
ベースラインレーンを変更する前に、許容モードで少なくとも 2 つのレーンを持つレーングループが必要です。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Traffic Lane ページで、対象のレーングループのタブをクリックし、Traffic Rule Definition セクションで Baseline Lane の横にある
アイコンをクリックします。 -
新しいベースラインレーンの名前を選択し、confirm edit をクリックします。