全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Skenario 2: Teruskan header permintaan kustom dalam jejak

更新时间:Jul 02, 2025

Jalur lalu lintas dalam mode permissif memungkinkan Anda mengisolasi versi aplikasi. Trafik diarahkan ke jalur berbeda berdasarkan header routing permintaan dan header permintaan pass-through end-to-end (E2E). Ketika layanan dalam jalur saling memanggil, jika layanan yang akan dipanggil tidak ada di jalur tersebut, permintaan diteruskan ke layanan yang sama di jalur dasar. Fitur ini memastikan integritas rantai panggilan dan menyederhanakan pengelolaan lalu lintas. Topik ini menjelaskan cara menggunakan jalur lalu lintas dalam mode permissif di skenario di mana header routing permintaan sama dengan header permintaan pass-through E2E.

Penting

Sebelum memulai, pastikan Anda telah membaca dan memahami topik Gunakan jalur lalu lintas dalam mode permissif untuk mengelola trafik ujung ke ujung dan konten terkait.

Deskripsi skenario

Dalam contoh ini, tiga jalur (s1, s2, dan s3) dibuat untuk mewakili tiga versi layanan mocka, mockb, dan mockc. Jalur s1 adalah jalur dasar dan mencakup semua tiga layanan dari v1. Jalur s2 hanya mencakup layanan mocka dan mockc dari v2. Jalur s3 hanya mencakup layanan mockb dari v3. Dalam contoh ini, baik header permintaan pass-through E2E maupun header routing permintaan ditentukan sebagai my-trace-id.

Langkah 1: Buat grup jalur dan jalur yang sesuai

  1. Buat grup jalur.

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

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

    3. Di halaman Traffic Lane, klik Create Swimlane Group. Di panel Create Swimlane Group, atur parameter dan klik OK.

      Parameter

      Deskripsi

      Name of swim lane group

      Untuk contoh ini, masukkan 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

      Masukkan my-trace-id.

      Lane Services

      Pilih kluster ACK yang diinginkan dari daftar drop-down Kluster Kubernetes dan pilih default dari daftar drop-down Namespace. Kemudian, pilih mocka, mockb, dan mockc dalam daftar layanan, dan klik ikon 移动 untuk menambahkan layanan ke bagian selected.

  2. Buat jalur s1, s2, dan s3, serta ikat jalur s1 ke versi 1 (v1) dari layanan sampel, jalur s2 ke versi 2 (v2), dan jalur s3 ke versi 3 (v3).

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

    2. Di kotak dialog Create swimlanes, atur parameter dan klik OK.

      Parameter

      Deskripsi

      Swimlane Name

      Beri nama tiga jalur sebagai s1, s2, dan s3 secara berturut-turut.

      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

      Untuk jalur s1, pilih mocka(default), mockb(default), dan mockc(default).

      Untuk jalur s2, pilih mocka(default) dan mockc(default).

      Untuk jalur s3, pilih mockb(default).

      Gambar berikut menunjukkan konfigurasi jalur s1.

      image.png

      Setelah ketiga jalur dibuat, Anda dapat melihatnya di bagian Definisi Aturan Lalu Lintas, seperti yang ditunjukkan pada gambar berikut. Secara default, jalur pertama yang Anda buat dalam grup jalur diatur sebagai jalur dasar. Namun, Anda dapat mengubah jalur dasar. Ketika lalu lintas ditujukan ke layanan yang tidak ada di jalur lain, permintaan diteruskan ke jalur dasar sesuai dengan mekanisme fallback. Untuk informasi lebih lanjut tentang cara mengubah jalur dasar, lihat Ubah jalur dasar dalam mode permissif.image.png

      Aturan tujuan dan layanan virtual secara otomatis dibuat untuk setiap layanan di jalur. Anda dapat memilih Traffic Management Center > DestinationRule atau VirtualService di panel navigasi sebelah kiri untuk melihat aturan tujuan atau layanan virtual. Sebagai contoh, aturan tujuan dan layanan virtual berikut secara otomatis dibuat untuk layanan mocka.

      Perluas untuk melihat kode YAML contoh aturan tujuan

      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
      

      Perluas untuk melihat kode YAML contoh layanan virtual

      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 aturan routing lalu lintas untuk setiap jalur.

    1. Di bagian Traffic Rule Definition halaman Traffic Lane, temukan jalur untuk mana Anda ingin membuat aturan routing lalu lintas, dan klik Ingress traffic rules di kolom Actions.

    2. Di kotak dialog Add drainage rule, atur parameter dan klik OK.

      Contoh ini mengasumsikan bahwa jalur permintaan masuk dari semua layanan di jalur adalah /mock, dan aturan routing lalu lintas yang sama dikonfigurasikan untuk setiap jalur.

      Parameter

      Deskripsi

      Ingress service

      Untuk contoh ini, pilih mocka.default.svc.cluster.local.

      Ingress traffic rules

      Untuk contoh ini, atur parameter Name menjadi r1, r2, dan r3 masing-masing untuk tiga jalur. Atur parameter realm name menjadi *.

      Matching request URI

      Untuk contoh ini, atur parameter Method menjadi Exact dan parameter Content menjadi /mock.

      Gambar berikut menunjukkan konfigurasi aturan routing lalu lintas untuk jalur s1.

      image.png

      Setelah aturan routing lalu lintas dibuat, Anda dapat melihatnya di bagian Definisi Aturan Lalu Lintas, seperti yang ditunjukkan pada gambar berikut:image.png

      Setelah aturan routing lalu lintas dibuat, layanan virtual secara otomatis dibuat untuk jalur. Sebagai contoh, layanan virtual berikut dibuat untuk jalur s2.

      Perluas untuk melihat kode YAML contoh layanan virtual

      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 bahwa fitur rilis canary E2E berfungsi

  1. Peroleh alamat IP publik gateway ingress ASM. Untuk informasi lebih lanjut, lihat Langkah 2: Peroleh alamat IP gateway ingress ASM di Langkah 2: Peroleh alamat IP gateway ingress ASM.

  2. Jalankan perintah berikut untuk mengonfigurasi variabel lingkungan.

    xxx.xxx.xxx.xxx adalah alamat IP yang diperoleh di sublangkah 1.

    export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx
  3. Verifikasi bahwa fitur rilis canary E2E berfungsi.

    1. Jalankan perintah berikut untuk mengakses layanan di jalur s1.

      Dalam perintah, nilai dari my-trace-id adalah s1, yaitu nama jalur s1 yang Anda konfigurasikan saat membuat jalur s1 di sublangkah 2 dari Langkah 1.

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

      Keluaran 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)

      Keluaran menunjukkan bahwa lalu lintas yang ditentukan oleh header HTTP my-trace-id: s1 mengalir ke layanan terkait di jalur s1. Ini sesuai dengan harapan.

    2. Jalankan perintah berikut untuk mengakses layanan di jalur s2.

      Dalam perintah, nilai dari my-trace-id adalah s2, yaitu nama jalur s2 yang Anda konfigurasikan saat membuat jalur s2 di sublangkah 2 dari Langkah 1.

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

      Keluaran 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)

      Keluaran menunjukkan bahwa lalu lintas yang ditentukan oleh header HTTP my-trace-id: s2 mengalir ke layanan terkait di jalur s2. Ini sesuai dengan harapan. Ketika lalu lintas ditujukan ke layanan mockb yang tidak ada di jalur s2, lalu lintas diteruskan ke layanan mockb di jalur dasar s1 sesuai dengan mekanisme fallback. Kemudian, lalu lintas dikirim ke layanan mockc di jalur s2 seperti yang diharapkan.

    3. Jalankan perintah berikut untuk mengakses layanan di jalur s3.

      Dalam perintah, nilai dari my-trace-id adalah s3, yaitu nama jalur s3 yang Anda konfigurasikan saat membuat jalur s3 di sublangkah 2 dari Langkah 1.

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

      Keluaran 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)

      Keluaran menunjukkan bahwa lalu lintas yang ditentukan oleh header HTTP my-trace-id: s3 mengalir ke layanan terkait di jalur s3. Ini sesuai dengan harapan. Ketika lalu lintas ditujukan ke layanan mocka dan mockc yang tidak ada di jalur s3, lalu lintas diteruskan ke layanan mocka dan mockc di jalur dasar s1 sesuai dengan mekanisme fallback.