Service Mesh (ASM) memungkinkan Anda mengisolasi beberapa versi atau fitur aplikasi ke dalam lingkungan runtime independen—yang disebut jalur lalu lintas—dan mengarahkan lalu lintas permintaan yang sesuai ke versi atau fitur target dengan menentukan aturan jalur. Di lingkungan produksi, Anda dapat mengisolasi versi stabil dan versi rilis canary menggunakan jalur lalu lintas, lalu mengarahkan lalu lintas ke jalur berbeda berdasarkan identitas pengguna. Secara khusus, permintaan dari pengguna tertentu dapat diarahkan langsung ke versi canary untuk pengujian, sementara sebagian lalu lintas pengguna lainnya diarahkan ke versi canary berdasarkan bobot acak. Topik ini menjelaskan cara menggabungkan jalur lalu lintas dan penandaan hash untuk menerapkan pengujian canary berbasis pengguna.
Prasyarat
-
Anda telah membuat kluster dan menambahkannya ke instans ASM dengan versi 1.18 atau lebih baru. Untuk informasi selengkapnya, lihat Add a cluster to an ASM instance.
-
Buat kluster ACK yang dikelola atau kluster ACS. Untuk informasi selengkapnya, lihat Create an ACK managed cluster atau Create an ACS cluster.
-
Deploy gerbang masuk. Untuk informasi selengkapnya, lihat Create an ingress gateway.
Procedure
Contoh skenario ini membuat tiga aplikasi dengan rantai pemanggilan berikut:
-
mocka, dengan versi v1.
-
mockb, dengan versi v1.
-
mockc, dengan versi v1 dan v2.
Aplikasi menggunakan header permintaan x-user-id untuk mengidentifikasi identitas pengguna, dan header ini diteruskan melalui panggilan layanan. Skenario ini menunjukkan hal-hal berikut:
-
Ketika
x-user-id: jason, permintaan diarahkan ke versi baru. -
Untuk semua pengguna lainnya, sistem menghitung hash dari nilai
x-user-iddan mengarahkan persentase pengguna tertentu ke versi baru berdasarkan hasil hash tersebut.
Langkah 1: Deploy aplikasi sampel
-
Buat file bernama sample.yaml dengan konten berikut.
-
Menggunakan kubeconfig kluster bidang data Anda, jalankan perintah berikut untuk deploy aplikasi sampel.
kubectl apply -f sample.yaml
Langkah 2: Buat aturan gateway
Buat resource Gateway bernama ingressgateway di namespace istio-system menggunakan konfigurasi berikut. Untuk informasi selengkapnya, lihat Manage gateway rules.
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:
- '*'
Langkah 3: Buat grup jalur dan jalur
-
Buat grup jalur.
-
Masuk ke ASM console. Di panel navigasi sebelah kiri, pilih .
-
Di halaman Mesh Management, klik nama instans target. Di panel navigasi sebelah kiri, pilih .
-
Di halaman Traffic Lane, klik Create Swimlane Group. Di panel Create Swimlane Group, konfigurasikan pengaturan dan klik OK.
Configuration item
Description
Name of swim lane group
Diatur ke canary pada contoh ini.
Entrance gateway
Pilih ingressgateway.
Lane Mode
Pilih Permissive Mode.
Pass-through Mode of Trace Context
Pilih Pass Through Trace ID.
Trace ID Request Header
Diatur ke x-user-id pada contoh ini.
Routing Request Header
Tentukan header yang digunakan gateway untuk mengarahkan trafik ke jalur berbeda dan mempertahankan konteks jalur. Anda dapat menetapkan nilai apa pun. Pada contoh ini, atur ke x-asm-prefer-tag.
Swimlane Services
Pilih kluster Kubernetes target Anda dan namespace default. Di daftar di bawah, pilih layanan mocka, mockb, dan mockc, lalu klik ikon
untuk menambahkannya ke area selected.
-
-
Buat dua jalur, s1 dan s2, dan bind ke versi v1 dan v2 masing-masing.
-
Di halaman Traffic Lane, di bagian Traffic Rule Definition, klik Create swimlanes.
-
Di kotak dialog Create swimlanes, konfigurasikan pengaturan dan klik OK.
Configuration item
Description
Swimlane Name
Diatur ke s1 dan s2 masing-masing.
Configure Service Tag
Label Key: Pilih ASM_TRAFFIC_TAG.
Label Value: Pilih v1 untuk satu jalur dan v2 untuk jalur lainnya.
Add Service
Jalur s1: Pilih mocka(default), mockb(default), dan mockc(default).
Jalur s2: Pilih mockc(default).
Gambar berikut menunjukkan contoh pembuatan jalur s1:

Setelah kedua jalur dibuat, hasilnya akan tampak seperti ini:
CatatanSecara default, jalur pertama yang Anda buat dalam grup jalur menjadi jalur garis dasar. Anda dapat mengubah jalur garis dasar sehingga ketika lalu lintas menargetkan layanan yang tidak ada di jalur lain, permintaan akan dialihkan ke jalur garis dasar. Untuk informasi selengkapnya, lihat Change the baseline lane in loose mode.
-
-
Buat aturan routing untuk jalur-jalur tersebut.
-
Gunakan konfigurasi berikut untuk membuat aturan routing gateway untuk jalur-jalur tersebut. Aturan ini terdiri dari tiga bagian:
-
Permintaan dengan
x-user-id: jasondiarahkan ke jalur s2, dan sistem menambahkan headerx-asm-prefer-tag: s2untuk menandai permintaan tersebut untuk jalur s2. -
Permintaan dengan
x-asm-prefer-tag: s2diarahkan ke jalur s2. -
Permintaan dengan
x-asm-prefer-tag: s1diarahkan ke jalur s1.
-
-
Langkah 4: Deploy plugin penandaan hash
-
Buat file bernama wasm.yaml dengan konten berikut.
apiVersion: extensions.istio.io/v1alpha1 kind: WasmPlugin metadata: name: hash-tagging namespace: istio-system spec: imagePullPolicy: IfNotPresent selector: matchLabels: istio: ingressgateway url: registry-cn-hangzhou.ack.aliyuncs.com/acs/asm-wasm-hash-tagging:v1.22.6.2-g72656ba-aliyun phase: AUTHN pluginConfig: rules: - header: x-user-id modulo: 100 tagHeader: x-asm-prefer-tag policies: # Route 20% of user traffic to lane s2 - range: 20 tagValue: s2 # Route 80% of user traffic to lane s1 - range: 100 tagValue: s1 -
Menggunakan kubeconfig instans ASM Anda, jalankan perintah berikut untuk deploy plugin penandaan.
kubectl apply -f wasm.yaml
Langkah 5: Verifikasi pengaturan
-
Jalankan perintah berikut untuk menetapkan variabel lingkungan sementara untuk alamat gerbang masuk.
export GATEWAY_ADDRESS=`kubectl get svc -n istio-system | grep istio-ingressgateway | awk '{print $4}'` -
Jalankan perintah berikut untuk mengakses aplikasi sebagai Jason.
curl ${GATEWAY_ADDRESS} -H 'x-user-id: jason'Output yang diharapkan:
-> mocka(version: v1, ip: 10.0.0.15)-> mockb(version: v1, ip: 10.0.0.130)-> mockc(version: v2, ip: 10.0.0.133)%Permintaan diarahkan langsung ke versi v2 aplikasi mockc.
-
Anda dapat menjalankan perintah berikut untuk mengarahkan pengguna acak ke versi baru.
for i in 'bob' 'stacy' 'jessie' 'vance' 'jack'; do curl ${GATEWAY_ADDRESS} -H "x-user-id: $i";echo " user $i requested"; doneOutput yang diharapkan:
-> mocka(version: v1, ip: 10.0.0.15)-> mockb(version: v1, ip: 10.0.0.130)-> mockc(version: v1, ip: 10.0.0.131) user bob requested -> mocka(version: v1, ip: 10.0.0.15)-> mockb(version: v1, ip: 10.0.0.130)-> mockc(version: v1, ip: 10.0.0.131) user stacy requested -> mocka(version: v1, ip: 10.0.0.15)-> mockb(version: v1, ip: 10.0.0.130)-> mockc(version: v2, ip: 10.0.0.133) user jessie requested -> mocka(version: v1, ip: 10.0.0.15)-> mockb(version: v1, ip: 10.0.0.130)-> mockc(version: v1, ip: 10.0.0.131) user vance requested -> mocka(version: v1, ip: 10.0.0.15)-> mockb(version: v1, ip: 10.0.0.130)-> mockc(version: v2, ip: 10.0.0.133) user jack requestedPermintaan dari pengguna Jessie dan Jack diarahkan ke versi v2 mockc, sedangkan yang lainnya diarahkan ke versi v1.