パーミッシブモード の トラフィックレーン を使用して、アプリケーションの バージョン分離 を実現できます。E2E パススルーリクエストヘッダー を リクエストルーティングヘッダー として指定することで、ヘッダーの値を使用してトラフィックを スイムレーン にルーティングできます。スイムレーン 内のサービスが相互に呼び出しを行う際、現在の スイムレーン に宛先サービスが存在しない場合、リクエストは ベースラインレーン に転送されます。これにより、呼び出しチェーン の整合性が確保され、トラフィック管理が簡素化されます。
開始する前に、「パーミッシブモードのトラフィックレーンを使用したエンドツーエンドのトラフィック管理」とその関連コンテンツを読み、理解していることを確認してください。
シナリオの概要
この例では、mocka、mockb、mockc の 3 つのサービスを使用して、サービス 呼び出しチェーン の 3 つのバージョンを表す 3 つの スイムレーン (s1、s2、s3) を作成します。s1 スイムレーン は ベースラインレーン であり、3 つすべてのサービスが含まれます。s2 スイムレーン には mocka と mockc サービスのみが含まれます。s3 スイムレーン には mockb サービスのみが含まれます。このシナリオでは、E2E パススルーリクエストヘッダー と リクエストルーティングヘッダー の両方が my-trace-id に設定されます。
ステップ 1:スイムレーングループとスイムレーンの作成
-
スイムレーングループを作成します。
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
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 Custom Header]を選択します。
[E2E Pass-through Request Header]
これを
my-trace-idに設定します。[Swimlane service]
対象の Kubernetes クラスターと default
namespaceを選択します。サービスリストで mocka、mockb、mockc を選択します。
アイコンをクリックして、[selected] エリアに移動します。
-
s1、s2、s3スイムレーンを作成し、それぞれv1、v2、v3バージョンにバインドします。-
Traffic Rule Definition ページの Traffic Lane セクションで、Create swimlanes をクリックします。
-
Create swimlanes ダイアログボックスで、パラメーターを設定し、OK をクリックします。
パラメーター
説明
[Swimlane Name]
3 つの
スイムレーンの名前を、それぞれ s1、s2、s3 に設定します。[Configure Service Tag]
[Label Key]: ASM_TRAFFIC_TAG に設定します。
[Label Value]:
s1、s2、s3スイムレーンに対して、それぞれ v1、v2、v3 に設定します。[Add Service]
s1スイムレーンの場合: mocka(default)、mockb(default)、mockc(default) を選択します。s2スイムレーンの場合: mocka(default) と mockc(default) を選択します。s3スイムレーンの場合: mockb(default) を選択します。3 つの
スイムレーンが作成されると、結果が表示されます。デフォルトでは、グループ内で最初に作成したスイムレーンがベースラインレーンになります。ベースラインレーンは変更できます。他のスイムレーンに存在しないサービスにトラフィックが送信されると、フォールバックメカニズムによってリクエストがベースラインレーンに転送されます。ベースラインレーンの変更方法の詳細については、「ベースラインレーンの変更」をご参照ください。[トラフィックルール定義] ページで、ベースラインレーンは s1 に設定され、Ingress タイプは ASM ゲートウェイ (ingressgateway) に設定されます。3 つの
スイムレーンを作成すると、Alibaba Cloud Service Mesh はスイムレーングループ内の各サービスに対してDestinationRuleとVirtualServiceを自動的に生成します。これらを表示するには、左側メニューで または [Virtual Service] を選択します。たとえば、ASM はmockaサービスに対して次のDestinationRuleとVirtualServiceを自動的に作成します。
-
-
3 つの
スイムレーンのトラフィックルーティングルールを作成します。-
Traffic Rule Definition ページの Traffic Lane セクションで、対象の
スイムレーンを見つけ、Actions 列の Ingress traffic rules をクリックします。 -
Add drainage rule ダイアログボックスで、パラメーターを設定し、OK をクリックします。
この例では、すべての
スイムレーンサービスの Ingress API が/mockであると仮定します。したがって、各スイムレーンに同じトラフィックルーティングルールを設定します。パラメーター
説明
[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 つの
スイムレーンのトラフィックルーティングルールを作成すると、結果が表示されます。URI の完全一致に加えて、各ルールには ヘッダーの一致条件が含まれます。ヘッダー名はmy-trace-id、一致タイプは完全一致で、s1、s2、s3スイムレーンの一致値はそれぞれs1、s2、s3です。ベースラインレーンは s1 に設定されます。ルールを作成すると、ASM は各
スイムレーンのトラフィックルーティングルールを定義するVirtualServiceを自動的に生成します。たとえば、ASM はs2スイムレーンに対して次のVirtualServiceを生成します。
-
ステップ 2:E2E カナリアリリースの検証
-
ASM
ingress gatewayのパブリック IP アドレスを取得します。詳細については、「Ingress Gateway の IP アドレスの取得」をご参照ください。 -
次のコマンドを実行して、環境変数を設定します。
コマンドの
xxx.xxx.xxx.xxxは、前の手順で取得した IP アドレスです。export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx -
E2E カナリアリリースを検証します。-
次のコマンドを実行して、
s1スイムレーンへのアクセスをテストします。my-trace-idの値s1は、ステップ 1.2 で設定した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スイムレーンの名前です。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サービスに転送されます。その後のmockcサービスへのリクエストは、正しくs2スイムレーン内のmockcサービスにルーティングされます。 -
次のコマンドを実行して、
s3スイムレーンへのアクセスをテストします。my-trace-idの値s3は、ステップ 1.2 で設定した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サービスに転送されます。
-