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

Alibaba Cloud Service Mesh:ASM における VirtualService のデリゲート

最終更新日:Jun 22, 2026

多くのマイクロサービスや多数のルーティングルールを持つアプリケーションでは、単一の VirtualService が肥大化し、維持が困難になることがあります。この問題に対処するため、Service Mesh (ASM) は、ルーティングルールを複数の VirtualService リソースに分割できる デリゲート メカニズムを提供します。これにより、ルーティング構成の変更に伴うリスクを軽減できます。このトピックでは、Bookinfo アプリケーションを例に、複数の VirtualService を使用してアプリケーションのルーティングルールを定義する方法を説明します。

前提条件

背景情報

Service Mesh (ASM) では、VirtualService を使用して、サービスへのトラフィックのルーティング方法を制御するルーティングルールを定義します。実際には、単一の大規模な VirtualService を維持することは困難な場合があります。ルーティングをアップグレードするたびにこの VirtualService を変更する必要があり、その結果、ルーティング構成において更新の競合、冗長性、密結合が発生しがちです。ルールに設定ミスがあると、データプレーンクラスター内のサービスに影響が及ぶ可能性があり、場合によってはすべてのサービスアクセスが中断されることさえあります。

ASM は、VirtualService リソースを デリゲート メカニズムで拡張し、ルーティングルールを分離します。VirtualService をプライマリ VirtualService と 1 つ以上のセカンダリ VirtualService に分割できます。プライマリ VirtualService は全体的なルールを定義し、セカンダリ VirtualService はアプリケーションの特定の部分に対する詳細なルーティングルールを定義します。プライマリ VirtualService は通常、中央の管理者が管理し、セカンダリ VirtualService は個々のサービスオーナーが管理します。この関心の分離により、ルーティングルール変更のリスクが大幅に軽減され、独立したサービスのデプロイとアップグレードの効率が向上します。

注意事項

  • ASM はネストされたデリゲートをサポートしていません。Delegate パラメーターは、プライマリ VirtualService でのみ設定できます。たとえば、Delegate パラメーターがプライマリ VirtualService とセカンダリ VirtualService の両方で設定されている場合、プライマリ VirtualService もセカンダリ VirtualService も有効になりません。

  • セカンダリ VirtualService の HTTPMatchRequest は、プライマリ VirtualService の対応する match 条件のサブセットである必要があります。そうでない場合、競合が発生し、HTTPRoute は有効になりません。

  • delegate フィールドは、プライマリ VirtualService の HTTP ルートの route および redirect フィールドが空の場合にのみ指定できます。セカンダリ VirtualService の hosts フィールドは空である必要があります。セカンダリ VirtualService のルーティングルールは、プライマリ VirtualService のルーティングルールとマージされます。

ステップ 1: Gateway の設定

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

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

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

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

  5. Namespaces を選択し、次の YAML コンテンツをエディターに貼り付けて、Create をクリックします。このトピックでは、default 名前空間を例として使用します。

    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:
        - "*"

    number80 に設定すると、Bookinfo サービスはポート 80 で送受信される HTTP 接続を受け入れることができます。

ステップ 2: プライマリ VirtualService の設定

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

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

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

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

  5. Namespaces を選択し、次の YAML コンテンツをエディターに貼り付けて、Create をクリックします。このトピックでは、default 名前空間を例として使用します。

    以下では、vs-1 と vs-2 の delegate を作成します。vs-1 は Bookinfo サービスにアクセスするためにリクエストに /log を含める必要があり、vs-2 は 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: 子の VirtualService を設定する

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

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

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

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

  5. Namespaces を選択し、次のコンテンツをエディターに貼り付けて、Create をクリックします。

    このトピックでは、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:プライマリ VirtualService の delegate パラメーターと一致させて、delegate パラメーターをバインドする必要があります。この例では、メタデータは vs-1 の delegate パラメーターと一致しており、vs-1 の delegate パラメーターをバインドします。

    • match:リクエストのフィルター条件を指定します。この例では、uriexact: /loginexact: /logout に設定されています。これにより、Bookinfo サービスへのログインとログアウトが可能になります。

  6. 再度、ns1Namespaces を選択し、次の YAML コンテンツをエディターに貼り付けて、Create をクリックします。

    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:値はプライマリ VirtualService の delegate パラメーターと一致している必要があります。これは delegate パラメーターにバインドするために使用されます。この例では、値は vs-2 の delegate パラメーターと一致しており、vs-2 の delegate にバインドされることを意味します。

    • match:リクエストのフィルター条件を指定します。この例では、リクエストに /productpage/static、または /api/v1/products が含まれている必要があります。

結果の確認

  1. Web ブラウザーで http://<イングレスゲートウェイの IP アドレス>/productpage にアクセスします。

    以下のページが表示されます。これは、/productpage パラメーターを含む Bookinfo サービスへのリクエストが成功し、vs-2 の VirtualService が正常に設定されたことを示しています。ASM ゲートウェイアドレスの取得方法については、「イングレスゲートウェイの IP アドレスを取得する」をご参照ください。ページには BookInfo サンプル アプリケーションが正常にロードされ、書籍 The Comedy of Errors の製品ページが表示されます。左側の [書籍の詳細] セクションには、タイプ、ページ数、出版社、言語、ISBN などのフィールドが表示されます。右側の [書籍のレビュー] セクションには、複数のユーザーレビューと星評価が表示されます。これにより、サービスメッシュアプリケーションが ASM ゲートウェイ経由でアクセス可能であることが確認できます。

  2. ページの右上隅にある [Sign in] をクリックします。表示されるダイアログボックスで、ユーザー名とパスワードを入力して Bookinfo サービスにサインインします。

    ページが更新され、ログイン状態になります。これにより、vs-1 VirtualService が正しく設定されていることが確認されます。サインイン後、右上隅にユーザー名 (例:jason) と sign out リンクが表示され、サインインが成功したことが確認されます。