All Products
Search
Document Center

Alibaba Cloud Service Mesh:Konfigurasikan jalur lalu lintas dan degradasi lalu lintas berdasarkan aturan lalu lintas

Last Updated:Aug 28, 2026

Jalur lalu lintas Alibaba Cloud Service Mesh (ASM) mengisolasi versi aplikasi atau karakteristik lainnya ke dalam lingkungan runtime independen, mengarahkan lalu lintas yang sesuai ke versi target melalui aturan manajemen lalu lintas seperti VirtualService dan DestinationRule. Ketika versi target tidak tersedia, degradasi lalu lintas secara otomatis mengarahkan permintaan ke versi fallback yang ditentukan.

Prasyarat

Langkah 1: Sebarkan layanan contoh

  • Aktifkan injeksi sidecar otomatis untuk namespace default. Untuk informasi selengkapnya, lihat Enable automatic sidecar proxy injection.

    Untuk informasi lebih lanjut tentang injeksi sidecar otomatis, lihat Configure sidecar injection policies.

  • Gunakan file kubeconfig kluster bidang data dan jalankan perintah berikut untuk menyebarkan layanan contoh.

    Layanan contoh mencakup mocka, mockb, dan mockc. Setiap layanan memiliki tiga versi: v1, v2, dan v3.

kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v1/application-v1.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v2/application-v2.yaml
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v3/application-v3.yaml

Langkah 2: Buat aturan lalu lintas untuk menerapkan jalur lalu lintas

Selesaikan sub-tugas berikut untuk membuat aturan DestinationRule, VirtualService, dan routing gerbang yang mendefinisikan jalur lalu lintas.

Buat aturan lalu lintas DestinationRule

Buat DestinationRule untuk setiap layanan guna mendefinisikan subset versi.

Gunakan konten berikut untuk membuat file dr-mock.yaml.

File berikut membagi masing-masing layanan mocka, mockb, dan mockc menjadi tiga subset: v1, v2, dan v3.

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: mocka
  namespace: istio-system
spec:
  host: mocka.default.svc.cluster.local
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
    - labels:
        version: v3
      name: v3
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: mockb
  namespace: istio-system
spec:
  host: mockb.default.svc.cluster.local
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
    - labels:
        version: v3
      name: v3
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: mockc
  namespace: istio-system
spec:
  host: mockc.default.svc.cluster.local
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
    - labels:
        version: v3
      name: v3

Gunakan file kubeconfig instans ASM dan jalankan perintah berikut untuk menerapkan aturan lalu lintas DestinationRule.

kubectl apply -f dr-mock.yaml

Buat aturan lalu lintas VirtualService

Buat VirtualService untuk setiap layanan internal guna mendefinisikan routing berbasis versi dalam jalur lalu lintas.

Gunakan konten berikut untuk membuat file vs-mock.yaml.

File berikut membuat jalur lalu lintas untuk rantai pemanggilan layanan mocka→mockb→mockc. Setelah jalur lalu lintas dibuat, permintaan yang dikirim oleh layanan dengan satu versi hanya dapat dikirim ke layanan dengan versi yang sama.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mockb
  namespace: istio-system
spec:
  hosts:
    - mockb.default.svc.cluster.local
  http:
  - match:
    - sourceLabels:
        version: v1
    route:
    - destination:
        host: mockb.default.svc.cluster.local
        subset: v1
  - match:
    - sourceLabels:
        version: v2
    route:
    - destination:
        host: mockb.default.svc.cluster.local
        subset: v2
  - match:
    - sourceLabels:
        version: v3
    route:
    - destination:
        host: mockb.default.svc.cluster.local
        subset: v3
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mockc
  namespace: istio-system
spec:
  hosts:
    - mockc.default.svc.cluster.local
  http:
  - match:
    - sourceLabels:
        version: v1
    route:
    - destination:
        host: mockc.default.svc.cluster.local
        subset: v1
  - match:
    - sourceLabels:
        version: v2
    route:
    - destination:
        host: mockc.default.svc.cluster.local
        subset: v2
  - match:
    - sourceLabels:
        version: v3
    route:
    - destination:
        host: mockc.default.svc.cluster.local
        subset: v3

Gunakan file kubeconfig instans ASM dan jalankan perintah berikut untuk menerapkan aturan lalu lintas VirtualService.

kubectl apply -f vs-mock.yaml

Buat aturan routing lalu lintas gerbang

Buat aturan routing gerbang untuk mengarahkan permintaan eksternal ke dalam jalur lalu lintas berdasarkan Header x-asm-prefer-tag.

Gunakan konten berikut untuk membuat file gw-mock.yaml.

File berikut membuat aturan routing lalu lintas gerbang untuk rantai pemanggilan layanan mocka→mockb→mockc. Aturan ini mencocokkan Header x-asm-prefer-tag pada permintaan yang dikirim ke gerbang dan mengarahkan permintaan tersebut ke versi v1, v2, atau v3 layanan mocka berdasarkan nilai header tersebut.

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: ingressgateway
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - '*'
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: ingressgateway
  namespace: istio-system
spec:
  gateways:
    - istio-system/ingressgateway
  hosts:
    - '*'
  http:
    - match:
        - headers:
            x-asm-prefer-tag:
              exact: v1
          uri:
            exact: /mock
      route:
        - destination:
            host: mocka.default.svc.cluster.local
            subset: v1
    - match:
        - headers:
            x-asm-prefer-tag:
              exact: v2
          uri:
            exact: /mock
      route:
        - destination:
            host: mocka.default.svc.cluster.local
            subset: v2
    - match:
        - headers:
            x-asm-prefer-tag:
              exact: v3
          uri:
            exact: /mock
      route:
        - destination:
            host: mocka.default.svc.cluster.local
            subset: v3

Gunakan file kubeconfig instans ASM dan jalankan perintah berikut untuk menerapkan aturan routing lalu lintas gerbang.

kubectl apply -f gw-mock.yaml

Langkah 3: Verifikasi bahwa jalur lalu lintas berlaku

  • Dapatkan Alamat IP publik gerbang ASM. Untuk informasi selengkapnya, lihat Obtain the address of an ASM gateway.

  • Jalankan perintah berikut untuk mengatur variabel lingkungan.

    xxx.xxx.xxx.xxx adalah alamat IP yang diperoleh pada langkah sebelumnya.

export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx
  • Verifikasi bahwa jalur lalu lintas berlaku.

  • Jalankan perintah berikut untuk memeriksa tanggapan dari jalur lalu lintas v1.

for i in {1..100};  do curl   -H 'x-asm-prefer-tag: v1' 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 yang diharapkan menunjukkan bahwa lalu lintas dengan Header HTTP x-asm-prefer-tag: v1 dialihkan ke layanan versi v1.

  • Jalankan perintah berikut untuk memeriksa tanggapan dari jalur lalu lintas v2.

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

Output yang diharapkan:

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

Output yang diharapkan menunjukkan bahwa lalu lintas dengan Header HTTP x-asm-prefer-tag: v2 dialihkan ke layanan versi v2.

  • Jalankan perintah berikut untuk memeriksa tanggapan dari jalur lalu lintas v3.

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

Output yang diharapkan:

-> mocka(version: v3, ip: 172.17.0.132)-> mockb(version: v3, ip: 172.17.0.127)-> mockc(version: v3, ip: 172.17.0.69)

Output yang diharapkan menunjukkan bahwa lalu lintas dengan Header HTTP x-asm-prefer-tag: v3 dialihkan ke layanan versi v3.

(Opsional) Langkah 4: Konfigurasikan degradasi lalu lintas dalam jalur lalu lintas

  • Gunakan konten berikut untuk memodifikasi file vs-mock.yaml.

    File berikut membuat jalur lalu lintas untuk rantai pemanggilan layanan mocka→mockb→mockc. Selain itu, ketika versi v2 atau v3 dari mockb atau mockc tidak tersedia, permintaan akan dialihkan ke rantai pemanggilan versi v1 layanan tersebut.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mockb
  namespace: istio-system
spec:
  hosts:
    - mockb.default.svc.cluster.local
  http:
  - match:
    - sourceLabels:
        version: v1
    route:
    - destination:
        host: mockb.default.svc.cluster.local
        subset: v1
  - match:
    - sourceLabels:
        version: v2
    route:
    - destination:
        host: mockb.default.svc.cluster.local
        subset: v2
      fallback:
        target:
          host: mockb.default.svc.cluster.local
          subset: v1
  - match:
    - sourceLabels:
        version: v3
    route:
    - destination:
        host: mockb.default.svc.cluster.local
        subset: v3
      fallback:
        target:
          host: mockb.default.svc.cluster.local
          subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mockc
  namespace: istio-system
spec:
  hosts:
    - mockc.default.svc.cluster.local
  http:
  - match:
    - sourceLabels:
        version: v1
    route:
    - destination:
        host: mockc.default.svc.cluster.local
        subset: v1
  - match:
    - sourceLabels:
        version: v2
    route:
    - destination:
        host: mockc.default.svc.cluster.local
        subset: v2
      fallback:
        target:
          host: mockc.default.svc.cluster.local
          subset: v1
  - match:
    - sourceLabels:
        version: v3
    route:
    - destination:
        host: mockc.default.svc.cluster.local
        subset: v3
      fallback:
        target:
          host: mockc.default.svc.cluster.local
          subset: v1
  • Gunakan file kubeconfig instans ASM dan jalankan perintah berikut untuk memodifikasi aturan lalu lintas VirtualService yang ada serta menerapkan konfigurasi degradasi lalu lintas.

kubectl apply -f vs-mock.yaml

(Opsional) Langkah 5: Verifikasi bahwa degradasi lalu lintas berlaku

  • Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

  • Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

    Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

  • Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

  • Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

    Di halaman Deployments, temukan workload mockb-v2 dan klik Scale di kolom Actions. Di kotak dialog Scale, atur Desired Pod Count menjadi 1 dan klik OK. Di kotak dialog Confirm, klik OK untuk mensimulasikan kegagalan layanan mockb versi v2.

    • Jalankan perintah berikut untuk memeriksa tanggapan dari jalur lalu lintas v2.

    for i in {1..100};  do curl   -H 'x-asm-prefer-tag: v2' 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.126)-> mockc(version: v1, ip: 172.17.0.128)

    Output yang diharapkan menunjukkan bahwa lalu lintas dengan Header HTTP x-asm-prefer-tag: v2 dialihkan ke layanan versi v2. Saat lalu lintas melewati layanan mockb versi v2, permintaan kemudian dialihkan ke rantai pemanggilan versi v1 layanan tersebut karena layanan mockb versi v2 mengalami kegagalan. Hal ini menerapkan degradasi lalu lintas.