全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Gunakan resource Istio untuk mengarahkan traffic ke berbagai versi layanan

更新时间:Mar 12, 2026

Saat merilis versi baru layanan mikro, Anda perlu mengontrol jumlah traffic yang dialihkan ke masing-masing versi sebelum peluncuran penuh. Service Mesh (ASM) menggunakan tiga resource Istio—Gateway, VirtualService, dan DestinationRule—untuk membagi traffic berdasarkan persentase di antara berbagai versi layanan. Pendekatan ini mendukung rilis canary dan Pengujian A/B.

Topik ini menggunakan contoh lengkap aplikasi Bookinfo. Anda akan mengekspos Bookinfo melalui gerbang Istio, lalu mengonfigurasi routing berbobot untuk mengirim 10%, 40%, dan 50% traffic ke tiga versi layanan reviews.

Cara kerja

Routing traffic di ASM mengandalkan tiga resource Istio yang bekerja bersama dalam satu rantai:

ResourcePeran
GatewayLoad balancer di tepi mesh yang menerima koneksi HTTP atau TCP inbound. Bind ke ingress gateway untuk mengontrol bagaimana traffic eksternal memasuki mesh.
VirtualServiceAturan routing yang mencocokkan permintaan masuk berdasarkan URI, header, atau kriteria lainnya, lalu meneruskannya ke layanan tertentu. VirtualService dapat membagi traffic ke beberapa tujuan berdasarkan bobot.
DestinationRuleMengelompokkan instans layanan ke subset bernama berdasarkan label (biasanya label versi). Aturan VirtualService mereferensikan subset ini untuk mengarahkan traffic ke versi tertentu.

Alur lalu lintas:

Traffic eksternal --> Gateway --> VirtualService --> DestinationRule (subset) --> Pod layanan

Dalam tutorial ini, Anda pertama-tama membuat Gateway dan VirtualService untuk mengekspos aplikasi Bookinfo. Kemudian, Anda menambahkan DestinationRule dan VirtualService kedua untuk membagi traffic reviews ke v1, v2, dan v3.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Langkah 1: Buat gerbang Istio

Buat gerbang Istio dan bind ke ingress gateway agar traffic eksternal dapat mencapai layanan di dalam mesh.

Opsi A: Terapkan YAML (disarankan)

Simpan manifes berikut dan terapkan dengan kubectl apply -f <filename>.yaml:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: bookinfo-gateway
  namespace: default
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - '*'

Gateway ini memilih pod ingress gateway (label istio: ingressgateway) dan mendengarkan pada Port 80 untuk traffic HTTP dari semua host.

Opsi B: Gunakan Konsol ASM

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

  2. Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Gateways > Gateway. Klik Create.

  3. Konfigurasi parameter berikut, lalu klik Create.

    ParameterValue
    Namespacedefault
    Namebookinfo-gateway
    Gateway Pod Selector -- Keyistio
    Gateway Pod Selector -- Valueingressgateway
    Exposed Service -- Namehttp
    Exposed Service -- Port80
    Exposed Service -- ProtocolHTTP
    Exposed Service -- Service*

    Gateway rule configuration

Untuk deskripsi lengkap setiap parameter, lihat Gateway.

Langkah 2: Buat VirtualService untuk routing ingress

Buat VirtualService yang mengarahkan permintaan masuk melalui gateway ke layanan productpage. Setelah langkah ini, aplikasi Bookinfo dapat diakses di /productpage, /static, /login, /logout, dan /api/v1/products.

Opsi A: Terapkan YAML (disarankan)

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: vs-demo
  namespace: default
spec:
  hosts:
    - '*'
  gateways:
    - bookinfo-gateway
  http:
    - name: gw-to-productage
      match:
        - uri:
            exact: /productpage
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
      route:
        - destination:
            host: productpage
            port:
              number: 9080

VirtualService ini bind ke bookinfo-gateway dan meneruskan permintaan yang cocok ke layanan productpage pada Port 9080.

Opsi B: Gunakan Konsol ASM

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

  2. Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Traffic Management Center > VirtualService. Klik Create.

  3. Konfigurasi pengaturan berikut, lalu klik Create.

    BagianParameterValue
    Basic InformationNamespacedefault
    NameTentukan nama untuk VirtualService
    GatewaysApply To specific GatewaysAktifkan. Pilih bookinfo-gateway
    Apply To All SidecarsNonaktifkan
    HostsPilih *
    HTTP RouteNameTentukan nama entri rute
    Request matching rulesTambahkan lima aturan:
    Matching request URI = Exact: /productpage
    Matching request URI = Prefix: /static
    Matching request URI = Exact: /login
    Matching request URI = Exact: /logout
    Matching request URI = Prefix: /api/v1/products
    Route destinationHost: productpage, Port: 9080

Untuk deskripsi lengkap setiap parameter, lihat Virtual Service.

Langkah 3: Verifikasi bahwa Bookinfo dapat diakses

  1. Dapatkan alamat IP ingress gateway.

    Dari Konsol ASM

    1. Login ke Konsol ASM. Pilih Service Mesh > Mesh Management.

    2. Klik nama instans ASM. Pilih ASM Gateways > Ingress Gateway.

    3. Di halaman Ingress Gateway, temukan nilai Service address.

    Dari Konsol ACK

    1. Login ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

    2. Klik nama kluster. Di panel navigasi kiri, pilih Network > Services.

    3. Di halaman Services, pilih istio-system dari daftar drop-down Namespace. Temukan External IP untuk Port 80 dari istio-ingressgateway.

  2. Buka http://<ingress-gateway-ip>/productpage di browser dan refresh halaman sekitar 10 kali. Tanpa aturan routing, Istio mendistribusikan permintaan ke v1, v2, dan v3 layanan reviews secara merata (1:1:1). Setiap versi menampilkan rating bintang secara berbeda, sehingga tampilan halaman berubah setiap kali refresh:

    • v1 — Tidak ada rating bintang

    • v2 — Rating bintang hitam

    • v3 — Rating bintang merah

    Bookinfo traffic distribution without routing rules

Langkah 4: Konfigurasi routing traffic berbobot

Buat DestinationRule untuk menentukan subset berbasis versi, dan VirtualService untuk membagi traffic ke subset tersebut dengan rasio 10:40:50.

4a. Buat DestinationRule

Tentukan tiga subset (v1, v2, v3) untuk layanan reviews berdasarkan label version.

Opsi A: Terapkan YAML (disarankan)

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: reviews
  namespace: default
spec:
  host: reviews
  subsets:
    - name: v1
      labels:
        version: v1
    - name: v2
      labels:
        version: v2
    - name: v3
      labels:
        version: v3

Setiap subset mencocokkan pod dengan label version yang sesuai, mengelompokkan instans reviews berdasarkan versi.

Opsi B: Gunakan Konsol ASM

  1. Login ke Konsol ASM. Pilih Service Mesh > Mesh Management.

  2. Klik nama instans ASM. Pilih Traffic Management Center > DestinationRule. Klik Create.

  3. Konfigurasi pengaturan berikut, lalu klik Create.

    BagianParameterValue
    Basic InformationNamespacedefault
    NameTentukan nama
    Hostreviews
    Service Version (subset)Subset 1Name: v1, Label: version=v1
    Subset 2Name: v2, Label: version=v2
    Subset 3Name: v3, Label: version=v3

    Destination rule configuration

Untuk deskripsi lengkap setiap parameter, lihat Destination Rule.

4b. Buat VirtualService untuk routing berbobot

Arahkan 10% traffic ke v1, 40% ke v2, dan 50% ke v3 layanan reviews.

Opsi A: Terapkan YAML (disarankan)

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: reviews
  namespace: default
spec:
  hosts:
    - reviews.default.svc.cluster.local
  http:
    - name: route
      route:
        - destination:
            host: reviews
            subset: v1
          weight: 10
        - destination:
            host: reviews
            subset: v2
          weight: 40
        - destination:
            host: reviews
            subset: v3
          weight: 50

Nilai weight harus berjumlah 100. Sesuaikan persentase ini sesuai strategi peluncuran Anda. Misalnya, mulai dengan pembagian 90/10 untuk rilis canary yang konservatif, lalu secara bertahap alihkan lebih banyak traffic seiring meningkatnya kepercayaan.

Opsi B: Gunakan Konsol ASM

  1. Login ke Konsol ASM. Pilih Service Mesh > Mesh Management.

  2. Klik nama instans ASM. Pilih Traffic Management Center > VirtualService. Klik Create.

  3. Konfigurasi pengaturan berikut, lalu klik Create.

    BagianParameterValue
    Basic InformationNamespacedefault
    NameTentukan nama
    GatewaysApply To All SidecarsAktifkan
    HostsPilih reviews di namespace default
    HTTP RouteNameTentukan nama entri rute
    Route destination 1Host: reviews, Subset: v1, Weight: 10
    Route destination 2Host: reviews, Subset: v2, Weight: 40
    Route destination 3Host: reviews, Subset: v3, Weight: 50

    VirtualService weighted routing configuration

Langkah 5: Verifikasi pembagian traffic

Buka http://<ingress-gateway-ip>/productpage di browser dan refresh halaman sekitar 10 kali.

Setiap versi layanan reviews menampilkan rating bintang secara berbeda:

VersiRating bintangFrekuensi yang diharapkan (dari 10 kali refresh)
v1Tidak ada bintang~1 kali
v2Bintang hitam~4 kali
v3Bintang merah~5 kali

Jika distribusi kira-kira sesuai rasio 1:4:5, maka routing berbobot bekerja dengan benar. Distribusi ini bersifat probabilistik, sehingga penyimpangan kecil merupakan hal yang wajar.

Langkah selanjutnya

  • Sesuaikan bobot traffic untuk mengalihkan lebih banyak traffic ke versi tertentu sebagai bagian dari rilis canary

  • Tambahkan aturan routing berbasis header untuk mengarahkan pengguna tertentu ke versi spesifik guna Pengujian A/B

  • Konfigurasi kebijakan retry dan timeout bersamaan dengan routing traffic untuk meningkatkan ketahanan