サービスメッシュ (ASM) を使用すると、指定された比率に基づいてトラフィックをサービスの異なるバージョンにルーティングできます。この機能は、カナリアリリースや A/B テストなど、多くのシナリオに適用できます。このトピックでは、Istio リソースを使用してトラフィックをサービスの異なるバージョンにルーティングする方法について説明します。
前提条件
Bookinfo アプリケーションが ASM インスタンスにデプロイされていること。詳細については、「ASM インスタンスに追加された ACK クラスターにアプリケーションをデプロイする」をご参照ください。
手順 1:Istio ゲートウェイを作成する
Istio ゲートウェイは、サービスメッシュのエッジで機能するロードバランサーを定義し、インバウンドまたはアウトバウンドの HTTP/TCP トラフィックを受信します。次のセクションでは、Istio ゲートウェイを作成し、イングレスゲートウェイにバインドする方法について説明します。
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。表示されるページで、[作成] をクリックします。
[作成] ページで、次のパラメーターを設定し、[作成] をクリックします。
パラメーターの詳細については、「Gateway」をご参照ください。
パラメーター
説明
基本情報
[名前空間] を [default] に、[名前] を bookinfo-gateway に設定します。
ゲートウェイ Pod セレクター
この例では、[キー] を istio に、[値] を ingressgateway に設定します。
公開サービス
[名前] を http に、[ポート] を 80 に、[プロトコル] を [HTTP] に、[サービス] を * に設定します。
次の YAML コードは、上記の構成に対応する Istio ゲートウェイを示しています。
手順 2:仮想サービスを作成する
仮想サービスは、トラフィックルーティングルールとリクエスト転送ポリシーを定義します。仮想サービスを作成した後、次のパスを使用して Bookinfo アプリケーションにアクセスできます: /productpage、/static、/login、/logout、および /api/v1/products。
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。表示されるページで、[作成] をクリックします。
[作成] ページで、次のパラメーターを設定し、[作成] をクリックします。
パラメーターの詳細については、「Virtual Service」をご参照ください。
パラメーター
説明
基本情報
名前空間
この例では、[default] が選択されています。
名前
仮想サービスの名前を指定します。
ゲートウェイ
[特定のゲートウェイに適用] スイッチをオンにし、[ゲートウェイの名前を選択] をクリックします。
[ゲートウェイの名前を選択] ダイアログボックスで、[bookinfo-gateway] を選択し、
アイコンをクリックして、[OK] をクリックします。
[すべてのサイドカーに適用] スイッチをオフにします。
ホスト
[virtualservice が属するゲートウェイドメイン名を選択] をクリックします。[virtualservice が属するゲートウェイドメイン名を選択] ダイアログボックスで、[*] を選択し、
アイコンをクリックして、[OK] をクリックします。
HTTP ルート
名前
[HTTP ルート] タブをクリックし、[ルートを追加] をクリックして、[名前] フィールドにルート名を入力します。
リクエスト一致ルール
[リクエスト一致ルールを追加] を繰り返しクリックして、次の 5 つのルールを設定します。
[リクエスト URI の一致] をオンにし、[メソッド] を [完全一致] に、[コンテンツ] を /productpage に設定します。
[リクエスト URI の一致] をオンにし、[メソッド] を [プレフィックス] に、[コンテンツ] を /static に設定します。
[リクエスト URI の一致] をオンにし、[メソッド] を [完全一致] に、[コンテンツ] を /login に設定します。
[リクエスト URI の一致] をオンにし、[メソッド] を [完全一致] に、[コンテンツ] を /logout に設定します。
[リクエスト URI の一致] をオンにし、[メソッド] を [プレフィックス] に、[コンテンツ] を /api/v1/products に設定します。
ルートデスティネーション
[ルートデスティネーションを追加] をクリックします。[ホスト] を productpage に、[ポート] を 9080 に設定します。
次の YAML コードは、上記の構成に対応する仮想サービスを示しています。
手順 3:Bookinfo アプリケーションにアクセスする
イングレスゲートウェイの IP アドレスを取得します。
方法 1:ASM コンソールを使用する
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[イングレスゲートウェイ] ページで、[サービスアドレス] を取得します。
方法 2:ACK コンソールを使用する
ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、 を選択します。
[サービス] ページで、istio-system[名前空間] ドロップダウンリストから 外部 IPistio-ingressgateway を選択します。 列で、 のポート 80 の IP アドレスを表示します。
ブラウザーのアドレスバーに http://{イングレスゲートウェイの IP アドレス}/productpage と入力し、ページを 10 回更新して Bookinfo アプリケーションにアクセスします。
Bookinfo アプリケーションは、レビューサービスの v1、v2、v3 バージョンにアクセスします。レビューサービスの 3 つのバージョンへのリクエストの比率が 1:1:1 に近いことがわかります。
手順 4:サービスの異なるバージョンのルーティングルールを作成する
デスティネーションルールを作成し、レビューサービスのインスタンスをバージョンごとにグループ化します。この例では、レビューサービスのインスタンスには、v1、v2、v3 のサブセットが含まれています。
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。表示されるページで、[作成] をクリックします。
[作成] ページで、次のパラメーターを設定し、[作成] をクリックします。
パラメーターの詳細については、「Destination Rule」をご参照ください。
パラメーター
説明
基本情報
[名前空間] を [default] に設定し、デスティネーションルールの [名前] を指定し、[ホスト] を reviews に設定します。
サービスバージョン (サブセット)
[サービスバージョン (サブセット)] タブをクリックします。次に、[サービスバージョン (サブセット) を追加] を繰り返しクリックして、次の 3 つのサブセットを設定します。
サブセット 1:[名前] を v1 に設定します。[ラベルを追加] をクリックし、[キー] を version に、[値] を v1 に設定します。
サブセット 2:[名前] を v2 に設定します。[ラベルを追加] をクリックし、[キー] を version に、[値] を v2 に設定します。
サブセット 3:[名前] を v3 に設定します。[ラベルを追加] をクリックし、[キー] を version に、[値] を v3 に設定します。
次の YAML コードは、上記の構成に対応するデスティネーションルールを示しています。
トラフィックの 10% をレビューサービスの v1 バージョンに、40% を v2 バージョンに、50% を v3 バージョンにルーティングする仮想サービスを作成します。
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。表示されるページで、[作成] をクリックします。
[作成] ページで、次のパラメーターを設定し、[作成] をクリックします。
パラメーター
説明
基本情報
名前空間
この例では、[default] を選択します。
名前
仮想サービスの名前を指定します。
ゲートウェイ
[すべてのサイドカーに適用] をオンにします。
ホスト
[ホストを追加] をクリックします。[ホストを追加] ダイアログボックスで、[名前空間] を [default] に設定します。[ホストを追加] セクションで、[reviews] を選択し、
アイコンをクリックして、[OK] をクリックします。
HTTP ルート
名前
[HTTP ルート] タブをクリックします。[ルートを追加] をクリックして、[名前] フィールドにルート名を入力します。
ルートデスティネーション
[ルートデスティネーションを追加] を繰り返しクリックして、次の 3 つのルートデスティネーションを設定します。
[ホスト] を reviews に、[サブセット] を v1 に、[重み] を 10 に設定します。
[ホスト] を reviews に、[サブセット] を v2 に、[重み] を 40 に設定します。
[ホスト] を reviews に、[サブセット] を v3 に、[重み] を 50 に設定します。
次の YAML コードは、上記の構成に対応する仮想ルールを示しています。
手順 5:トラフィックルーティング設定が有効になっているかどうかを確認する
ブラウザーのアドレスバーに http://{イングレスゲートウェイの IP アドレス}/productpage と入力します。ページを 10 回更新します。
レビューサービスの v1、v2、v3 バージョンにルーティングされたトラフィックが 1:4:5 に近い比率で表示される場合、トラフィックルーティング設定は有効になっています。