許可モードのトラフィックレーンを使用すると、アプリケーションバージョンを分離できます。 トラフィックは、リクエストルーティングヘッダーとエンドツーエンド(E2E)パススルーリクエストヘッダーに基づいて、異なるレーンにルーティングされます。 レーン内のサービスが相互に呼び出しを行うとき、呼び出されるサービスがレーンに存在しない場合、リクエストはベースラインレーン内の同じサービスに転送されます。 この機能は、呼び出しチェーンの整合性を確保し、トラフィック管理を簡素化します。 このトピックでは、リクエストルーティングヘッダーが E2E パススルーリクエストヘッダーと異なるシナリオで、許可モードのトラフィックレーンを使用する方法について説明します。
開始する前に、「許可モードのトラフィックレーンを使用してエンドツーエンドトラフィックを管理する」のトピックと関連コンテンツを読み、理解していることを確認してください。
シナリオの説明
この例では、3 つのレーン(s1、s2、s3)が作成され、mocka、mockb、mockc サービスの 3 つのバージョンを表しています。 s1 はベースラインレーンで、v1 の 3 つのサービスすべてが含まれています。 s2 には、v2 の mocka サービスと mockc サービスのみが含まれています。 s3 には、v3 の mockb サービスのみが含まれています。
手順 1:レーングループと対応するレーンを作成する
レーングループを作成します。
ASM コンソールにログインします。 左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションペインで、 を選択します。
[トラフィックレーン] ページで、[スイムレーングループの作成] をクリックします。 [スイムレーングループの作成] パネルで、パラメーターを設定し、[OK] をクリックします。
パラメーター
説明
スイムレーングループの名前
この例では、「test」と入力します。
イングレスゲートウェイの Istio ゲートウェイ
[ingressgateway] を選択します。
レーンモード
[許可モード] を選択します。
トレースコンテキストのパススルーモード
[トレース ID のパススルー] を選択します。
トレース ID リクエストヘッダー
my-trace-id と入力します。 これは、この例のサンプルサービスが、トレース内のリクエストヘッダー my-trace-id を透過的に送信するためです。
ルーティングリクエストヘッダー
ビジネス要件に基づいてこのパラメーターを指定できます。 ASM ゲートウェイは、リクエストルーティングヘッダーの内容に基づいてトラフィックをレーンにルーティングし、レーンのコンテキストを保持します。 この例では、「x-asm-prefer-tag」と入力します。
スイムレーンサービス
[Kubernetes クラスタ] ドロップダウンリストから、サンプルサービスをデプロイした ACK クラスタを選択し、[名前空間] ドロップダウンリストから [default] を選択します。 その後、サービスリストで [mocka]、[mockb]、[mockc] を選択し、
アイコンをクリックして、サービスを [選択済み] セクションに追加します。レーングループが作成されると、レーングループのトラフィックラベルが自動的に生成されます。 左側のナビゲーションペインで [トラフィック管理センター] > [trafficlabel] を選択して、トラフィックラベルを表示できます。 たとえば、mocka サービスには次のトラフィックラベルが自動的に生成されます。
s1、s2、s3 レーンを作成し、s1 レーンをサンプルサービスの v1 バージョンに、s2 レーンをサンプルサービスの v2 バージョンに、s3 レーンをサンプルサービスの v3 バージョンにバインドします。
[トラフィックルールの定義] セクションの [トラフィックレーン] ページで、[スイムレーンの作成] をクリックします。
[スイムレーンの作成] ダイアログボックスで、パラメーターを設定し、[OK] をクリックします。
パラメーター
説明
スイムレーン名
3 つのレーンにそれぞれ s1、s2、s3 という名前を付けます。
サービスタグの設定
[ラベルキー]: ASM_TRAFFIC_TAG を選択します。
[ラベル値]: s1 レーンには v1、s2 レーンには v2、s3 レーンには v3 を選択します。
サービスの追加
s1 レーンでは、mocka(default)、mockb(default)、および mockc(default) を選択します。
s2 レーンでは、mocka(デフォルト)mockc(既定) と を選択します。
s3 レーンでは、mockb(既定)。 を選択します。
次の図は、s1 レーンの構成を示しています。

3 つのレーンが作成されると、次の図に示すように、[トラフィックルールの定義] セクションでそれらを表示できます。
説明デフォルトでは、レーングループで最初に作成したレーンがベースラインレーンとして設定されます。 トラフィックが他のレーンに存在しないサービス宛ての場合、リクエストはフォールバックメカニズムに従ってベースラインレーンに転送されます。 ベースラインレーンの変更方法の詳細については、「許可モードでベースラインレーンを変更する」をご参照ください。
レーン内の各サービスに対して、デスティネーションルールと仮想サービスが自動的に生成されます。 左側のナビゲーションペインで または [virtualservice] を選択して、デスティネーションルールまたは仮想サービスを表示できます。 たとえば、mocka サービスには次のデスティネーションルールと仮想サービスが自動的に作成されます。
各レーンにトラフィックルーティングルールを作成します。
[トラフィックルールの定義] セクションの [トラフィックレーン] ページで、トラフィックルーティングルールを作成するレーンを見つけ、イングレス トラフィック ルール[アクション] 列の をクリックします。
[ドレナージルールの追加] ダイアログボックスで、パラメーターを設定し、[OK] をクリックします。
この例では、レーン内のすべてのサービスの受信リクエストパスが
/mockであると想定し、各レーンに同じトラフィックルーティングルールが構成されています。パラメーター
説明
イングレスサービス
この例では、[mocka.default.svc.cluster.local] を選択します。
イングレストラフィックルール
この例では、3 つのレーンに対して、[名前] パラメーターをそれぞれ r1、r2、r3 に設定します。 [レルム名] パラメーターを [*] に設定します。
一致するリクエスト URI
この例では、[メソッド] パラメーターを [完全一致] に、[コンテンツ] パラメーターを /mock に設定します。
次の図は、s1 レーンのトラフィックルーティングルールの構成を示しています。

トラフィックルーティングルールが作成されると、次の図に示すように、[トラフィックルールの定義] セクションでそれらを表示できます。

トラフィックルーティングルールが作成されると、レーンに仮想サービスが自動的に生成されます。 たとえば、s2 レーンには次の仮想サービスが生成されます。
手順 2:エンドツーエンドカナリアリリース機能が有効になっていることを確認する
イングレスゲートウェイのパブリック IP アドレスを取得します。 詳細については、「手順 2:ASM イングレスゲートウェイの IP アドレスを取得する」をご参照ください。
次のコマンドを実行して、環境変数を構成します。
xxx.xxx.xxx.xxxは、サブステップ 1 で取得した IP アドレスです。export ASM_GATEWAY_IP=xxx.xxx.xxx.xxxエンドツーエンドカナリアリリース機能が有効になっていることを確認します。
次のコマンドを実行して、s1 レーンのサービスにアクセスします。
コマンドでは、
x-asm-prefer-tagの値はs1です。これは、手順 1 の サブステップ 2 で s1 レーンを作成したときに構成した 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)出力は、HTTP ヘッダー
x-asm-prefer-tag: s1で指定されたトラフィックが、s1 レーンの関連サービスに流れていることを示しています。 これは期待どおりです。次のコマンドを実行して、s2 レーンのサービスにアクセスします。
コマンドでは、
x-asm-prefer-tagの値はs2です。これは、手順 1 の サブステップ 2 で s2 レーンを作成したときに構成した 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)出力は、HTTP ヘッダー
x-asm-prefer-tag: s2で指定されたトラフィックが、s2 レーンの関連サービスに流れていることを示しています。 これは期待どおりです。 トラフィックが s2 レーンに存在しない mockb サービス宛ての場合、トラフィックはフォールバックメカニズムに従って s1 ベースラインレーンの mockb サービスに転送されます。 その後、トラフィックは期待どおりに s2 レーンの mockc サービスに送信されます。次のコマンドを実行して、s3 レーンのサービスにアクセスします。
コマンドでは、
x-asm-prefer-tagの値はs3です。これは、手順 1 の サブステップ 2 で s3 レーンを作成したときに構成した 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: 192.168.1.103)-> mockb(version: v3, ip: 192.168.1.120)-> mockc(version: v1, ip: 192.168.1.105)出力は、HTTP ヘッダー
my-request-id: s3で指定されたトラフィックが、s3 レーンの関連サービスに流れていることを示しています。 これは期待どおりです。 トラフィックが s3 レーンに存在しない mocka サービスと mockc サービス宛ての場合、トラフィックはフォールバックメカニズムに従って s1 ベースラインレーンの mocka サービスと mockc サービスに転送されます。
許可モードでベースラインレーンを変更する
ベースラインレーンは、少なくとも 2 つのレーンを含む許可モードレーングループでのみ変更できます。
ASM コンソールにログインします。 左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションペインで、 を選択します。
[トラフィックレーン] ページで、ベースラインレーンを変更するレーングループのタブをクリックします。 [トラフィックルールの定義] セクションで、
[ベースラインレーン] の横にある アイコンをクリックします。変更するベースラインレーンの名前を選択し、[編集の確認] をクリックします。