Service Mesh (ASM) memisahkan routing traffic dari penskalaan pod, memberikan Anda kendali berbasis persentase atas distribusi traffic ke setiap versi aplikasi—terlepas dari jumlah replika.
Panduan ini menjelaskan tiga strategi rilis menggunakan layanan virtual dan aturan tujuan, dengan aplikasi contoh Bookinfo:
Rilis biru-hijau — alihkan seluruh traffic dari satu versi ke versi lain dalam satu langkah.
Rilis canary berbasis bobot — bagi traffic antara dua versi berdasarkan persentase.
Rilis canary berbasis header — arahkan pengguna tertentu ke versi baru berdasarkan header permintaan.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Instans ASM. Untuk informasi lebih lanjut, lihat Create an ASM instance
Setidaknya satu kluster Container Service for Kubernetes (ACK) yang ditambahkan ke instans ASM. Untuk informasi lebih lanjut, lihat Add a cluster to an ASM instance
Aplikasi Bookinfo yang dideploy di kluster ACK. Untuk informasi lebih lanjut, lihat Deploy an application in an ASM instance
Gerbang masuk yang dideploy untuk kluster ACK. Untuk informasi lebih lanjut, lihat Create an ingress gateway service
Cara kerja
Aturan tujuan mendefinisikan subset bernama yang dipetakan ke label versi pada pod Anda. Layanan virtual mereferensikan subset tersebut untuk mengontrol versi mana yang menerima traffic dan dalam proporsi berapa.
Panduan ini mengikuti progresi realistis:
Mendefinisikan subset untuk semua versi layanan mikro Bookinfo (aturan tujuan).
Mengarahkan seluruh traffic ke v1 (garis dasar).
Rilis biru-hijau: alihkan layanan reviews dari v1 ke v2.
Rilis canary berbasis bobot: bagi traffic antara reviews v2 dan v3.
Rilis canary berbasis header: arahkan pengguna tertentu ke reviews v3.
Langkah 1: Buat aturan tujuan
Definisikan subset untuk setiap layanan mikro Bookinfo agar layanan virtual dapat mereferensikannya berdasarkan nama. Untuk informasi lebih lanjut, lihat Manage destination rules.
Terapkan aturan tujuan berikut ke instans ASM Anda:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: productpage
spec:
host: productpage
subsets:
- name: v1
labels:
version: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v3
labels:
version: v3
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: ratings
spec:
host: ratings
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v2-mysql
labels:
version: v2-mysql
- name: v2-mysql-vm
labels:
version: v2-mysql-vm
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: details
spec:
host: details
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2Verifikasi bahwa aturan tujuan telah dibuat:
kubectl get destinationrules -o nameOutput yang diharapkan:
destinationrule.networking.istio.io/productpage
destinationrule.networking.istio.io/reviews
destinationrule.networking.istio.io/ratings
destinationrule.networking.istio.io/detailsLangkah 2: Arahkan seluruh traffic ke v1 (garis dasar)
Buat layanan virtual untuk mengarahkan seluruh traffic ke subset v1 dari setiap layanan mikro Bookinfo. Hal ini menetapkan garis dasar yang stabil sebelum Anda mengalihkan traffic. Untuk informasi lebih lanjut, lihat Manage virtual services.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: productpage
spec:
hosts:
- productpage
http:
- route:
- destination:
host: productpage
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- route:
- destination:
host: ratings
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: details
spec:
hosts:
- details
http:
- route:
- destination:
host: details
subset: v1Verifikasi garis dasar
Refresh halaman produk Bookinfo di browser Anda. Bagian ulasan ditampilkan tanpa peringkat bintang, karena reviews v1 tidak memanggil layanan ratings.
Konfirmasi aturan routing:
kubectl get virtualservice reviews -o yamlOutput harus menunjukkan subset: v1 sebagai satu-satunya tujuan untuk layanan reviews.
Pada tahap ini, pod untuk reviews v2 dan v3 sedang berjalan tetapi tidak menerima traffic.
Langkah 3: Rilis biru-hijau — alihkan ke reviews v2
Rilis biru-hijau mengalihkan seluruh traffic dari satu versi ke versi lain dalam satu langkah. Perbarui layanan virtual reviews untuk mengarahkan 100% traffic ke subset v2:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
weight: 50
- destination:
host: reviews
subset: v3
weight: 50Verifikasi rilis biru-hijau
Refresh halaman produk Bookinfo. Bagian ulasan kini menampilkan peringkat bintang hitam, yang mengonfirmasi bahwa seluruh traffic mencapai reviews v2.
Konfirmasi aturan routing:
kubectl get virtualservice reviews -o yamlOutput harus menunjukkan subset: v2 sebagai satu-satunya tujuan.
Note: Untuk rollback, terapkan kembali layanan virtual Langkah 2 yang mengarahkan traffic ke subset v1.
Langkah 4: Rilis canary berbasis bobot — bagi traffic antara v2 dan v3
Alih-alih mengalihkan seluruh traffic sekaligus, alihkan secara bertahap persentase tertentu ke versi baru. Layanan virtual berikut membagi traffic 50/50 antara reviews v2 dan v3:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
weight: 50
- destination:
host: reviews
subset: v3
weight: 50Nilai weight mengontrol persentase traffic untuk setiap versi. Bobot harus berjumlah total 100.
Verifikasi rilis canary
Refresh halaman produk Bookinfo beberapa kali. Bagian ulasan bergantian antara bintang hitam (v2) dan bintang merah (v3) dengan frekuensi yang kira-kira sama.
Note: Untuk rollback, aturweight: 100pada tujuan v2 danweight: 0pada v3, atau hapus tujuan v3 sepenuhnya.
Langkah 5: Rilis canary berbasis header — arahkan berdasarkan identitas pengguna
Arahkan pengguna tertentu ke versi baru berdasarkan Header HTTP, sementara pengguna lain tetap berada di versi saat ini. Pendekatan ini berguna untuk pengujian internal sebelum peluncuran yang lebih luas.
Aplikasi Bookinfo meneruskan username yang login sebagai Header HTTP end-user. Layanan virtual berikut mengarahkan pengguna jason ke reviews v3 dan semua pengguna lain ke reviews v2:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v3
- route:
- destination:
host: reviews
subset: v2Verifikasi rilis berbasis header
Tanpa login, refresh halaman produk Bookinfo. Bagian ulasan menampilkan bintang hitam (v2).
Klik Sign in di pojok kanan atas. Masukkan
jasonsebagai username. Tidak diperlukan password.Setelah login, refresh halaman. Bagian ulasan kini menampilkan bintang merah (v3).
Hal ini berfungsi karena halaman produk Bookinfo menyertakan header end-user dalam permintaan ke layanan mikro backend. Ketika end-user cocok dengan jason, layanan virtual mengarahkan permintaan ke reviews v3.
Pembersihan
Untuk menghapus aturan routing yang dibuat dalam panduan ini, hapus layanan virtual dan aturan tujuan:
kubectl delete virtualservice productpage reviews ratings details
kubectl delete destinationrule productpage reviews ratings detailsLangkah selanjutnya
Manage virtual services — jelajahi opsi routing seperti injeksi kesalahan dan timeout.
Manage destination rules — konfigurasikan kebijakan load balancing dan pengaturan kolam koneksi untuk subset.