Jalur lalu lintas dalam mode ketat memungkinkan Anda mengisolasi versi atau fitur tertentu dari aplikasi ke dalam lingkungan runtime terpisah. Pendekatan ini berguna untuk rilis canary di semua layanan dalam rantai panggilan atau untuk mengisolasi versi aplikasi. Dengan hanya merutekan lalu lintas yang memenuhi aturan tertentu ke versi layanan baru, pendekatan ini memastikan bahwa rilis tersebut andal dan terkendali.
Prasyarat
Sebuah instance Service Mesh (ASM) Edisi Enterprise atau Edisi Ultimate telah dibuat dengan versi 1.18.2.111 atau lebih baru. Untuk informasi lebih lanjut, lihat Buat instance ASM atau Tingkatkan instance ASM.
CatatanJika versi instance ASM Anda adalah 1.17.2.22 atau lebih baru tetapi lebih awal dari 1.18.2.111, lihat Gunakan jalur untuk mengelola lalu lintas untuk informasi tentang manajemen lalu lintas.
Sebuah gateway ingress ASM bernama ingressgateway telah dibuat. Untuk informasi lebih lanjut, lihat Buat gateway ingress.
Sebuah gateway Istio bernama ingressgateway telah dibuat di namespace istio-system. Untuk informasi lebih lanjut, lihat Kelola gateway Istio.
Contoh
Dalam contoh ini, tiga jalur (s1, s2, dan s3) dibuat dan mewakili tiga versi layanan mocka, mockb, dan mockc.
Langkah 1: Sebarkan layanan contoh
Aktifkan injeksi proxy sidecar otomatis untuk namespace default. Untuk informasi lebih lanjut tentang prosedurnya, lihat Aktifkan injeksi proxy sidecar otomatis dalam topik Kelola namespace global.
Untuk informasi lebih lanjut tentang injeksi proxy sidecar otomatis, lihat Konfigurasikan kebijakan injeksi proxy sidecar.
Jalankan perintah berikut untuk menyebarkan layanan contoh di kluster Container Service for Kubernetes (ACK):
kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v1/mock-tracing-v1.yaml kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v2/mock-tracing-v2.yaml kubectl apply -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/asm-labs/swimlane/v3/mock-tracing-v3.yaml
Langkah 2: Buat grup jalur dan jalur
Buat grup jalur.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
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.
Istio gateway for an ingress gateway
Pilih ingressgateway.
Lane Mode
Pilih Strict Mode.
Swimlane Services
Pilih kluster ACK tempat Anda menyebarkan layanan contoh dari daftar drop-down Kluster Kubernetes dan pilih default dari daftar drop-down Namespace. Kemudian, pilih mocka, mockb, dan mockc dalam daftar layanan, dan klik ikon
untuk menambahkan layanan ke bagian selected.
Buat jalur s1, s2, dan s3 dan ikat jalur s1 ke versi 1 (v1) dari layanan contoh, jalur s2 ke versi 2 (v2) dari layanan contoh, dan jalur s3 ke versi 3 (v3) dari layanan contoh.
Di bagian Traffic Rule Definition halaman Traffic Lane, klik Create swimlanes.
Di kotak dialog Create swimlanes, atur parameter dan klik OK.
Parameter
Deskripsi
Swimlane Name
Beri nama tiga jalur sebagai s1, s2, dan s3 secara berturut-turut.
Configure Service Tag
Label Key: Pilih ASM_TRAFFIC_TAG.
Label Value: Pilih v1 untuk jalur s1, v2 untuk jalur s2, dan v3 untuk jalur s3.
Gambar berikut menunjukkan konfigurasi jalur s1.

Setelah tiga jalur dibuat, Anda dapat melihatnya di bagian Definisi Aturan Lalu Lintas, seperti yang ditunjukkan pada gambar berikut.

Aturan tujuan dan layanan virtual secara otomatis dibuat untuk setiap layanan di jalur. Anda dapat memilih atau VirtualService di panel navigasi kiri untuk melihat aturan tujuan atau layanan virtual. Misalnya, aturan tujuan dan layanan virtual berikut secara otomatis dibuat untuk layanan mocka.
Buat aturan pengarahan lalu lintas untuk setiap jalur.
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.
Di kotak dialog Add drainage rule, atur parameter dan klik OK.
Contoh ini mengasumsikan bahwa jalur permintaan masuk dari semua layanan di jalur adalah
/mock, dan aturan pengarahan lalu lintas yang sama dikonfigurasikan untuk setiap jalur.Parameter
Deskripsi
Ingress service
Pilih mocka.default.svc.cluster.local.
Ingress traffic rules
Atur parameter Name menjadi r1 dan parameter realm name menjadi *.
Matching request URI
Atur parameter Method menjadi Exact dan parameter Content menjadi /mock.
Add Header Matching Rule
Klik Add Header Matching Rule. Atur Name menjadi x-asm-prefer-tag, Method menjadi Exact, dan Content menjadi s1, s2, dan s3 secara berturut-turut.
Gambar berikut menunjukkan konfigurasi aturan pengarahan lalu lintas untuk jalur s1.

Setelah aturan pengarahan lalu lintas dibuat, Anda dapat melihatnya di bagian Definisi Aturan Lalu Lintas, seperti yang ditunjukkan pada gambar berikut.

Setelah aturan pengarahan lalu lintas dibuat, layanan virtual secara otomatis dibuat untuk jalur. Misalnya, layanan virtual berikut dibuat untuk jalur s1.
Langkah 3: Verifikasi bahwa fitur rilis canary ujung ke ujung berfungsi
Dapatkan alamat IP publik dari gateway ingress ASM. Untuk informasi lebih lanjut, lihat Langkah 2: Dapatkan alamat IP dari gateway ingress ASM.
Jalankan perintah berikut untuk mengonfigurasi variabel lingkungan.
xxx.xxx.xxx.xxxadalah alamat IP yang diperoleh di sublangkah 1.export ASM_GATEWAY_IP=xxx.xxx.xxx.xxxVerifikasi bahwa fitur rilis canary ujung ke ujung berfungsi.
Jalankan perintah berikut untuk mengakses layanan di jalur s1.
Dalam perintah ini, nilai dari
x-asm-prefer-tagadalahs1, yang merupakan nama jalur s1 yang Anda konfigurasikan saat membuat jalur s1 di sublangkah 2 dari Langkah 2.for i in {1..100}; do curl -H 'x-asm-prefer-tag: s1' 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 menunjukkan bahwa lalu lintas yang ditentukan oleh header HTTP
x-asm-prefer-tag: s1mengalir ke layanan terkait di jalur s1. Ini sesuai dengan harapan.Jalankan perintah berikut untuk mengakses layanan di jalur s2.
Dalam perintah ini, nilai dari
x-asm-prefer-tagadalahs2, yang merupakan nama jalur s2 yang Anda konfigurasikan saat membuat jalur s2 di sublangkah 2 dari 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)Output menunjukkan bahwa lalu lintas yang ditentukan oleh header HTTP
x-asm-prefer-tag: s2mengalir ke layanan terkait di jalur s2. Ini sesuai dengan harapan.Jalankan perintah berikut untuk mengakses layanan di jalur s3.
Dalam perintah ini, nilai dari
x-asm-prefer-tagadalahs3, yang merupakan nama jalur s3 yang Anda konfigurasikan saat membuat jalur s3 di sublangkah 2 dari 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)Output menunjukkan bahwa lalu lintas yang ditentukan oleh header HTTP
x-asm-prefer-tag: s3mengalir ke layanan terkait di jalur s3. Ini sesuai dengan harapan.
Gunakan layanan virtual kustom untuk merutekan lalu lintas untuk jalur lalu lintas dalam mode ketat
Konsol ASM memiliki fitur pembuatan aturan pengarahan permintaan bawaan. Setelah Anda membuat layanan virtual di gateway ingress ASM yang sesuai dengan jalur lalu lintas, aturan pengarahan permintaan dibuat untuk jalur lalu lintas. Dengan cara ini, gateway ingress ASM dapat meneruskan permintaan ke jalur lalu lintas yang berbeda.
Aturan pengarahan permintaan jalur lalu lintas mencakup aturan pencocokan untuk header permintaan dan jalur permintaan. Anda dapat membuat layanan virtual kustom untuk mendefinisikan aturan pencocokan yang lebih kompleks atau membuat rute permintaan kustom.
Saat menggunakan layanan virtual kustom untuk merutekan lalu lintas jalur lalu lintas, kami sarankan agar Anda tidak menggunakan fitur pembuatan aturan pengarahan permintaan bawaan untuk membuat aturan pengarahan permintaan untuk jalur lalu lintas. Hal ini karena layanan virtual kustom dapat bertentangan dengan aturan pengarahan permintaan yang dibuat menggunakan fitur pembuatan aturan pengarahan permintaan bawaan. Akibatnya, distribusi lalu lintas yang abnormal atau tidak terduga dapat terjadi.
Buat layanan virtual kustom di gateway ingress ASM
Skenario dalam topik ini adalah contoh. Di sublangkah 3 Buat aturan pengarahan lalu lintas untuk tiga jalur dari Langkah 2, ubah langkah pembuatan aturan pengarahan lalu lintas menjadi langkah pembuatan layanan virtual menggunakan konten berikut. Untuk informasi lebih lanjut, lihat Kelola layanan virtual.
apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: swimlane-ingress-vs-custom namespace: istio-system spec: gateways: - istio-system/ingressgateway hosts: - '*' http: - match: # Aturan pencocokan ini secara tepat mencocokkan header permintaan env: dev. - headers: env: exact: dev name: dev-route route: - destination: host: mocka.default.svc.cluster.local # Layanan tujuan untuk penerusan lalu lintas. subset: s2 # Nama jalur lalu lintas. weight: 50 - destination: host: mocka.default.svc.cluster.local # Layanan tujuan untuk penerusan lalu lintas. subset: s3 # Nama jalur lalu lintas. weight: 50 - name: base-route route: - destination: host: mocka.default.svc.cluster.local # Layanan tujuan untuk penerusan lalu lintas. subset: s1 # Nama jalur lalu lintas.Jalankan perintah di Langkah 3: Verifikasi bahwa fitur rilis canary ujung ke ujung berfungsi. Output berikut dihasilkan saat Anda mengakses layanan di jalur s1, s2, dan s3:
-> mocka(version: v1, ip: 192.168.0.50)-> mockb(version: v1, ip: 192.168.0.46)-> mockc(version: v1, ip: 192.168.0.48)Jalankan perintah berikut untuk memeriksa hasil saat Anda mengakses layanan di jalur s1 dengan header permintaan
env: dev:for i in {1..100}; do curl -H 'x-asm-prefer-tag: s1' -H 'env: dev' http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;Output yang diharapkan:
Output menunjukkan bahwa ketika Anda mengakses layanan di jalur s1 dengan header permintaan
env: dev, jejak yang berisi versi V2 dari layanan dan jejak yang berisi versi V3 dari layanan terlibat, dan rasio permintaan dalam dua jenis jejak tersebut sekitar 50:50. Artinya, permintaan dengan header permintaanenv: devdirutekan ke jalur s2 dan s3 dengan rasio 50:50, dan permintaan lainnya diteruskan ke jalur s1.
Layanan virtual sebelumnya menentukan aturan pengarahan kustom di gateway ASM untuk meneruskan lalu lintas ke jalur lalu lintas yang berbeda. Saat membuat layanan virtual kustom untuk merutekan permintaan dalam mode ketat, Anda hanya perlu mengatur bidang route.destination.subset ke nama jalur lalu lintas. Setelah permintaan dirutekan ke jalur lalu lintas, permintaan lain dalam jejak akan ditransmisikan di jalur tersebut.
Buat layanan virtual kustom pada proxy sidecar
Selain membuat layanan virtual kustom di gateway ingress ASM, Anda juga dapat menentukan aturan pengarahan permintaan untuk aplikasi dalam kluster untuk mengakses layanan di jalur lalu lintas dengan membuat layanan virtual pada semua proxy sidecar. Berbeda dengan layanan virtual kustom di gateway ingress ASM, bidang gateway tidak diperlukan untuk layanan virtual pada proxy sidecar. Anda perlu menentukan domain kluster layanan mocka di bidang hosts. Contoh file YAML:
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: swimlane-ingress-vs-custom
namespace: istio-system
spec:
hosts:
- mocka.default.svc.cluster.local
http:
- match: # Aturan pencocokan ini secara tepat mencocokkan header permintaan env: dev.
- headers:
env:
exact: dev
name: dev-route
route:
- destination:
host: mocka.default.svc.cluster.local # Layanan tujuan untuk penerusan lalu lintas.
subset: s2 # Nama jalur lalu lintas.
weight: 50
- destination:
host: mocka.default.svc.cluster.local # Layanan tujuan untuk penerusan lalu lintas.
subset: s3 # Nama jalur lalu lintas.
weight: 50
- name: base-route
route:
- destination:
host: mocka.default.svc.cluster.local # Layanan tujuan untuk penerusan lalu lintas.
subset: s1 # Nama jalur lalu lintas.
Jalankan perintah berikut untuk mengakses layanan mocka tanpa header permintaan
env: devsetelah Anda membuat layanan virtual kustom pada proxy sidecar:kubectl exec -it deploy/sleep -c sleep -- sh -c 'for i in $(seq 1 100); do curl http://mocka:8000; echo ""; sleep 1; done;'Output yang diharapkan:
-> mocka(version: v1, ip: 192.168.0.50)-> mockb(version: v1, ip: 192.168.0.46)-> mockc(version: v1, ip: 192.168.0.48)Output menunjukkan bahwa ketika Anda mengakses layanan di semua jalur tanpa header permintaan
env: dev, jejak yang berisi versi V1 dari layanan selalu terlibat. Ini menunjukkan bahwa semua lalu lintas dikirim ke jalur s1.Jalankan perintah berikut untuk mengakses layanan mocka dengan header permintaan
env: devsetelah Anda membuat layanan virtual kustom pada proxy sidecar:kubectl exec -it deploy/sleep -c sleep -- sh -c 'for i in $(seq 1 100); do curl -H "env: dev" http://mocka:8000; echo ""; sleep 1; done;'Output yang diharapkan:
Outputnya sama dengan yang ada di Buat layanan virtual kustom pada gateway ingress ASM. Saat Anda mengakses layanan mocka dengan header permintaan
env: dev, lalu lintas dirutekan ke jalur s2 dan s3 dengan rasio 50:50.
Mirip dengan Buat layanan virtual kustom pada gateway ingress ASM, ketika layanan dalam kluster memanggil layanan mocka dalam jalur lalu lintas, permintaan berikutnya dalam jejak selalu dirutekan ke jalur tersebut.
Referensi
Jalur lalu lintas memiliki dua mode: ketat dan permissif. Untuk informasi lebih lanjut tentang kedua mode dan perbedaan di antara mereka, lihat Ikhtisar jalur lalu lintas.
Jalur lalu lintas dalam mode permissif dapat digunakan dalam lebih banyak skenario saat menggunakan header permintaan pass-through ujung ke ujung. Misalnya, ketika hanya versi baru dari beberapa layanan dalam jejak yang dirilis, Anda dapat menggunakan jalur lalu lintas dalam mode permissif untuk menguji versi baru ini. Untuk informasi lebih lanjut, lihat Gunakan jalur lalu lintas dalam mode permissif untuk mengelola lalu lintas ujung ke ujung.
Anda dapat mengonfigurasi jalur lalu lintas dengan menentukan layanan virtual dan aturan tujuan. Anda juga dapat menggunakan aturan-aturan ini untuk mengonfigurasi pengalihan lalu lintas, yang merutekan lalu lintas ke versi dengan prioritas lebih rendah atau aplikasi dengan karakteristik tertentu ketika versi tujuan atau aplikasi tidak tersedia. Untuk informasi lebih lanjut, lihat Gunakan aturan lalu lintas untuk mengonfigurasi jalur lalu lintas dan pengalihan lalu lintas.