Jalur lalu lintas Alibaba Cloud Service Mesh (ASM) mengisolasi versi aplikasi atau karakteristik lainnya ke dalam lingkungan runtime independen, mengarahkan lalu lintas yang sesuai ke versi target melalui aturan manajemen lalu lintas seperti VirtualService dan DestinationRule. Ketika versi target tidak tersedia, degradasi lalu lintas secara otomatis mengarahkan permintaan ke versi fallback yang ditentukan.
Prasyarat
-
Instans ASM Edisi Perusahaan atau Edisi Ultimate telah dibuat, dengan versi instans minimal 1.17. Untuk informasi selengkapnya, lihat Create an ASM instance atau Upgrade an ASM instance.
-
Kluster Kubernetes telah ditambahkan ke instans ASM. Untuk informasi selengkapnya, lihat Add a cluster to an ASM instance.
-
Gerbang masuk bernama ingressgateway telah dibuat di ASM. Untuk informasi selengkapnya, lihat Create an ingress gateway.
Langkah 1: Sebarkan layanan contoh
-
Aktifkan injeksi sidecar otomatis untuk namespace default. Untuk informasi selengkapnya, lihat Enable automatic sidecar proxy injection.
Untuk informasi lebih lanjut tentang injeksi sidecar otomatis, lihat Configure sidecar injection policies.
-
Gunakan file kubeconfig kluster bidang data dan jalankan perintah berikut untuk menyebarkan layanan contoh.
Layanan contoh mencakup mocka, mockb, dan mockc. Setiap layanan memiliki tiga versi: v1, v2, dan v3.
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 aturan lalu lintas untuk menerapkan jalur lalu lintas
Selesaikan sub-tugas berikut untuk membuat aturan DestinationRule, VirtualService, dan routing gerbang yang mendefinisikan jalur lalu lintas.
Buat aturan lalu lintas DestinationRule
Buat DestinationRule untuk setiap layanan guna mendefinisikan subset versi.
Gunakan konten berikut untuk membuat file dr-mock.yaml.
File berikut membagi masing-masing layanan mocka, mockb, dan mockc menjadi tiga subset: v1, v2, dan v3.
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: mocka
namespace: istio-system
spec:
host: mocka.default.svc.cluster.local
subsets:
- labels:
version: v1
name: v1
- labels:
version: v2
name: v2
- labels:
version: v3
name: v3
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: mockb
namespace: istio-system
spec:
host: mockb.default.svc.cluster.local
subsets:
- labels:
version: v1
name: v1
- labels:
version: v2
name: v2
- labels:
version: v3
name: v3
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: mockc
namespace: istio-system
spec:
host: mockc.default.svc.cluster.local
subsets:
- labels:
version: v1
name: v1
- labels:
version: v2
name: v2
- labels:
version: v3
name: v3
Gunakan file kubeconfig instans ASM dan jalankan perintah berikut untuk menerapkan aturan lalu lintas DestinationRule.
kubectl apply -f dr-mock.yaml
Buat aturan lalu lintas VirtualService
Buat VirtualService untuk setiap layanan internal guna mendefinisikan routing berbasis versi dalam jalur lalu lintas.
Gunakan konten berikut untuk membuat file vs-mock.yaml.
File berikut membuat jalur lalu lintas untuk rantai pemanggilan layanan mocka→mockb→mockc. Setelah jalur lalu lintas dibuat, permintaan yang dikirim oleh layanan dengan satu versi hanya dapat dikirim ke layanan dengan versi yang sama.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: mockb
namespace: istio-system
spec:
hosts:
- mockb.default.svc.cluster.local
http:
- match:
- sourceLabels:
version: v1
route:
- destination:
host: mockb.default.svc.cluster.local
subset: v1
- match:
- sourceLabels:
version: v2
route:
- destination:
host: mockb.default.svc.cluster.local
subset: v2
- match:
- sourceLabels:
version: v3
route:
- destination:
host: mockb.default.svc.cluster.local
subset: v3
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: mockc
namespace: istio-system
spec:
hosts:
- mockc.default.svc.cluster.local
http:
- match:
- sourceLabels:
version: v1
route:
- destination:
host: mockc.default.svc.cluster.local
subset: v1
- match:
- sourceLabels:
version: v2
route:
- destination:
host: mockc.default.svc.cluster.local
subset: v2
- match:
- sourceLabels:
version: v3
route:
- destination:
host: mockc.default.svc.cluster.local
subset: v3
Gunakan file kubeconfig instans ASM dan jalankan perintah berikut untuk menerapkan aturan lalu lintas VirtualService.
kubectl apply -f vs-mock.yaml
Buat aturan routing lalu lintas gerbang
Buat aturan routing gerbang untuk mengarahkan permintaan eksternal ke dalam jalur lalu lintas berdasarkan Header x-asm-prefer-tag.
Gunakan konten berikut untuk membuat file gw-mock.yaml.
File berikut membuat aturan routing lalu lintas gerbang untuk rantai pemanggilan layanan mocka→mockb→mockc. Aturan ini mencocokkan Header x-asm-prefer-tag pada permintaan yang dikirim ke gerbang dan mengarahkan permintaan tersebut ke versi v1, v2, atau v3 layanan mocka berdasarkan nilai header tersebut.
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:
- '*'
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: ingressgateway
namespace: istio-system
spec:
gateways:
- istio-system/ingressgateway
hosts:
- '*'
http:
- match:
- headers:
x-asm-prefer-tag:
exact: v1
uri:
exact: /mock
route:
- destination:
host: mocka.default.svc.cluster.local
subset: v1
- match:
- headers:
x-asm-prefer-tag:
exact: v2
uri:
exact: /mock
route:
- destination:
host: mocka.default.svc.cluster.local
subset: v2
- match:
- headers:
x-asm-prefer-tag:
exact: v3
uri:
exact: /mock
route:
- destination:
host: mocka.default.svc.cluster.local
subset: v3
Gunakan file kubeconfig instans ASM dan jalankan perintah berikut untuk menerapkan aturan routing lalu lintas gerbang.
kubectl apply -f gw-mock.yaml
Langkah 3: Verifikasi bahwa jalur lalu lintas berlaku
-
Dapatkan Alamat IP publik gerbang ASM. Untuk informasi selengkapnya, lihat Obtain the address of an ASM gateway.
-
Jalankan perintah berikut untuk mengatur variabel lingkungan.
xxx.xxx.xxx.xxxadalah alamat IP yang diperoleh pada langkah sebelumnya.
export ASM_GATEWAY_IP=xxx.xxx.xxx.xxx
-
Verifikasi bahwa jalur lalu lintas berlaku.
-
Jalankan perintah berikut untuk memeriksa tanggapan dari jalur lalu lintas v1.
for i in {1..100}; do curl -H 'x-asm-prefer-tag: v1' 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 yang diharapkan menunjukkan bahwa lalu lintas dengan Header HTTP x-asm-prefer-tag: v1 dialihkan ke layanan versi v1.
-
Jalankan perintah berikut untuk memeriksa tanggapan dari jalur lalu lintas v2.
for i in {1..100}; do curl -H 'x-asm-prefer-tag: v2' 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 yang diharapkan menunjukkan bahwa lalu lintas dengan Header HTTP x-asm-prefer-tag: v2 dialihkan ke layanan versi v2.
-
Jalankan perintah berikut untuk memeriksa tanggapan dari jalur lalu lintas v3.
for i in {1..100}; do curl -H 'x-asm-prefer-tag: v3' 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 yang diharapkan menunjukkan bahwa lalu lintas dengan Header HTTP x-asm-prefer-tag: v3 dialihkan ke layanan versi v3.
(Opsional) Langkah 4: Konfigurasikan degradasi lalu lintas dalam jalur lalu lintas
-
Gunakan konten berikut untuk memodifikasi file vs-mock.yaml.
File berikut membuat jalur lalu lintas untuk rantai pemanggilan layanan mocka→mockb→mockc. Selain itu, ketika versi v2 atau v3 dari mockb atau mockc tidak tersedia, permintaan akan dialihkan ke rantai pemanggilan versi v1 layanan tersebut.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: mockb
namespace: istio-system
spec:
hosts:
- mockb.default.svc.cluster.local
http:
- match:
- sourceLabels:
version: v1
route:
- destination:
host: mockb.default.svc.cluster.local
subset: v1
- match:
- sourceLabels:
version: v2
route:
- destination:
host: mockb.default.svc.cluster.local
subset: v2
fallback:
target:
host: mockb.default.svc.cluster.local
subset: v1
- match:
- sourceLabels:
version: v3
route:
- destination:
host: mockb.default.svc.cluster.local
subset: v3
fallback:
target:
host: mockb.default.svc.cluster.local
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: mockc
namespace: istio-system
spec:
hosts:
- mockc.default.svc.cluster.local
http:
- match:
- sourceLabels:
version: v1
route:
- destination:
host: mockc.default.svc.cluster.local
subset: v1
- match:
- sourceLabels:
version: v2
route:
- destination:
host: mockc.default.svc.cluster.local
subset: v2
fallback:
target:
host: mockc.default.svc.cluster.local
subset: v1
- match:
- sourceLabels:
version: v3
route:
- destination:
host: mockc.default.svc.cluster.local
subset: v3
fallback:
target:
host: mockc.default.svc.cluster.local
subset: v1
-
Gunakan file kubeconfig instans ASM dan jalankan perintah berikut untuk memodifikasi aturan lalu lintas VirtualService yang ada serta menerapkan konfigurasi degradasi lalu lintas.
kubectl apply -f vs-mock.yaml
(Opsional) Langkah 5: Verifikasi bahwa degradasi lalu lintas berlaku
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Di halaman Deployments, temukan workload mockb-v2 dan klik Scale di kolom Actions. Di kotak dialog Scale, atur Desired Pod Count menjadi 1 dan klik OK. Di kotak dialog Confirm, klik OK untuk mensimulasikan kegagalan layanan mockb versi v2.
-
Jalankan perintah berikut untuk memeriksa tanggapan dari jalur lalu lintas v2.
for i in {1..100}; do curl -H 'x-asm-prefer-tag: v2' http://${ASM_GATEWAY_IP}/mock ; echo ''; sleep 1; done;
Output yang diharapkan:
-> mocka(version: v2, ip: 172.17.0.9)-> mockb(version: v1, ip: 172.17.0.126)-> mockc(version: v1, ip: 172.17.0.128)
Output yang diharapkan menunjukkan bahwa lalu lintas dengan Header HTTP x-asm-prefer-tag: v2 dialihkan ke layanan versi v2. Saat lalu lintas melewati layanan mockb versi v2, permintaan kemudian dialihkan ke rantai pemanggilan versi v1 layanan tersebut karena layanan mockb versi v2 mengalami kegagalan. Hal ini menerapkan degradasi lalu lintas.