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

Alibaba Cloud Service Mesh:ASM インスタンスでデリゲートを使用して仮想サービスを構成する

最終更新日:Jan 13, 2025

複数のマイクロサービスまたはルーティングルールを含むサービスのルーティングルールを定義するために仮想サービスを使用すると、仮想サービスが複雑になり、多くのメンテナンス作業が必要になります。ルーティングルールの変更によるリスクを軽減するために、Service Mesh(ASM)は、よりきめ細かい方法でルーティングルールを管理するためのデリゲートを導入しています。このトピックでは、複数の仮想サービスを使用してサービスのルーティングルールを定義する方法を示します。次の例では、Bookinfo アプリケーションを使用します。

前提条件

背景情報

Service Mesh では、仮想サービスを使用して、サービスにルーティングされるトラフィックを制御するためのルーティングルールを定義します。実際のシナリオでは、複雑な仮想サービスを維持する必要がある場合があります。仮想サービスによって定義されているルーティングルールを変更するたびに、仮想サービスを変更する必要があります。ルーティングルールが変更された後、ルーティングルールが互いに競合したり、特定のルーティングルールが冗長になったり、ルーティングルールが互いに結合されたりする可能性があります。ルーティングルールの構成エラーは、データプレーン上のクラスタにデプロイされているサービスに影響を与えたり、すべてのサービスにアクセスできなくしたりする可能性があります。

ASM は、仮想サービスの構成を拡張するためのデリゲートを導入しており、サービスに対して定義されているルーティングルールを分離できます。仮想サービスをプライマリ仮想サービスと複数のセカンダリ仮想サービスに分割できます。プライマリ仮想サービスは、サービスの全体的なルーティングルールを定義します。各セカンダリ仮想サービスは、サービスの詳細なルーティングルールを定義します。プライマリ仮想サービスは管理者によって管理され、セカンダリ仮想サービスはサービス管理者によって管理されます。これにより、ルーティングルールの変更によってもたらされるリスクが大幅に軽減され、独立したサービスのデプロイと更新の効率が向上します。

注意事項

  • delegate に関連するパラメータは、プライマリ仮想サービスでのみ設定できます。プライマリ仮想サービスとセカンダリ仮想サービスの両方で delegate に関連するパラメータを設定すると、プライマリ仮想サービスとセカンダリ仮想サービスは有効になりません。

  • セカンダリ仮想サービスの HTTPMatchRequest 構成は、プライマリ仮想サービスの HTTPMatchRequest 構成のサブセットである必要があります。そうでない場合、競合が発生し、HTTPRoute 構成は有効になりません。

  • delegate に関連するパラメータは、プライマリ仮想サービスの route フィールドと redirect フィールドが空のままになっている場合にのみ指定できます。セカンダリ仮想サービスの hosts フィールドは空のままにする必要があります。セカンダリ仮想サービスによって定義されたルーティングルールは、プライマリ仮想サービスによって定義されたルーティングルールと組み合わされます。

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

  1. ASM コンソール にログインします。

  2. 左側のナビゲーションペインで、[service Mesh] > [メッシュ管理] を選択します。

  3. [メッシュ管理] ページで、構成する ASM インスタンスを見つけます。[管理] 列の ASM インスタンス名をクリックするか、[アクション] をクリックします。

  4. ASM インスタンスの詳細ページで、左側のナビゲーションペインの [ASM ゲートウェイ] > [ゲートウェイ] を選択します。表示されるページで、[YAML から作成] をクリックします。

  5. [名前空間] ドロップダウンリストから名前空間を選択し、次のコンテンツをコードエディターにコピーして、[作成] をクリックします。この例では、デフォルトの名前空間を使用します。

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: bookinfo-gateway
    spec:
      selector:
        istio: ingressgateway # use istio default controller
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"

    number パラメータを 80 に設定します。この設定は、Bookinfo アプリケーションがポート 80 を使用してインバウンドまたはアウトバウンドの HTTP 接続を確立できることを指定します。

手順 2:プライマリ仮想サービスを構成する

  1. ASM コンソール にログインします。

  2. 左側のナビゲーションペインで、[service Mesh] > [メッシュ管理] を選択します。

  3. [メッシュ管理] ページで、構成する ASM インスタンスを見つけます。[管理] 列で、ASM インスタンスの名前をクリックするか、[アクション] をクリックします。

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

  5. [名前空間] ドロップダウンリストから名前空間を選択し、次のコンテンツをコードエディターにコピーして、[作成] をクリックします。この例では、デフォルトの名前空間を使用します。

    次のコンテンツを使用して、vs-1 という名前の delegate と vs-2 という名前のデリゲートを作成できます。vs-1 デリゲートは、/log を含むリクエスト URL のみを使用して Bookinfo アプリケーションにアクセスできることを指定します。vs-2 デリゲートは、/ を含むリクエスト URL のみを使用して Bookinfo アプリケーションにアクセスできることを指定します。

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: bookinfo
      namespace: default
    spec:
      gateways:
        - bookinfo-gateway
      hosts:
        - '*'
      http:
        - delegate:
            name: vs-1
            namespace: ns1
          match:
            - uri:
                prefix: /log
        - delegate:
            name: vs-2
            namespace: ns1
          match:
            - uri:
                prefix: /

    delegate フィールドのパラメータの説明:

    • name:デリゲート名。

    • namespace:デリゲートが適用される名前空間。

手順 3:セカンダリ仮想サービスを構成する

  1. ASM コンソール にログインします。

  2. 左側のナビゲーションペインで、[service Mesh] > [メッシュ管理] を選択します。

  3. [メッシュ管理] ページで、構成する ASM インスタンスを見つけます。[管理] 列の [アクション] をクリックするか、ASM インスタンスの名前をクリックします。

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

  5. [名前空間] ドロップダウンリストから名前空間を選択し、次のコンテンツをコードエディターにコピーして、[作成] をクリックします。

    この例では、ns1 名前空間を使用します。名前空間の作成方法の詳細については、「グローバル名前空間の管理」をご参照ください。

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: vs-1
      namespace: ns1
    spec:
      http:
        - match:
            - uri:
                exact: /login
            - uri:
                exact: /logout
          route:
            - destination:
                host: productpage.default.svc.cluster.local
                port:
                  number: 9080
    • metadata:セカンダリ仮想サービスをプライマリ仮想サービスのデリゲートに関連付けます。metadata の設定は、プライマリ仮想サービスのデリゲートの設定と同じである必要があります。 この手順では、metadata の設定は vs-1 デリゲートの設定と同じです。これは、セカンダリ仮想サービスが vs-1 デリゲートに関連付けられていることを意味します。

    • match:HTTP リクエストのフィルタ条件を指定します。この手順では、uriexact: /loginexact: /logout に設定されています。この設定は、Bookinfo アプリケーションにログインまたはログオフできることを指定します。

  6. 前の手順を繰り返します。[作成] ページで、[名前空間] ドロップダウンリストから名前空間を選択し、次のコンテンツをコードエディターにコピーして、[作成] をクリックします。

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: vs-2
      namespace: ns1
    spec:
      http:
        - match:
            - uri:
                exact: /productpage
            - uri:
                prefix: /static
            - uri:
                prefix: /api/v1/products
          route:
            - destination:
                host: productpage.default.svc.cluster.local
                port:
                  number: 9080
    • metadata:セカンダリ仮想サービスをプライマリ仮想サービスのデリゲートに関連付けます。 metadata の設定は、プライマリ仮想サービスのデリゲートの設定と同じである必要があります。 この手順では、metadata の設定は vs-2 デリゲートの設定と同じです。これは、セカンダリ仮想サービスが vs-2 デリゲートに関連付けられていることを意味します。

    • match:HTTP リクエストのフィルタ条件を指定します。この手順では、/productpage を含む、または /static または /api/v1/products で始まるリクエスト URL のみを使用して Bookinfo アプリケーションにアクセスできることを指定します。

結果の確認

  1. ブラウザのアドレスバーに http://<ASM イングレスゲートウェイの IP アドレス>/productpage と入力します。

    次のページが表示されます。これは、/productpage を含むリクエスト URL を使用して Bookinfo アプリケーションにアクセスしたことを意味します。結果は、vs-2 デリゲートに関連付けられたセカンダリ仮想サービスが有効になっていることを示しています。ASM イングレスゲートウェイの IP アドレスを取得する方法の詳細については、「Istio リソースを使用してトラフィックをサービスの異なるバージョンにルーティングする」トピックの「イングレスゲートウェイの IP アドレスを取得する」セクションをご参照ください。服务

  2. 右上隅の [サインイン] をクリックします。表示されるダイアログボックスで、ユーザー名と対応するパスワードを入力して Bookinfo アプリケーションにログインします。

    次のページが表示されます。これは、Bookinfo アプリケーションにログインしたことを意味します。結果は、vs-1 デリゲートに関連付けられたセカンダリ仮想サービスが有効になっていることを示しています。登录