All Products
Search
Document Center

Alibaba Cloud Service Mesh:Skenario 2: Transmisi langsung header permintaan kustom

Last Updated:Jun 21, 2026

Anda dapat menggunakan traffic lanes dalam permissive mode untuk mencapai version isolation aplikasi. Dengan menetapkan E2E pass-through request header sebagai request routing header, Anda dapat menggunakan nilai header tersebut untuk mengarahkan traffic ke swimlanes. Ketika layanan dalam suatu swimlane saling memanggil, jika layanan tujuan tidak ada di swimlane saat ini, permintaan akan diteruskan ke baseline lane. Pendekatan ini menjamin integritas rantai panggilan dan menyederhanakan manajemen traffic.

Penting

Sebelum memulai, pastikan Anda telah membaca dan memahami Gunakan jalur lalu lintas mode permissive untuk mengelola traffic end-to-end dan konten terkaitnya.

Ikhtisar skenario

Contoh ini menggunakan tiga layanan—mocka, mockb, dan mockc—untuk membuat tiga swimlanes (s1, s2, dan s3) yang merepresentasikan tiga versi rantai pemanggilan layanan. Swimlane s1 merupakan baseline lane dan berisi ketiga layanan tersebut. Swimlane s2 hanya berisi layanan mocka dan mockc, sedangkan swimlane s3 hanya berisi layanan mockb. Dalam skenario ini, baik E2E pass-through request header maupun request routing header diatur ke my-trace-id.

Langkah 1: Buat grup swimlane dan swimlanes

  1. Buat grup swimlane.

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

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

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

      Parameter

      Description

      Name of swim lane group

      Pada contoh ini, atur nama menjadi test.

      Entrance gateway

      Pilih ingressgateway.

      Lane Mode

      Pilih Permissive Mode.

      Pass-through Mode of Trace Context

      Pilih Pass Through Custom Header.

      E2E Pass-through Request Header

      Atur nilai ini ke my-trace-id.

      Swimlane service

      Pilih kluster Kubernetes target dan namespace default. Dalam daftar layanan, pilih mocka, mockb, dan mockc. Klik ikon 移动 untuk memindahkannya ke area selected.

  2. Buat swimlanes s1, s2, dan s3 serta bind ke versi v1, v2, dan v3 masing-masing.

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

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

      Parameter

      Deskripsi

      Swimlane Name

      Atur nama ketiga swimlanes menjadi s1, s2, dan s3 masing-masing.

      Configure Service Tag

      Label Key: Atur ke ASM_TRAFFIC_TAG.

      Label Value: Atur ke v1, v2, dan v3 untuk swimlanes s1, s2, dan s3 masing-masing.

      Add Service

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

      Untuk swimlane s2: Pilih mocka(default) dan mockc(default).

      Untuk swimlane s3: Pilih mockb(default).

      Setelah ketiga swimlanes dibuat, hasilnya akan ditampilkan. Secara default, swimlane pertama yang Anda buat dalam suatu grup menjadi baseline lane. Anda dapat mengubah baseline lane. Saat traffic dikirim ke layanan yang tidak ada di swimlane lain, fallback mechanism akan meneruskan permintaan ke baseline lane. Untuk informasi lebih lanjut tentang cara mengubah baseline lane, lihat Modify the baseline lane. Pada halaman Traffic Rule Definition, Baseline Lane diatur ke s1, dan Ingress Type adalah ASM Gateway (ingressgateway).

      Setelah Anda membuat ketiga swimlanes, Alibaba Cloud Service Mesh secara otomatis menghasilkan DestinationRule dan VirtualService untuk setiap layanan dalam grup swimlane. Anda dapat melihatnya dengan memilih Traffic Management Center > DestinationRule atau Virtual Service di panel navigasi sebelah kiri. Sebagai contoh, ASM secara otomatis membuat DestinationRule dan VirtualService berikut 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:
          - match:
              - headers:
                  my-trace-id:
                    exact: s1
            route:
              - destination:
                  host: mocka.default.svc.cluster.local
                  subset: s1
                fallback:
                  target:
                    host: mocka.default.svc.cluster.local
                    subset: s1
          - match:
              - headers:
                  my-trace-id:
                    exact: s2
            route:
              - destination:
                  host: mocka.default.svc.cluster.local
                  subset: s2
                fallback:
                  target:
                    host: mocka.default.svc.cluster.local
                    subset: s1
          - match:
              - headers:
                  my-trace-id:
                    exact: s3
            route:
              - destination:
                  host: mocka.default.svc.cluster.local
                  subset: s3
                fallback:
                  target:
                    host: mocka.default.svc.cluster.local
                    subset: s1
      
  3. Buat traffic routing rules untuk ketiga swimlanes.

    1. Di bagian Traffic Lane pada halaman Traffic Rule Definition, temukan swimlane target dan klik Ingress traffic rules di kolom Actions.

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

      Contoh ini mengasumsikan bahwa API ingress untuk semua layanan swimlane adalah /mock. Oleh karena itu, Anda mengonfigurasi traffic routing rule yang sama untuk setiap swimlane.

      Parameter

      Deskripsi

      Ingress service

      Pilih mocka.default.svc.cluster.local.

      Ingress traffic rules

      Untuk traffic routing rules ketiga swimlanes, atur Name menjadi r1, r2, dan r3 masing-masing. Atur realm name menjadi *.

      Matching request URI

      Atur Method ke Exact dan Content ke /mock.

      Setelah Anda membuat traffic routing rules untuk ketiga swimlanes, hasilnya akan ditampilkan. Selain pencocokan URI eksak, setiap aturan mencakup kondisi pencocokan Headers: nama header adalah my-trace-id, jenis pencocokan adalah eksak, dan nilai pencocokan untuk swimlanes s1, s2, dan s3 masing-masing adalah s1, s2, dan s3. Baseline Lane diatur ke s1.

      Setelah Anda membuat aturan tersebut, ASM secara otomatis menghasilkan VirtualService yang mendefinisikan traffic routing rule untuk setiap swimlane. Sebagai contoh, ASM menghasilkan VirtualService berikut untuk swimlane 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:
                  my-trace-id:
                    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 rilis canary E2E

  1. Dapatkan alamat IP publik ingress gateway ASM. Untuk informasi lebih lanjut, lihat Obtain the IP address of an ingress gateway.

  2. Jalankan perintah berikut untuk mengatur variabel lingkungan.

    Dalam perintah tersebut, xxx.xxx.xxx.xxx adalah alamat IP yang Anda peroleh pada langkah sebelumnya.

    export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx
  3. Verifikasi E2E canary release.

    1. Jalankan perintah berikut untuk menguji akses ke swimlane s1.

      Nilai my-trace-id, yaitu s1, adalah nama swimlane s1 yang dikonfigurasi di Langkah 1.2.

      for i in {1..100};  do curl -H'my-trace-id: s1' 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 ini mengonfirmasi bahwa permintaan dengan Header HTTP my-trace-id: s1 diarahkan ke layanan dalam swimlane s1.

    2. Jalankan perintah berikut untuk menguji akses ke swimlane s2.

      Nilai my-trace-id, yaitu s2, adalah nama swimlane s2 yang dikonfigurasi di Langkah 1.2.

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

      Output yang diharapkan:

      mocka(version: v2, ip: 192.168.1.101)-> mockb(version: v1, ip: 192.168.1.100)-> mockc(version: v2, ip: 192.168.1.116)

      Output ini menunjukkan bahwa permintaan dengan Header HTTP my-trace-id: s2 diarahkan ke layanan dalam swimlane s2. Saat permintaan menargetkan layanan mockb yang tidak ada di swimlane s2, fallback mechanism meneruskan permintaan ke layanan mockb di baseline lane s1. Permintaan selanjutnya ke layanan mockc diarahkan kembali dengan benar ke layanan mockc di swimlane s2.

    3. Jalankan perintah berikut untuk menguji akses ke swimlane s3.

      Nilai my-trace-id, yaitu s3, adalah nama swimlane s3 yang dikonfigurasi di Langkah 1.2.

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

      Output yang diharapkan:

      mocka(version: v1, ip: 192.168.1.103)-> mockb(version: v3, ip: 192.168.1.120)-> mockc(version: v1, ip: 192.168.1.105)

      Output ini menunjukkan bahwa permintaan dengan Header HTTP my-trace-id: s3 diarahkan ke layanan dalam swimlane s3. Saat permintaan menargetkan layanan mocka dan mockc yang tidak ada di swimlane s3, fallback mechanism meneruskan permintaan ke layanan mocka dan mockc di baseline lane s1.