Service Mesh (ASM) memungkinkan Anda mengisolasi versi atau fitur tertentu dari aplikasi ke dalam lingkungan runtime independen (dikenal sebagai swimlane). Anda dapat mengonfigurasi aturan swimlane untuk merutekan permintaan yang memenuhi aturan tersebut ke versi atau fitur tujuan dari aplikasi. Dalam lingkungan pengembangan, pengembang dapat mengisolasi versi stabil dan versi canary dengan menetapkan swimlane serta merutekan pengguna ke swimlane yang berbeda. Dalam kasus ini, Anda dapat mengarahkan proporsi pengguna tertentu ke versi untuk menguji fungsionalitas, sementara pengguna lainnya dirutekan secara acak ke versi rilis canary berdasarkan aturan routing berbasis bobot. Topik ini menjelaskan cara mengonfigurasi swimlane dan Plugin penandaan Hash untuk melaksanakan rilis canary berdasarkan segmen pengguna.
Prasyarat
Sebuah klaster telah dibuat dan ditambahkan ke instance ASM versi 1.18 atau lebih baru. Untuk informasi lebih lanjut, lihat Tambahkan klaster ke instance ASM.
Sebuah klaster Kubernetes dikelola atau klaster ACS telah dibuat. Untuk informasi lebih lanjut, lihat Buat klaster ACK yang dikelola atau Buat klaster ACS.
Sebuah gateway ingress telah diterapkan. Untuk informasi lebih lanjut, lihat Buat gateway ingress.
Kebijakan injeksi Sidecar telah dikonfigurasi.
Prosedur
Dalam contoh ini, tiga aplikasi dibuat, dan rantai panggilan ditunjukkan pada gambar berikut.
mocka dalam versi 1.
mockb dalam versi 1.
mockc dalam versi 1 dan 2.
Dalam contoh ini, aplikasi mengidentifikasi identitas pengguna berdasarkan header permintaan x-user-id, dan header tersebut dilewatkan di antara aplikasi. Aturan routing lalu lintas adalah sebagai berikut:
Permintaan pengguna yang berisi header
x-user-id: jasondirutekan ke versi baru aplikasi.Proporsi tertentu dari permintaan pengguna yang berisi header
x-user-iddirutekan ke versi baru aplikasi berdasarkan nilai Hash.
Langkah 1: Terapkan aplikasi
Buat file sample.yaml dengan konten berikut.
Jalankan perintah berikut untuk menerapkan aplikasi menggunakan file kubeconfig klaster pada bidang data plane.
kubectl apply -f sample.yaml
Langkah 2: Buat aturan gateway
Jalankan perintah berikut untuk membuat gateway Istio bernama ingressgateway di namespace Istio-system. Untuk informasi lebih lanjut, lihat Kelola gateway Istio.
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 Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik instance ASM target. Di panel navigasi kiri, pilih .
Di halaman Traffic Swimlane, klik Create Swimlane Group. Konfigurasikan pengaturan terkait di panel Create Swimlane Group, dan klik OK.
Parameter
Deskripsi
Name of Swim lane Group
Dalam contoh ini, masukkan canary.
Ingress Type
Pilih ingressgateway.
Lane Mode
Pilih Loose Mode.
Pass-through Mode of Trace Context
Pilih Pass-through Trace Id.
Trace ID Request Header
Dalam contoh ini, atur menjadi x-user-id.
Request Routing Header
Aktifkan gateway untuk merutekan trafik ke jalur yang berbeda berdasarkan isi permintaan dan lewatkan header dalam konteks jalur. Parameter ini ditentukan oleh pengguna. Dalam contoh ini, masukkan x-asm-prefer-tag.
Swimlane Service
Pilih klaster target di bidang klaster Kubernetes dan pilih default di bidang namespace. Pilih layanan mocka, mockb, dan mockc dalam daftar di bawah, dan klik ikon
untuk menambahkan layanan target ke panel Selected.
Buat swimlane s1 dan s2, dan hubungkan mereka dengan versi 1 dan 2 masing-masing.
Di halaman Traffic Swimlane, klik Create Swimlanes di panel Traffic Rule Definition.
Di kotak dialog Create Swimlanes , konfigurasikan pengaturan terkait, lalu klik OK.
Parameter
Deskripsi
Swimlane Name
Masukkan s1 dan s2 masing-masing.
Configure Service Tag
Label Key: Pilih ASM_TRAFFIC_TAG
Label Value: Pilih v1 dan v2 untuk dua jalur masing-masing.
Add Service
Jalur s1: Pilih mocka(default), mockb(default), mockc(default).
Jalur s2: Pilih mockc(default).
Gambar berikut menunjukkan contoh konfigurasi swimlane s1:

Dua swimlane tersebut adalah sebagai berikut:
CatatanSecara default, jalur pertama yang Anda buat dalam grup jalur berfungsi sebagai jalur dasar. Anda diizinkan untuk memodifikasi layanan dalam jalur dasar ini. Saat permintaan dikirim ke layanan yang tidak ada di jalur lain, permintaan tersebut diteruskan ke jalur dasar melalui mekanisme fallback. Untuk informasi lebih lanjut, lihat Modifikasi jalur dasar dalam mode longgar.
Buat aturan routing permintaan untuk swimlane.
Buat aturan routing permintaan untuk swimlane dengan konten berikut. Aturannya adalah sebagai berikut:
Permintaan yang berisi header
x-user-id: jasondirutekan ke swimlane s2. Headerx-asm-prefer-tag: s2yang disediakan untuk permintaan menunjukkan bahwa permintaan tersebut dirutekan ke swimlane s2.Permintaan yang berisi header
x-asm-prefer-tag: s2dirutekan ke swimlane s2.Permintaan yang berisi header
x-asm-prefer-tag: s1dirutekan ke swimlane s1.
Langkah 4: Terapkan Plugin penandaan Hash
Buat file 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: # 20% dari permintaan pengguna dirutekan ke swimlane s2 - range: 20 tagValue: s2 # 80% dari permintaan pengguna dirutekan ke swimlane s1 - range: 100 tagValue: s1Jalankan perintah berikut untuk menerapkan Plugin penandaan Hash menggunakan file kubeconfig instance ASM.
kubectl apply -f wasm.yaml
Langkah 5: Verifikasi aturan routing
Jalankan perintah berikut untuk mengonfigurasi variabel lingkungan sementara untuk alamat gateway ingress.
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)%Hasilnya menunjukkan bahwa permintaan langsung dirutekan ke versi 2 aplikasi mockc.
Jalankan perintah berikut untuk merutekan pengguna tertentu 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 requestedHasilnya menunjukkan bahwa permintaan dari pengguna Jessie dan Jack langsung dirutekan ke versi 2 aplikasi mockc, sedangkan permintaan dari pengguna lain dirutekan ke versi 1.