すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:Istio リソースを使用してトラフィックをサービスの異なるバージョンにルーティングする

最終更新日:Jan 13, 2025

サービスメッシュ (ASM) を使用すると、指定された比率に基づいてトラフィックをサービスの異なるバージョンにルーティングできます。この機能は、カナリアリリースや A/B テストなど、多くのシナリオに適用できます。このトピックでは、Istio リソースを使用してトラフィックをサービスの異なるバージョンにルーティングする方法について説明します。

前提条件

手順 1:Istio ゲートウェイを作成する

Istio ゲートウェイは、サービスメッシュのエッジで機能するロードバランサーを定義し、インバウンドまたはアウトバウンドの HTTP/TCP トラフィックを受信します。次のセクションでは、Istio ゲートウェイを作成し、イングレスゲートウェイにバインドする方法について説明します。

  1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[ASM ゲートウェイ] > [ゲートウェイ] を選択します。表示されるページで、[作成] をクリックします。

  3. [作成] ページで、次のパラメーターを設定し、[作成] をクリックします。

    パラメーターの詳細については、「Gateway」をご参照ください。

    パラメーター

    説明

    基本情報

    [名前空間][default] に、[名前]bookinfo-gateway に設定します。

    ゲートウェイ Pod セレクター

    この例では、[キー]istio に、[値]ingressgateway に設定します。

    公開サービス

    [名前]http に、[ポート]80 に、[プロトコル][HTTP] に、[サービス]* に設定します。

    网关规则

    次の YAML コードは、上記の構成に対応する Istio ゲートウェイを示しています。

    展開して Istio ゲートウェイの YAML コードを表示する

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: bookinfo-gateway
      namespace: default
    spec:
      selector:
        istio: ingressgateway
      servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
            - '*'
    

手順 2:仮想サービスを作成する

仮想サービスは、トラフィックルーティングルールとリクエスト転送ポリシーを定義します。仮想サービスを作成した後、次のパスを使用して Bookinfo アプリケーションにアクセスできます: /productpage/static/login/logout、および /api/v1/products

  1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[トラフィック管理センター] > [virtualservice] を選択します。表示されるページで、[作成] をクリックします。

  3. [作成] ページで、次のパラメーターを設定し、[作成] をクリックします。

    パラメーターの詳細については、「Virtual Service」をご参照ください。

    パラメーター

    説明

    基本情報

    名前空間

    この例では、[default] が選択されています。

    名前

    仮想サービスの名前を指定します。

    ゲートウェイ

    1. [特定のゲートウェイに適用] スイッチをオンにし、[ゲートウェイの名前を選択] をクリックします。

    2. [ゲートウェイの名前を選択] ダイアログボックスで、[bookinfo-gateway] を選択し、添加 アイコンをクリックして、[OK] をクリックします。

    3. [すべてのサイドカーに適用] スイッチをオフにします。

    ホスト

    [virtualservice が属するゲートウェイドメイン名を選択] をクリックします。[virtualservice が属するゲートウェイドメイン名を選択] ダイアログボックスで、[*] を選択し、添加 アイコンをクリックして、[OK] をクリックします。

    HTTP ルート

    名前

    [HTTP ルート] タブをクリックし、[ルートを追加] をクリックして、[名前] フィールドにルート名を入力します。

    リクエスト一致ルール

    [リクエスト一致ルールを追加] を繰り返しクリックして、次の 5 つのルールを設定します。

    • [リクエスト URI の一致] をオンにし、[メソッド][完全一致] に、[コンテンツ]/productpage に設定します。

    • [リクエスト URI の一致] をオンにし、[メソッド][プレフィックス] に、[コンテンツ]/static に設定します。

    • [リクエスト URI の一致] をオンにし、[メソッド][完全一致] に、[コンテンツ]/login に設定します。

    • [リクエスト URI の一致] をオンにし、[メソッド][完全一致] に、[コンテンツ]/logout に設定します。

    • [リクエスト URI の一致] をオンにし、[メソッド][プレフィックス] に、[コンテンツ]/api/v1/products に設定します。

    ルートデスティネーション

    [ルートデスティネーションを追加] をクリックします。[ホスト]productpage に、[ポート]9080 に設定します。

    次の YAML コードは、上記の構成に対応する仮想サービスを示しています。

    展開して仮想サービスの YAML コードを表示する

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: vs-demo
      namespace: default
    spec:
      hosts:
        - '*'
      http:
        - name: gw-to-productage  // gw から productpage へ
          match:
            - uri:
                exact: /productpage
            - uri:
                prefix: /static
            - uri:
                exact: /login
            - uri:
                exact: /logout
            - uri:
                prefix: /api/v1/products
          route:
            - destination:
                host: productpage
                port:
                  number: 9080
      gateways:
        - bookinfo-gateway
    

手順 3:Bookinfo アプリケーションにアクセスする

  1. イングレスゲートウェイの IP アドレスを取得します。

    方法 1:ASM コンソールを使用する

    1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

    2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[ASM ゲートウェイ] > [イングレスゲートウェイ] を選択します。

    3. [イングレスゲートウェイ] ページで、[サービスアドレス] を取得します。

    方法 2:ACK コンソールを使用する

    1. ACK コンソール にログインします。左側のナビゲーションペインで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、[ネットワーク] > [サービス] を選択します。

    3. [サービス] ページで、istio-system[名前空間] ドロップダウンリストから 外部 IPistio-ingressgateway を選択します。 列で、 のポート 80 の IP アドレスを表示します。

  2. ブラウザーのアドレスバーに http://{イングレスゲートウェイの IP アドレス}/productpage と入力し、ページを 10 回更新して Bookinfo アプリケーションにアクセスします。

    Bookinfo アプリケーションは、レビューサービスの v1、v2、v3 バージョンにアクセスします。レビューサービスの 3 つのバージョンへのリクエストの比率が 1:1:1 に近いことがわかります。

    yuque_diagram

手順 4:サービスの異なるバージョンのルーティングルールを作成する

  1. デスティネーションルールを作成し、レビューサービスのインスタンスをバージョンごとにグループ化します。この例では、レビューサービスのインスタンスには、v1、v2、v3 のサブセットが含まれています。

    1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

    2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[トラフィック管理センター] > [destinationrule] を選択します。表示されるページで、[作成] をクリックします。

    3. [作成] ページで、次のパラメーターを設定し、[作成] をクリックします。

      パラメーターの詳細については、「Destination Rule」をご参照ください。

      パラメーター

      説明

      基本情報

      [名前空間][default] に設定し、デスティネーションルールの [名前] を指定し、[ホスト]reviews に設定します。

      サービスバージョン (サブセット)

      [サービスバージョン (サブセット)] タブをクリックします。次に、[サービスバージョン (サブセット) を追加] を繰り返しクリックして、次の 3 つのサブセットを設定します。

      • サブセット 1:[名前]v1 に設定します。[ラベルを追加] をクリックし、[キー]version に、[値]v1 に設定します。

      • サブセット 2:[名前]v2 に設定します。[ラベルを追加] をクリックし、[キー]version に、[値]v2 に設定します。

      • サブセット 3:[名前]v3 に設定します。[ラベルを追加] をクリックし、[キー]version に、[値]v3 に設定します。

      目标规则

      次の YAML コードは、上記の構成に対応するデスティネーションルールを示しています。

      展開してデスティネーションルールの YAML コードを表示する

      apiVersion: networking.istio.io/v1beta1
      kind: DestinationRule
      metadata:
        name: reviews
        namespace: default
        labels: {}
      spec:
        host: reviews
        subsets:
          - name: v1
            labels:
              version: v1
          - name: v2
            labels:
              version: v2
          - name: v3
            labels:
              version: v3
      
  2. トラフィックの 10% をレビューサービスの v1 バージョンに、40% を v2 バージョンに、50% を v3 バージョンにルーティングする仮想サービスを作成します。

    1. ASM コンソール にログインします。左側のナビゲーションペインで、[サービスメッシュ] > [メッシュ管理] を選択します。

    2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[トラフィック管理センター] > [virtualservice] を選択します。表示されるページで、[作成] をクリックします。

    3. [作成] ページで、次のパラメーターを設定し、[作成] をクリックします。

      パラメーター

      説明

      基本情報

      名前空間

      この例では、[default] を選択します。

      名前

      仮想サービスの名前を指定します。

      ゲートウェイ

      [すべてのサイドカーに適用] をオンにします。

      ホスト

      [ホストを追加] をクリックします。[ホストを追加] ダイアログボックスで、[名前空間][default] に設定します。[ホストを追加] セクションで、[reviews] を選択し、添加 アイコンをクリックして、[OK] をクリックします。

      HTTP ルート

      名前

      [HTTP ルート] タブをクリックします。[ルートを追加] をクリックして、[名前] フィールドにルート名を入力します。

      ルートデスティネーション

      [ルートデスティネーションを追加] を繰り返しクリックして、次の 3 つのルートデスティネーションを設定します。

      • [ホスト]reviews に、[サブセット] を v1 に、[重み] を 10 に設定します。

      • [ホスト]reviews に、[サブセット]v2 に、[重み]40 に設定します。

      • [ホスト]reviews に、[サブセット]v3 に、[重み]50 に設定します。

      虚拟服务2

      次の YAML コードは、上記の構成に対応する仮想ルールを示しています。

      展開して仮想サービスの YAML コードを表示する

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: reviews
        namespace: default
      spec:
        hosts:
          - reviews.default.svc.cluster.local
        http:
          - name: route  // ルート
            route:
              - destination:
                  host: reviews
                  subset: v1
                weight: 10
              - destination:
                  host: reviews
                  subset: v2
                weight: 40
              - destination:
                  host: reviews
                  subset: v3
                weight: 50

手順 5:トラフィックルーティング設定が有効になっているかどうかを確認する

ブラウザーのアドレスバーに http://{イングレスゲートウェイの IP アドレス}/productpage と入力します。ページを 10 回更新します。

レビューサービスの v1、v2、v3 バージョンにルーティングされたトラフィックが 1:4:5 に近い比率で表示される場合、トラフィックルーティング設定は有効になっています。