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

Alibaba Cloud Service Mesh:シナリオ 1:呼び出しチェーンにおけるトレース ID の伝播

最終更新日:Jun 22, 2026

許容モードのトラフィックレーンを使用して、アプリケーションのバージョンを隔離できます。伝播されたリクエストヘッダーと Ingress リクエストヘッダーに基づいて、トラフィックは異なるレーンにルーティングされます。レーン内のサービスが相互に呼び出す際、現在のレーンに宛先サービスが存在しない場合、システムはリクエストをベースラインレーンに転送します。これにより、呼び出しチェーンの整合性が確保され、トラフィック管理が簡素化されます。

重要

開始する前に、「許容モードのトラフィックレーンを使用したエンドツーエンドのトラフィック管理」とその関連概念を読み、理解してください。

シナリオ概要

この例では、mocka、mockb、mockc の 3 つのサービスを使用して、呼び出しチェーンの 3 つのバージョン (s1、s2、s3) を表す 3 つのトラフィックレーンを作成します。レーン s1 はベースラインレーンであり、3 つすべてのサービスを含みます。レーン s2 は mocka と mockc サービスのみを含みます。レーン s3 は mockb サービスのみを含みます。

ステップ 1:レーングループとレーンの作成

  1. レーングループを作成します。

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

    2. Mesh Management ページで、対象のインスタンス名をクリックします。左側のナビゲーションウィンドウで、Traffic Management Center > Traffic Lane を選択します。

    3. 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 Trace ID を選択します。

      Trace ID Request Header

      サンプルアプリケーションは、呼び出しチェーンを通じて my-trace-id リクエストヘッダーを伝播します。したがって、このパラメーターを my-trace-id に設定します。

      Routing Request Header

      このヘッダーは、ゲートウェイが Ingress トラフィックを異なるレーンにルーティングし、レーンコンテキストを維持するために使用されます。有効なヘッダー名を指定できます。この例では、x-asm-prefer-tag を使用します。

      Swimlane Services

      対象の Kubernetes クラスターと [default] 名前空間を選択します。利用可能なサービスのリストから [mocka][mockb][mockc] を選択し、移动 アイコンをクリックして selected リストに移動します。

      構成を完了すると、システムは対応する TrafficLabel リソースを自動的に生成します。左側のナビゲーションウィンドウで TrafficLabel をクリックすると、リソースを表示できます。例えば、mocka サービス用に次の TrafficLabel が生成されます。

      TrafficLabel YAML の例

      apiVersion: istio.alibabacloud.com/v1beta1
      kind: TrafficLabel
      metadata:
        labels:
          asm-system: 'true'
          provider: asm
          swimlane-group: test
        name: asm-swimlane-test-mocka
        namespace: default
      spec:
        rules:
          - labels:
              - name: asm-label
                valueFrom:
                  - '$getExternalInboundRequestHeader(x-asm-prefer-tag, my-trace-id)'
        workloadSelector:
          labels:
            app: mocka
      
  2. s1、s2、s3 のレーンを作成し、それぞれ v1、v2、v3 バージョンにバインドします。

    1. Traffic Lane ページで、Traffic Rule Definition セクションの Create swimlanes をクリックします。

    2. Create swimlanes ダイアログボックスでパラメーターを設定し、OK をクリックします。

      パラメーター

      説明

      Swimlane Name

      3 つのレーンにそれぞれ s1s2s3 と名前を付けます。

      Configure Service Tag

      Label KeyASM_TRAFFIC_TAG を選択します。

      Label Value:レーン s1 には v1、レーン s2 には v2、レーン s3 には v3 を選択します。

      Add Service

      s1 レーン:mocka(default)mockb(default)mockc(default) を選択します。

      s2 レーン:mocka(default)mockc(default) を選択します。

      s3 レーン:mockb(default) を選択します。

      3 つのレーンを作成すると、結果は次の図のようになります:image.png

      説明

      デフォルトでは、レーングループで最初に作成したトラフィックレーンがベースラインレーンになります。ベースラインレーンは変更できます。リクエストの対象サービスが現在のレーンにない場合、フォールバックメカニズムによってベースラインレーンに転送されます。詳細については、「許容モードでのベースラインレーンの変更」をご参照ください。

      3 つのレーンが作成されると、システムはレーングループ内の各サービスに対して DestinationRuleVirtualService を生成します。左側のナビゲーションウィンドウで、Traffic Management Center > DestinationRule または VirtualService を選択してこれらのリソースを表示します。たとえば、mocka サービスに対して次の DestinationRuleVirtualService が自動的に作成されます。

      DestinationRule YAML の例

      apiVersion: networking.istio.io/v1beta1
      kind: DestinationRule
      metadata:
        labels:
          asm-system: 'true'
          provider: asm
          swimlane-group: test
        name: trafficlabel-dr-test-default-mocka
        namespace: istio-system
      spec:
        host: mocka.default.svc.cluster.local
        subsets:
          - labels:
              ASM_TRAFFIC_TAG: v1
            name: s1
          - labels:
              ASM_TRAFFIC_TAG: v2
            name: s2
      

      VirtualService YAML の例

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        labels:
          asm-system: 'true'
          provider: asm
          swimlane-group: test
        name: trafficlabel-vs-test-default-mocka
        namespace: istio-system
      spec:
        hosts:
          - mocka.default.svc.cluster.local
        http:
          - name: default
            route:
              - destination:
                  host: mocka.default.svc.cluster.local
                  subset: $asm-label
                fallback:
                  target:
                    host: mocka.default.svc.cluster.local
                    subset: s1
      
  3. 3 つのレーンに対して Ingress トラフィックルールを作成します。

    1. Traffic Lane ページで、Traffic Rule Definition セクションで対象のレーンを見つけ、Actions 列の Ingress traffic rules をクリックします。

    2. Add drainage rule ダイアログボックスでパラメーターを設定し、OK をクリックします。

      この例では、すべてのレーンサービスの Ingress API が /mock であると仮定します。各レーンに同じ Ingress トラフィックルールを設定します。

      パラメーター

      説明

      Ingress service

      [mocka.default.svc.cluster.local] を選択します。

      Ingress traffic rules

      3 つのルールの Name をそれぞれ r1r2r3 に設定します。realm name* に設定します。

      Matching request URI

      MethodExact に、Content/mock に設定します。

      3 つのレーンの Ingress トラフィックルールを作成した後、設定は次のようになります:レーン s1 (ベースライン、ラベル v1、サービス mocka、mockb、mockc を含む)、レーン s2 (ラベル v2、サービス mocka、mockc を含む)、レーン s3 (ラベル v3、サービス mockb を含む)。各 Ingress トラフィックルールには、対応するレーン名と完全に一致する x-asm-prefer-tag のヘッダー一致条件も含まれます。

      ルールを作成すると、システムは各レーンに対して Ingress トラフィックルール (VirtualService) を自動的に生成します。たとえば、レーン s2 に対して次の VirtualService が生成されます。

      VirtualService YAML の例

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        labels:
          asm-system: 'true'
          provider: asm
          swimlane-group: test
        name: swimlane-ingress-vs-test-s2
        namespace: istio-system
      spec:
        gateways:
          - istio-system/ingressgateway
        hosts:
          - '*'
        http:
          - match:
              - headers:
                  x-asm-prefer-tag:
                    exact: s2
                uri:
                  exact: /mock
            name: r2
            route:
              - destination:
                  host: mocka.default.svc.cluster.local
                  subset: s2
                fallback:
                  target:
                    host: mocka.default.svc.cluster.local
                    subset: s1

ステップ 2:エンドツーエンドカナリア機能の検証

  1. ASM イングレスゲートウェイのパブリック IP アドレスを取得します。詳細については、「ASM イングレスゲートウェイの IP アドレスの取得」をご参照ください。

  2. 次のコマンドを実行して環境変数を設定します。

    xxx.xxx.xxx.xxx を前のステップで取得した IP アドレスに置き換えます。

    export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx
  3. エンドツーエンドカナリア機能が期待どおりに動作することを確認します。

    1. 次のコマンドを実行して、レーン s1 へのアクセスを確認します。

      x-asm-prefer-tag ヘッダーの値 s1 は、ステップ 1 のサブステップ 2 で設定したレーン s1 の名前に一致します。

      for i in {1..100};  do curl   -H 'x-asm-prefer-tag: s1' -H'my-trace-id: x000'$i http://${ASM_GATEWAY_IP}/mock ;  echo ''; sleep 1; done;

      期待される出力:

      -> mocka(version: v1, ip: 172.17.0.54)-> mockb(version: v1, ip: 172.17.0.129)-> mockc(version: v1, ip: 172.17.0.130)

      出力は、リクエストヘッダー x-asm-prefer-tag: s1 を持つトラフィックが、期待どおりにレーン s1 のサービスにルーティングされることを示しています。

    2. 次のコマンドを実行して、レーン s2 へのアクセスを確認します。

      x-asm-prefer-tag ヘッダーの値 s2 は、ステップ 1 のサブステップ 2 で設定したレーン s2 の名前に一致します。

      for i in {1..100};  do curl   -H 'x-asm-prefer-tag: s2' -H'my-trace-id: x000'$i http://${ASM_GATEWAY_IP}/mock ;  echo ''; sleep 1; done;

      期待される出力:

      -> mocka(version: v2, ip: 172.17.0.9)-> mockb(version: v1, ip: 172.17.0.129)-> mockc(version: v2, ip: 172.17.0.128)

      出力は、リクエストヘッダー x-asm-prefer-tag: s2 を持つトラフィックがレーン s2 のサービスにルーティングされることを示しています。レーン s2 に存在しない mockb サービスにトラフィックが送信されると、フォールバックメカニズムがリクエストをベースラインレーン s1 の mockb サービスにルーティングします。呼び出しチェーンが mockc サービスに続くと、トラフィックは正しくレーン s2 の mockc サービスにルーティングされます。これは期待どおりの動作です。

    3. 次のコマンドを実行して、レーン s3 へのアクセスを確認します。

      x-asm-prefer-tag ヘッダーの値 s3 は、ステップ 1 のサブステップ 2 で設定したレーン s3 の名前に一致します。

      for i in {1..100};  do curl   -H 'x-asm-prefer-tag: s3' -H'my-trace-id: x000'$i http://${ASM_GATEWAY_IP}/mock ;  echo ''; sleep 1; done;

      期待される出力:

      mocka(version: v1, ip: 172.17.0.54)-> mockb(version: v3, ip: 192.168.1.120)-> mockc(version: v1, ip: 172.17.0.130)

      出力は、リクエストヘッダー x-asm-prefer-tag: s3 を持つトラフィックがレーン s3 のサービスにルーティングされることを示しています。レーン s3 に存在しない mocka および mockc サービスにトラフィックが送信されると、フォールバックメカニズムがリクエストをベースラインレーン s1 の mocka および mockc サービスにルーティングします。これは期待どおりの動作です。

許容モードでのベースラインレーンの変更

説明

ベースラインレーンを変更する前に、許容モードで少なくとも 2 つのレーンを持つレーングループが必要です。

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

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

  3. Traffic Lane ページで、対象のレーングループのタブをクリックし、Traffic Rule Definition セクションで Baseline Lane の横にある 238D682D-C76F-4c7c-974E-501245431A86.png アイコンをクリックします。

  4. 新しいベースラインレーンの名前を選択し、confirm edit をクリックします。