許可モードのトラフィックレーンを使用すると、アプリケーションバージョンを分離できます。トラフィックは、リクエストルーティングヘッダーとエンドツーエンド(E2E)パススルーリクエストヘッダーに基づいて、異なるレーンにルーティングされます。レーン内のサービスが相互に呼び出しを行う際に、呼び出し先のサービスがレーン内に存在しない場合、リクエストはベースラインレーン内の同じサービスに転送されます。この機能により、呼び出しチェーンの整合性が確保され、トラフィック管理が簡素化されます。このトピックでは、リクエストルーティングヘッダーがE2Eパススルーリクエストヘッダーと同じであるシナリオで、許可モードのトラフィックレーンを使用する方法について説明します。
開始する前に、許可モードのトラフィックレーンを使用してエンドツーエンドトラフィックを管理する のトピックと関連コンテンツを読み、理解していることを確認してください。
シナリオの説明
この例では、3つのレーン(s1、s2、s3)が作成され、mocka、mockb、mockcサービスの3つのバージョンを表しています。 s1はベースラインレーンで、v1の3つのサービスすべてが含まれています。 s2には、v2のmockaサービスとmockcサービスのみが含まれています。 s3には、v3のmockbサービスのみが含まれています。この例では、E2Eパススルーリクエストヘッダーとリクエストルーティングヘッダーの両方が my-trace-id として指定されています。
手順 1: レーングループと対応するレーンを作成する
レーン グループを作成します。
ASMコンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASMインスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[トラフィックレーン] ページで、[スイムレーングループの作成] をクリックします。[スイムレーングループの作成] パネルで、パラメーターを設定し、[OK] をクリックします。
パラメーター
説明
スイムレーングループの名前
この例では、test と入力します。
入口ゲートウェイ
[ingressgateway] を選択します。
レーンモード
[許可モード] を選択します。
トレースコンテキストのパススルーモード
[カスタムヘッダーのパススルー] を選択します。
E2Eパススルーリクエストヘッダー
my-trace-id と入力します。
レーンサービス
[Kubernetes クラスタ] ドロップダウンリストから目的のACKクラスタを選択し、[名前空間] ドロップダウンリストから [default] を選択します。次に、サービスリストで [mocka]、[mockb]、[mockc] を選択し、
アイコンをクリックして、サービスを [選択済み] セクションに追加します。
s1、s2、s3レーンを作成し、s1レーンをサンプルサービスのバージョン 1(v1)に、s2レーンをサンプルサービスのバージョン 2(v2)に、s3レーンをサンプルサービスのバージョン 3(v3)にバインドします。
[トラフィックルールの定義] セクションの [トラフィックレーン] ページで、[スイムレーンの作成] をクリックします。
[スイムレーンの作成] ダイアログボックスで、パラメーターを設定し、[OK] をクリックします。
パラメーター
説明
スイムレーン名
3つのレーンにそれぞれ s1、s2、s3 という名前を付けます。
サービスタグの設定
ラベルキー: ASM_TRAFFIC_TAG を選択します。
ラベル値: s1レーンには v1、s2レーンには v2、s3レーンには v3 を選択します。
サービスの追加
s1レーンでは、mocka(default)、mockb(default)、mockc(default) を選択します。
s2レーンでは、mocka(default) と mockc(default) を選択します。
s3レーンでは、mockb(default) を選択します。
次の図は、s1レーンの構成を示しています。
3つのレーンが作成されると、次の図に示すように、[トラフィックルールの定義] セクションでそれらを表示できます。デフォルトでは、レーングループで最初に作成したレーンがベースラインレーンとして設定されます。ただし、ベースラインレーンを変更できます。トラフィックが他のレーンに存在しないサービス宛ての場合、リクエストはフォールバックメカニズムに従ってベースラインレーンに転送されます。ベースラインレーンの変更方法の詳細については、「許可モードでベースラインレーンを変更する」をご参照ください。
レーン内の各サービスに対して、デスティネーションルールと仮想サービスが自動的に生成されます。左側のナビゲーションペインで
または [virtualservice] を選択して、デスティネーションルールまたは仮想サービスを表示できます。たとえば、mockaサービスに対して次のデスティネーションルールと仮想サービスが自動的に作成されます。
各レーンにトラフィックルーティングルールを作成します。
[トラフィックルールの定義] セクションの [トラフィックレーン] ページで、トラフィックルーティングルールを作成するレーンを見つけ、イングレス トラフィック ルール[アクション] 列の をクリックします。
[ドレナージュルールの追加] ダイアログボックスで、パラメーターを設定し、[OK] をクリックします。
この例では、レーン内のすべてのサービスの受信リクエストパスが
/mock
であり、各レーンに同じトラフィックルーティングルールが設定されていることを前提としています。パラメーター
説明
イングレスサービス
この例では、[mocka.default.svc.cluster.local] を選択します。
イングレストラフィックルール
この例では、3つのレーンに対して、[名前] パラメーターをそれぞれ r1、r2、r3 に設定します。[レルム名] パラメーターを [*] に設定します。
一致するリクエスト URI
この例では、[メソッド] パラメーターを [完全一致] に、[コンテンツ] パラメーターを /mock に設定します。
次の図は、s1レーンのトラフィックルーティングルールの構成を示しています。
トラフィックルーティングルールが作成されると、次の図に示すように、[トラフィックルールの定義] セクションでそれらを表示できます。
トラフィックルーティングルールが作成されると、レーンに対して仮想サービスが自動的に生成されます。たとえば、s2レーンに対して次の仮想サービスが生成されます。
手順 2: E2Eカナリアリリース機能が有効になっていることを確認する
ASMイングレスゲートウェイのパブリックIPアドレスを取得します。詳細については、「手順 2: ASMイングレスゲートウェイのIPアドレスを取得する」の手順 2 をご参照ください。
次のコマンドを実行して、環境変数を設定します。
xxx.xxx.xxx.xxx
は、サブステップ 1 で取得したIPアドレスです。export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx
E2Eカナリアリリース機能が有効になっていることを確認します。
次のコマンドを実行して、s1レーン内のサービスにアクセスします。
コマンドでは、
my-trace-id
の値はs1
です。これは、手順 1 の サブステップ 2 でs1レーンを作成したときに設定したs1レーンの名前です。for i in {1..100}; do curl -H'my-trace-id: s1' 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ヘッダー
my-trace-id: s1
で指定されたトラフィックが、s1レーン内の関連サービスに流れていることを示しています。これは期待どおりです。次のコマンドを実行して、s2レーン内のサービスにアクセスします。
コマンドでは、
my-trace-id
の値はs2
です。これは、手順 1 の サブステップ 2 でs2レーンを作成したときに設定したs2レーンの名前です。for i in {1..100}; do curl -H'my-trace-id: s2' http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;
予期される出力:
mocka(version: v2, ip: 192.168.1.101)-> mockb(version: v1, ip: 192.168.1.100)-> mockc(version: v2, ip: 192.168.1.116)
出力は、HTTPヘッダー
my-trace-id: s2
で指定されたトラフィックが、s2レーン内の関連サービスに流れていることを示しています。これは期待どおりです。トラフィックがs2レーンに存在しない mockb サービス宛ての場合、トラフィックはフォールバックメカニズムに従ってs1ベースラインレーン内の mockb サービスに転送されます。その後、トラフィックは期待どおりにs2レーン内の mockc サービスに送信されます。次のコマンドを実行して、s3レーン内のサービスにアクセスします。
コマンドでは、
my-trace-id
の値はs3
です。これは、手順 1 の サブステップ 2 でs3レーンを作成したときに設定したs3レーンの名前です。for i in {1..100}; do curl -H'my-trace-id: s3' 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-trace-id: s3
で指定されたトラフィックが、s3レーン内の関連サービスに流れていることを示しています。これは期待どおりです。トラフィックがs3レーンに存在しない mocka サービスと mockc サービス宛ての場合、トラフィックはフォールバックメカニズムに従ってs1ベースラインレーン内の mocka サービスと mockc サービスに転送されます。