許容モードのトラフィックレーンを使用して、アプリケーションのバージョンを分離できます。このプロセスでは、バゲージヘッダー内のルーティングリクエストヘッダーを伝播させて、トラフィックを異なるレーンにルーティングします。トラフィックレーン内のサービスが相互に呼び出す際、ターゲットサービスが現在のレーンに存在しない場合、リクエストはベースラインレーンに転送されます。これにより、呼び出しチェーンの整合性が確保され、トラフィック管理が簡素化されます。
開始する前に、「許容モードのトラフィックレーンを使用してエンドツーエンドのトラフィックを管理する」およびその関連コンテンツを読んで理解してください。
シナリオの概要
この例では、3 つのサービス (mocka、mockb、mockc) と 3 つのトラフィックレーン (s1、s2、s3) を持つ呼び出しチェーンをシミュレートします。まず、OpenTelemetry の自動イベントトラッキングを使用して、サービスのバゲージヘッダー伝播を有効にします。次に、許容モードで 3 つのトラフィックレーンを作成し、重みベースのルーティングポリシーを使用してトラフィックを誘導します。
ステップ 1:サンプルサービスのデプロイ
-
デフォルトの名前空間でサイドカープロキシの自動インジェクションを有効にします。詳細については、「グローバル名前空間の管理」をご参照ください。
説明自動インジェクションの詳細については、「サイドカーインジェクションポリシーの設定」をご参照ください。
-
`mock.yaml` という名前のファイルを次の内容で作成します。
これらのアノテーションは、サービスが Java アプリケーションであることを宣言し、OpenTelemetry Operator に
defaultという名前のコンテナで自動計装を実行するように指示します。 -
次のコマンドを実行して、サンプルサービスをデプロイします。
kubectl apply -f mock.yamlOpenTelemetry 自動インスツルメンテーションを有効にすると、デプロイされたサービス Pod は、呼び出しチェーン全体でバゲージヘッダーを自動的に伝播できるようになります。
ステップ 2:レーングループとそのトラフィックレーンの作成
-
レーングループを作成します。
-
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 Baggage Headerを選択します。
Routing Request Header
x-asm-prefer-tag と入力します。
Swimlane Services
ターゲットの Kubernetes クラスターと default 名前空間を選択します。サービスリストで mocka、mockb、mockc を選択し、
アイコンをクリックしてサービスをselectedエリアに追加します。
-
-
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:3 つのトラフィックレーンにそれぞれ v1、v2、v3 と入力します。
Add Service
-
s1 レーン:mocka(default)、mockb(default)、mockc(default) を選択します。
-
s2 レーン:mocka(default) と mockc(default) を選択します。
-
s3 レーン:mockb(default) を選択します。
デフォルトでは、ASM はレーングループで最初に作成したトラフィックレーンをベースラインレーンとして設定します。ベースラインレーンを変更することもできます。他のトラフィックレーンに存在しないサービスにトラフィックが送信されると、フォールバックメカニズムがリクエストをベースラインレーンに転送します。ベースラインレーンの変更方法の詳細については、「許容モードでベースラインレーンを変更する」をご参照ください。
コンソールの左側のナビゲーションウィンドウで、Traffic Management Center > DestinationRule または VirtualService を選択して、ASM がレーングループ内の各サービスに対して自動的に生成する DestinationRule および VirtualService リソースを表示できます。たとえば、次の DestinationRule と VirtualService は、mocka サービスに対して自動的に作成されます。
-
-
統一された重みベースのルーティングルールを作成します。
-
トラフィックレーンページで、トラフィックルール定義セクションのルーティングポリシーセクションにある [重みベースのルーティング] をクリックします。
-
[統一ルーティングルールの設定] ダイアログボックスで、パラメーターを設定し、[OK] をクリックします。次の例は、レーンサービスのエントリ API が /mock であると仮定して、3 つのトラフィックレーンに統一ルーティングルールを設定する方法を示しています。
パラメーター
説明
realm name
これを * に設定します。
Matching request URI
MethodをPrefixに、Contentを / に設定します。
-
-
3 つのトラフィックレーンのルーティングの重みを設定します。重みは、各レーンに送信されるトラフィックの割合を決定します。
-
Traffic Lane ページの Traffic Rule Definition セクションで、各スイムレーンの Traffic Routing Weight 列にある数値の横の
アイコンをクリックします。Edit Traffic Routing Weight ダイアログボックスで、パラメーターを設定して OK をクリックします。パラメーター
説明
Ingress service
3 つのトラフィックレーンすべてで、これを mocka.default.svc.cluster.local に設定します。
Weight Value
-
s1 レーンには 60 と入力します。
-
s2 レーンには 20 と入力します。
-
s3 レーンには 20 と入力します。
-
-
ステップ 3:エンドツーエンドカナリアリリースの検証
-
ASM イングレスゲートウェイのパブリック IP アドレスを取得します。詳細については、「ASM イングレスゲートウェイの IP アドレスの取得」をご参照ください。
-
次のコマンドを実行して環境変数を設定します。`xxx.xxx.xxx.xxx` を前のステップで取得した IP アドレスに置き換えます。
export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx -
エンドツーエンドカナリアリリースを検証します。
-
次のコマンドを実行して、3 つのトラフィックレーン間のアクセス動作を観察します。
for i in {1..100}; do curl http://${ASM_GATEWAY_IP}/ ; echo ''; sleep 1; done;期待される出力:
# レーン s1 (ベースライン) へのトラフィック:すべてのサービスが v1 です。 -> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v1, ip: 192.168.0.190) # レーン s2 へのトラフィック:mocka と mockc は v2 で、mockb はベースラインレーンの v1 にフォールバックします。 -> mocka(version: v2, ip: 192.168.0.184)-> mockb(version: v1, ip: 192.168.0.1)-> mockc(version: v2, ip: 192.168.0.189) # レーン s3 へのトラフィック:mockb は v3 で、mocka と mockc はベースラインレーンの v1 にフォールバックします。 -> mocka(version: v1, ip: 192.168.0.193)-> mockb(version: v3, ip: 192.168.0.2)-> mockc(version: v1, ip: 192.168.0.190) # 出力は上記のパターンの混合を示し、s1:s2:s3 のディストリビューションは約 6:2:2 になります。出力は、トラフィックが s1、s2、s3 のトラフィックレーンに約 6:2:2 の比率で分散されていることを示しています。s1 はベースラインレーンとして機能します。呼び出しチェーン内のサービスがターゲットレーンに存在しない場合、リクエストはベースラインレーン (s1) の対応するサービスにフォールバックします。
-