全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Gunakan jalur lalu lintas untuk mengelola trafik

更新时间:Dec 12, 2025

Service Mesh (ASM) memungkinkan Anda menggunakan fitur label lalu lintas untuk mengisolasi versi atau fitur tertentu dari aplikasi ke dalam lingkungan runtime independen (dikenal sebagai jalur). Anda dapat mengonfigurasi aturan jalur untuk mengarahkan permintaan yang memenuhi kriteria ke versi atau fitur tujuan dari aplikasi. Topik ini menjelaskan cara menggunakan jalur untuk mengelola lalu lintas di konsol ASM.

Prasyarat

  • Sebuah instance ASM Edisi Enterprise atau Edisi Ultimate telah dibuat dan instans tersebut adalah versi 1.17.2.22 atau lebih baru. Untuk informasi lebih lanjut, lihat Buat instance ASM atau Perbarui instance ASM.

  • Kluster ditambahkan ke instance ASM.

  • Sebuah gateway ASM bernama ingressgateway telah dibuat. Untuk informasi lebih lanjut, lihat Buat gateway masuk.

  • Sebuah gateway Istio bernama ingressgateway telah dibuat di namespace istio-system. Untuk informasi lebih lanjut, lihat Kelola gateway Istio.

    Tampilkan contoh kode YAML gateway

    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:
            - '*'
    

Fitur

Rilis canary memungkinkan Anda secara bertahap meluncurkan layanan atau versi baru. Sebagai contoh, jika Anda ingin merilis versi baru, Anda dapat terlebih dahulu mengarahkan sebagian lalu lintas ke versi tersebut untuk menguji fungsinya, dan meningkatkan lalu lintas setelah fungsi diverifikasi.

Rilis canary ujung ke ujung terutama mengarahkan lalu lintas permintaan melalui rantai panggilan layanan mikro yang berbeda. Anda tidak perlu mengonfigurasi ulang layanan mikro Anda untuk tujuan ini. Hanya beberapa aturan yang diperlukan untuk membangun lingkungan terisolasi untuk lalu lintas dari gateway ke layanan. Rilis canary ujung ke ujung memfasilitasi peluncuran beberapa layanan atau beberapa versi layanan pada saat yang bersamaan. Untuk informasi lebih lanjut, lihat Label traffic.

Dalam contoh ini, tiga jalur s1, s2, dan s3 diterapkan, dan masing-masing jalur berisi tiga layanan mocka, mockb, dan mockc. Setelah jalur diterapkan di ASM console, periksa apakah lalu lintas didistribusikan di antara jalur sesuai harapan.泳道模式的全链路灰度

Langkah 1: Terapkan layanan sampel

  1. Aktifkan injeksi proxy sidecar otomatis untuk namespace default. Untuk informasi lebih lanjut, lihat Manage global namespaces.

    Untuk informasi lebih lanjut, lihat Konfigurasikan kebijakan injeksi proxy sidecar.

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

    2. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih ASM Instance > Global Namespace.

    3. Di halaman Global Namespace, temukan namespace default dan klik Enable Automatic Sidecar Injection di kolom Automatic Sidecar Injection. Di pesan Submit, klik OK.

  2. Jalankan perintah berikut untuk menerapkan layanan sampel di kluster Container Service for Kubernetes (ACK):

    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 grup jalur dan jalur

  1. Buat grup jalur.

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

    2. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi 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.

      Swimlane Services

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

      Setelah konfigurasi, label lalu lintas yang sesuai akan dihasilkan.

      Tampilkan kode YAML label lalu lintas

      apiVersion: istio.alibabacloud.com/v1beta1
      kind: TrafficLabel
      metadata:
        labels:
          asm-system: 'true'
          provider: asm
        name: asm-trafficlabel-global
        namespace: istio-system
      spec:
        rules:
          - labels:
              - name: asm-label
                valueFrom:
                  - $getLabel(ASM_TRAFFIC_TAG)
      

  2. Buat jalur s1, s2, dan s3 dan ikat jalur s1 ke v1 dari layanan sampel, jalur s2 ke v2 dari layanan sampel, dan jalur s3 ke v3 dari layanan sampel.

    Topik ini hanya menjelaskan cara membuat jalur s1. Anda dapat membuat jalur s2 dan s3 dengan metode yang sama.

    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

      Untuk contoh ini, masukkan s1.

      Catatan

      Permintaan yang header-nya berisi nama jalur dalam format 'x-asm-prefer-tag: nama jalur' diarahkan ke versi layanan yang sesuai.

      Configure Service Tag

      Untuk contoh ini, masukkan v1.

      Add Service

      Untuk contoh ini, pilih layanan mocka(default), mockb(default), dan mockc(default).

      创建泳道

      Setelah ketiga jalur dibuat, Anda dapat melihatnya di bagian Definisi Aturan Lalu Lintas, seperti yang ditunjukkan pada gambar berikut:创建泳道

      Setiap kali Anda membuat jalur, sistem membuat aturan tujuan. Kode berikut memberikan contoh aturan tujuan yang dibuat setelah Anda membuat jalur s1:

      Tampilkan contoh kode YAML aturan tujuan

      apiVersion: networking.istio.io/v1beta1
      kind: DestinationRule
      metadata:
        creationTimestamp: '2023-05-29T09:06:09Z'
        generation: 3
        labels:
          asm-system: 'true'
          provider: asm
          swimlane-group: test
        name: trafficlabel-dr-test-default-mocka
        namespace: istio-system
        resourceVersion: '1310364657'
        uid: 7112ce64-0176-4ff3-b5f3-66263085****
      spec:
        host: mocka.default.svc.cluster.local
        subsets:
          - labels:
              ASM_TRAFFIC_TAG: v1
            name: s1
          - labels:
              ASM_TRAFFIC_TAG: v1
            name: v1
          - labels:
              ASM_TRAFFIC_TAG: v2
            name: v2
          - labels:
              ASM_TRAFFIC_TAG: v2
            name: s2
          - labels:
              ASM_TRAFFIC_TAG: v3
            name: v3
          - labels:
              ASM_TRAFFIC_TAG: v3
            name: s3
      

  3. Buat aturan pengarahan lalu lintas untuk setiap jalur.

    Topik ini hanya menjelaskan cara membuat aturan pengarahan lalu lintas untuk jalur s1. Anda dapat membuat aturan pengarahan lalu lintas untuk jalur s2 dan s3 dengan metode yang sama.

    1. Di bagian Traffic Rule Definition halaman Traffic Lane, temukan jalur untuk mana Anda ingin membuat aturan pengarahan 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 jalur adalah /mock, dan aturan pengarahan 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 dan parameter realm name menjadi *.

      Matching request URI

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

      Setelah aturan pengarahan lalu lintas dibuat, Anda dapat melihatnya di bagian Definisi Aturan Lalu Lintas, seperti yang ditunjukkan pada gambar berikut:引流规则

      Kemudian, sistem menghasilkan layanan virtual. Kode berikut memberikan contoh layanan virtual:

      Tampilkan contoh kode YAML layanan virtual

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        creationTimestamp: '2023-05-29T09:13:00Z'
        generation: 3
        labels:
          asm-system: 'true'
          istioGateway: ingressgateway
          provider: asm
        name: ingressgateway
        namespace: istio-system
        resourceVersion: '1310388638'
        uid: d60baa2f-3a12-472f-881a-15d21004****
      spec:
        gateways:
          - istio-system/ingressgateway
        hosts:
          - '*'
        http:
          - match:
              - headers:
                  x-asm-prefer-tag:
                    exact: s2
                uri:
                  exact: /mock
            name: swimelane-ingress-route-test-s2-rule2
            route:
              - destination:
                  host: mocka.default.svc.cluster.local
                  subset: s2
          - match:
              - headers:
                  x-asm-prefer-tag:
                    exact: s3
                uri:
                  exact: /mock
            name: swimelane-ingress-route-test-s3-rule3
            route:
              - destination:
                  host: mocka.default.svc.cluster.local
                  subset: s3
          - match:
              - headers:
                  x-asm-prefer-tag:
                    exact: s1
                uri:
                  exact: /mock
            name: swimelane-ingress-route-test-s1-rule1
            route:
              - destination:
                  host: mocka.default.svc.cluster.local
                  subset: s1
      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        creationTimestamp: '2023-05-29T09:13:00Z'
        generation: 3
        labels:
          asm-system: 'true'
          istioGateway: ingressgateway
          provider: asm
        name: ingressgateway
        namespace: istio-system
        resourceVersion: '1310388638'
        uid: d60baa2f-3a12-472f-881a-15d21004****
      spec:
        gateways:
          - istio-system/ingressgateway
        hosts:
          - '*'
        http:
          - match:
              - headers:
                  x-asm-prefer-tag:
                    exact: s2
                uri:
                  exact: /mock
            name: swimelane-ingress-route-test-s2-rule2
            route:
              - destination:
                  host: mocka.default.svc.cluster.local
                  subset: s2
          - match:
              - headers:
                  x-asm-prefer-tag:
                    exact: s3
                uri:
                  exact: /mock
            name: swimelane-ingress-route-test-s3-rule3
            route:
              - destination:
                  host: mocka.default.svc.cluster.local
                  subset: s3
          - match:
              - headers:
                  x-asm-prefer-tag:
                    exact: s1
                uri:
                  exact: /mock
            name: swimelane-ingress-route-test-s1-rule1
            route:
              - destination:
                  host: mocka.default.svc.cluster.local
                  subset: s1
      

Langkah 3: Verifikasi bahwa fitur rilis canary ujung ke ujung berfungsi

  1. Dapatkan alamat IP publik gateway ASM. Untuk informasi lebih lanjut, lihat Langkah 2: Query alamat IP gateway masuk instance ASM di Integrasi layanan inferensi cloud-native KServe dengan 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 ujung ke ujung berfungsi.

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

      Dalam perintah, nilai dari x-asm-prefer-tag adalah s1, yaitu nama jalur yang Anda konfigurasikan saat membuat jalur di Langkah 2.

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

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

      Trafik yang ditentukan oleh header HTTP x-asm-prefer-tag: 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 x-asm-prefer-tag adalah s2, yaitu nama jalur yang Anda konfigurasikan saat membuat jalur di Langkah 2.

      for i in {1..100};  do curl   -H 'x-asm-prefer-tag: s2' 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)

      Lalu lintas yang ditentukan oleh header HTTP x-asm-prefer-tag: s2 mengalir ke layanan terkait di jalur s2. Ini sesuai dengan harapan.

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

      Dalam perintah, nilai dari x-asm-prefer-tag adalah s3, yaitu nama jalur yang Anda konfigurasikan saat membuat jalur di Langkah 2.

      for i in {1..100};  do curl   -H 'x-asm-prefer-tag: s3' 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)

      Lalu lintas yang ditentukan oleh header HTTP x-asm-prefer-tag: s3 mengalir ke layanan terkait di jalur s3. Ini sesuai dengan harapan.

(Opsional) Langkah 4: Periksa topologi mesh

Jika Anda telah mengaktifkan Topologi Mesh di konsol ASM, Anda dapat memeriksa topologi untuk permintaan sebelumnya. Untuk informasi lebih lanjut, lihat Aktifkan Topologi Mesh untuk meningkatkan observabilitas.