All Products
Search
Document Center

Alibaba Cloud Service Mesh:Skenario 1: Menyebarkan trace ID dalam rantai panggilan

Last Updated:Jun 21, 2026

Anda dapat menggunakan jalur lalu lintas mode permissive untuk mengisolasi versi aplikasi. Berdasarkan header permintaan yang disebarkan dan header permintaan ingress, traffic diarahkan ke jalur yang berbeda. Ketika layanan dalam suatu jalur saling memanggil, jika layanan tujuan tidak tersedia di jalur tersebut, sistem meneruskan permintaan ke jalur garis dasar. Hal ini menjamin integritas rantai panggilan dan menyederhanakan manajemen traffic.

Penting

Sebelum memulai, baca dan pahami Gunakan jalur lalu lintas mode permissive untuk manajemen traffic end-to-end dan konsep terkaitnya.

Ikhtisar skenario

Contoh ini menggunakan tiga layanan—mocka, mockb, dan mockc—untuk membuat tiga jalur lalu lintas yang merepresentasikan tiga versi rantai panggilan: s1, s2, dan s3. Jalur s1 merupakan jalur garis dasar dan mencakup ketiga layanan tersebut. Jalur s2 hanya mencakup layanan mocka dan mockc, sedangkan jalur s3 hanya mencakup layanan mockb.

Langkah 1: Buat grup jalur dan jalur

  1. Buat grup jalur.

    1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

    2. Pada halaman Mesh Management, klik nama instans target. Di panel navigasi kiri, pilih Traffic Management Center > Traffic Lane.

    3. Pada halaman Traffic Lane, klik Create Swimlane Group. Pada panel Create Swimlane Group, konfigurasikan parameter lalu klik OK.

      Parameter

      Deskripsi

      Name of swim lane group

      Pada contoh ini, atur namanya menjadi test.

      Entrance gateway

      Pilih ingressgateway.

      Lane Mode

      Pilih Permissive Mode.

      Pass-through Mode of Trace Context

      Pilih Pass Through Trace ID.

      Trace ID Request Header

      Aplikasi contoh menyebarkan header permintaan my-trace-id melalui rantai panggilan. Oleh karena itu, atur parameter ini menjadi my-trace-id.

      Routing Request Header

      Header ini digunakan oleh gerbang untuk mengarahkan traffic ingress ke jalur yang berbeda dan mempertahankan konteks jalur. Anda dapat menentukan nama header yang valid apa pun. Pada contoh ini, gunakan x-asm-prefer-tag.

      Swimlane Services

      Pilih kluster Kubernetes target dan namespace default. Dari daftar layanan yang tersedia, pilih mocka, mockb, dan mockc, lalu klik ikon 移动 untuk memindahkannya ke daftar selected.

      Setelah konfigurasi selesai, sistem secara otomatis menghasilkan resource TrafficLabel yang sesuai. Di panel navigasi kiri, klik TrafficLabel untuk melihat resource tersebut. Sebagai contoh, TrafficLabel berikut dihasilkan untuk layanan mocka.

      Contoh YAML TrafficLabel

      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. Buat jalur s1, s2, dan s3 serta bind ke versi v1, v2, dan v3, masing-masing.

    1. Pada halaman Traffic Lane, pada bagian Traffic Rule Definition, klik Create swimlanes.

    2. Pada kotak dialog Create swimlanes, konfigurasikan parameter lalu klik OK.

      Parameter

      Deskripsi

      Swimlane Name

      Beri nama tiga jalur tersebut masing-masing s1, s2, dan s3.

      Configure Service Tag

      Label Key: Pilih ASM_TRAFFIC_TAG.

      Label Value: Pilih v1 untuk jalur s1, v2 untuk jalur s2, dan v3 untuk jalur s3.

      Add Service

      Jalur s1: Pilih mocka(default), mockb(default), dan mockc(default).

      Jalur s2: Pilih mocka(default) dan mockc(default).

      Jalur s3: Pilih mockb(default).

      Setelah tiga jalur dibuat, hasilnya ditampilkan pada gambar berikut: image.png

      Catatan

      Secara default, jalur lalu lintas pertama yang Anda buat dalam grup jalur menjadi jalur garis dasar. Anda dapat mengubah jalur garis dasar tersebut. Jika permintaan ditujukan ke layanan yang tidak ada di jalur saat ini, mekanisme fallback akan meneruskannya ke jalur garis dasar. Untuk informasi selengkapnya, lihat Ubah jalur garis dasar dalam mode permissive.

      Setelah tiga jalur dibuat, sistem menghasilkan DestinationRule dan VirtualService untuk setiap layanan dalam grup jalur. Di panel navigasi kiri, pilih Traffic Management Center > DestinationRule atau VirtualService untuk melihat resource tersebut. Sebagai contoh, DestinationRule dan VirtualService berikut secara otomatis dibuat untuk layanan mocka.

      Contoh YAML DestinationRule

      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
      

      Contoh YAML VirtualService

      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. Buat aturan traffic ingress untuk ketiga jalur tersebut.

    1. Pada halaman Traffic Lane, pada bagian Traffic Rule Definition, temukan jalur target lalu klik Ingress traffic rules pada kolom Actions.

    2. Pada kotak dialog Add drainage rule, konfigurasikan parameter lalu klik OK.

      Contoh ini mengasumsikan bahwa API ingress untuk semua layanan jalur adalah /mock. Konfigurasikan aturan traffic ingress yang sama untuk setiap jalur.

      Parameter

      Deskripsi

      Ingress service

      Pilih mocka.default.svc.cluster.local.

      Ingress traffic rules

      Atur Name untuk ketiga aturan menjadi r1, r2, dan r3, masing-masing. Atur realm name menjadi *.

      Matching request URI

      Atur Method menjadi Exact dan Content menjadi /mock.

      Setelah membuat aturan traffic ingress untuk ketiga jalur, konfigurasinya sebagai berikut: jalur s1 (garis dasar, label v1, dengan layanan mocka, mockb, dan mockc), jalur s2 (label v2, dengan layanan mocka dan mockc), dan jalur s3 (label v3, dengan layanan mockb). Setiap aturan traffic ingress juga mencakup kondisi pencocokan header untuk x-asm-prefer-tag yang secara tepat mencocokkan nama jalur yang sesuai.

      Setelah aturan dibuat, sistem secara otomatis menghasilkan aturan traffic ingress (VirtualService) untuk setiap jalur. Sebagai contoh, VirtualService berikut dihasilkan untuk jalur s2.

      Contoh YAML VirtualService

      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

Langkah 2: Verifikasi fitur canary end-to-end

  1. Dapatkan Alamat IP publik gerbang masuk ASM. Untuk informasi selengkapnya, lihat Dapatkan alamat IP gerbang masuk ASM.

  2. Jalankan perintah berikut untuk mengatur Variabel lingkungan.

    Ganti xxx.xxx.xxx.xxx dengan alamat IP dari langkah sebelumnya.

    export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx
  3. Verifikasi bahwa fitur canary end-to-end berfungsi sesuai harapan.

    1. Jalankan perintah berikut untuk memeriksa akses ke jalur s1.

      Nilai header x-asm-prefer-tag, yaitu s1, sesuai dengan nama yang Anda konfigurasikan untuk jalur s1 di langkah 2 Langkah 1.

      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;

      Output yang diharapkan:

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

      Output menunjukkan bahwa traffic dengan header permintaan x-asm-prefer-tag: s1 diarahkan ke layanan dalam jalur s1, sesuai harapan.

    2. Jalankan perintah berikut untuk memeriksa akses ke jalur s2.

      Nilai header x-asm-prefer-tag, yaitu s2, sesuai dengan nama yang Anda konfigurasikan untuk jalur s2 di langkah 2 Langkah 1.

      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;

      Output yang diharapkan:

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

      Output menunjukkan bahwa traffic dengan header permintaan x-asm-prefer-tag: s2 diarahkan ke layanan dalam jalur s2. Saat traffic dikirim ke layanan mockb, yang tidak ada di jalur s2, mekanisme fallback mengarahkan permintaan ke layanan mockb di jalur garis dasar s1. Saat rantai panggilan dilanjutkan ke layanan mockc, traffic diarahkan kembali dengan benar ke layanan mockc di jalur s2. Ini adalah perilaku yang diharapkan.

    3. Jalankan perintah berikut untuk memeriksa akses ke jalur s3.

      Nilai header x-asm-prefer-tag, yaitu s3, sesuai dengan nama yang Anda konfigurasikan untuk jalur s3 di langkah 2 Langkah 1.

      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;

      Output yang diharapkan:

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

      Output menunjukkan bahwa traffic dengan header permintaan x-asm-prefer-tag: s3 diarahkan ke layanan dalam jalur s3. Saat traffic dikirim ke layanan mocka dan mockc, yang tidak ada di jalur s3, mekanisme fallback mengarahkan permintaan ke layanan mocka dan mockc di jalur garis dasar s1. Ini adalah perilaku yang diharapkan.

Ubah jalur garis dasar dalam mode permissive

Catatan

Sebelum mengubah jalur garis dasar, Anda harus memiliki grup jalur dalam mode permissive yang memiliki setidaknya dua jalur.

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Traffic Management Center > Traffic Lane.

  3. Pada halaman Traffic Lane, klik tab grup jalur target. Pada bagian Traffic Rule Definition, klik ikon 238D682D-C76F-4c7c-974E-501245431A86.png di samping Baseline Lane.

  4. Pilih nama jalur garis dasar baru lalu klik confirm edit.