Mekanisme fallback menentukan aksi alternatif ketika panggilan layanan gagal. Jika sebuah layanan mikro gagal atau tidak tersedia, mekanisme ini memanggil layanan cadangan untuk menangani permintaan, sehingga menjamin stabilitas dan ketersediaan sistem. Misalnya, jika titik akhir layanan tidak tersedia, Anda dapat menggunakan mekanisme fallback untuk meneruskan permintaan ke versi layanan cadangan, memastikan permintaan klien ditangani tanpa error atau gangguan. ASM mendukung mekanisme ini melalui parameter fallback dalam VirtualService. Topik ini menjelaskan cara menggunakan mekanisme fallback di ASM.
Prasyarat
Anda memiliki instans ASM Edisi Perusahaan atau Edisi Ultimate versi 1.17.2.22 atau yang lebih baru. Untuk informasi selengkapnya, lihat Buat instans ASM.
CatatanJika instans ASM Anda versi sebelum 1.17, perbarui instans tersebut ke versi 1.17.2.22 atau yang lebih baru, atau submit a ticket untuk dukungan teknis. Untuk informasi selengkapnya tentang cara memperbarui instans, lihat Tingkatkan instans ASM.
Kluster ACK telah ditambahkan ke instans ASM. Untuk informasi selengkapnya, lihat Tambahkan kluster ke instans ASM.
Contoh Bookinfo telah diterapkan. Untuk informasi selengkapnya, lihat Terapkan aplikasi di kluster yang terkait dengan instans ASM.
Versi sidecar pada bidang data adalah 1.17 atau yang lebih baru.
CatatanAnda dapat melihat versi sidecar setiap Pod bisnis di halaman Instances Status pada ASM console. Untuk informasi selengkapnya, lihat Upgrade management.
Konfigurasi
Topik ini menggunakan layanan reviews dari aplikasi contoh Bookinfo sebagai contoh. Ketika layanan productpage mengakses versi v1, v2, dan v3 dari layanan reviews, jika versi v3 tidak tersedia, mekanisme fallback mengarahkan permintaan ke versi v2, sehingga mencegah layanan mengembalikan error 503.
Anda dapat mengklik Configuration file untuk mengunduh file YAML yang digunakan dalam topik ini.
Langkah 1: Akses contoh Bookinfo
Buat file bernama
reviews.yamldengan konten berikut untuk mendeklarasikan versiv1,v2, danv3dari layananreviews.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: v3Di lingkungan KubeConfig Anda, jalankan perintah berikut untuk menerapkan DestinationRule.
kubectl apply -f reviews.yamlGunakan salah satu metode berikut untuk mendapatkan alamat IP gerbang masuk.
Metode 1: Jalankan perintah berikut.
kubectl get svc -n istio-system istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}'Metode 2: Dapatkan alamat IP gerbang masuk dari halaman Ingress Gateway pada Konsol ASM. Untuk informasi selengkapnya, lihat Dapatkan titik akhir gerbang ASM.
Di browser, kunjungi
http://${YourGatewayIp}/productpage.${YourGatewayIp}adalah IP gateway yang Anda peroleh pada langkah sebelumnya. Anda dapat mengidentifikasi versinya berdasarkan nilai Reviews served by atau bentuk bintangnya. Versi v1 tidak memiliki bintang, versi v2 memiliki bintang hitam, dan versi v3 memiliki bintang merah.Sebagai contoh, nilai reviews-v2 menunjukkan versi
v2, yang menampilkan bintang hitam.
Refresh halaman beberapa kali. Permintaan kini diseimbangkan secara load-balanced di antara versi
v1,v2, danv3dari layananreviews.
Langkah 2: Definisikan rute dan aturan fallback
Buat file bernama
reviews-route-fallback-sample1.yamldengan konten berikut.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: reviews-route namespace: default spec: hosts: - reviews http: - route: - destination: host: reviews subset: v3 fallback: target: host: reviews subset: v2Di lingkungan KubeConfig Anda untuk instans ASM, jalankan perintah berikut untuk menerapkan rute dan aturan fallback untuk layanan
reviews.kubectl apply -f reviews-route-fallback-sample1.yamlDi browser web, kunjungi
http://${YourGatewayIp}/productpagedan terus refresh halaman.Anda akan melihat bahwa permintaan secara konsisten diarahkan ke versi
v3dari layananreviews. Setelah direfresh, halaman menunjukkan bahwa layanan ulasan buku disediakan oleh reviews-v3, dan ulasan tersebut mencakup peringkat bintang merah.Simulasikan kegagalan versi
reviews-v3dengan mengatur jumlah replikanya menjadi 0:kubectl scale deployment reviews-v3 --replicas=0Di browser Anda, kunjungi
http://${YourGatewayIp}/productpagedan refresh halaman berulang kali.Anda akan melihat bahwa permintaan berhasil dialihkan ke versi
v2dari layananreviews. Anda dapat memverifikasi bahwa fallback terjadi dengan menambahkan bidang terkait fallback ke format log akses kustom, lalu memeriksa log tersebut.
Langkah 3: Konfigurasikan fallback dengan routing berbobot
Jalankan perintah berikut untuk membuat versi
reviews-v3tersedia kembali.kubectl scale deployment reviews-v3 --replicas=1Buat file bernama
reviews-route-fallback-sample2.yamldengan konten berikut untuk memodifikasi definisireviews-route.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: reviews-route namespace: default spec: hosts: - reviews http: - route: - destination: host: reviews subset: v3 fallback: target: host: reviews subset: v2 weight: 50 - destination: host: reviews subset: v2 fallback: target: host: reviews subset: v1 weight: 50 retries: attempts: 0Jalankan perintah berikut untuk menerapkan rute dan aturan fallback baru untuk layanan
reviews.kubectl apply -f reviews-route-fallback-sample2.yamlDi browser Anda, kunjungi
http://${YourGatewayIp}/productpagedan refresh halaman berulang kali.Anda akan melihat bahwa permintaan diarahkan ke versi
v2danv3dari layananreviewsdengan rasio 50:50. Pada contoh ini, retry dinonaktifkan agar hasilnya lebih jelas.Jalankan perintah berikut untuk mengatur jumlah replika
v3menjadi 0 dan verifikasi bahwa aturan fallback-nya bekerja sesuai harapan.kubectl scale deployment reviews-v3 --replicas=0Refresh halaman
productpagebeberapa kali. Anda akan melihat bahwa permintaan secara konsisten diarahkan ke versiv2, yang merupakan perilaku yang diharapkan.Jalankan perintah berikut untuk mengatur jumlah replika
v2menjadi 0.kubectl scale deployment reviews-v2 --replicas=0Jika Anda terus-menerus merefresh halaman productpage, Anda akan menemukan bahwa sekitar 50% waktu akses ke layanan reviews gagal. Sisanya 50%, permintaan dikirim ke versi v2. Karena versi v2 tidak sehat, permintaan tersebut dialihkan ke versi v1. Setelah menjalankan perintah tersebut dan mengakses halaman produk aplikasi BookInfo, bagian reviews menampilkan judul error merah Error fetching product reviews! dan pesan
Sorry, product reviews are currently unavailable for this book.. Hal ini menunjukkan bahwa layanan ulasan produk menjadi tidak tersedia setelah replika reviews-v2 diatur ke 0.Jalankan perintah berikut untuk melihat log.
kubectl logs -f deployment/productpage-v1 -c istio-proxy --tail=10Output yang diharapkan:
{ "authority":"reviews:9080", "authority_for":"reviews:9080", "bytes_received":"0", "bytes_sent":"19", "downstream_local_address":"192.168.255.46:9080", "downstream_remote_address":"172.16.0.252:47738", "duration":"0", "fallback_path":"outbound|9080|v3|reviews.default.svc.cluster.local:outbound|9080|v2|reviews.default.svc.cluster.local", "fallback_final_cluster_name":"-", "fallback_result":"fallback cluster is unhealthy", "istio_policy_status":"-", "method":"GET", "path":"/reviews/0", "protocol":"HTTP/1.1", "request_id":"b207a764-b6d7-4ef8-bc71-59f264c3****", "requested_server_name":"-", "response_code":"503", "response_flags":"UH", "route_name":"-", "start_time":"2023-05-30T07:32:08.999Z", "trace_id":"a40c32a7b2cf****", "upstream_cluster":"outbound|9080|v3|reviews.default.svc.cluster.local", "upstream_host":"-", "upstream_local_address":"-", "upstream_service_time":"-", "upstream_transport_failure_reason":"-", "user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.X.X Safari/537.36", "x_forwarded_for":"-" }Anda dapat melihat log 503 untuk
productpage-v1. Berdasarkan konfigurasi routing berbobotreviews-route, 50% permintaan dariproductpagediarahkan ke versi v3 layanan reviews. Karena versi v3 tidak tersedia, sidecar (istio-proxy) mencoba melakukan fallback dari v3 ke versi v2 berdasarkan aturan fallback. Karena versi v2 juga tidak sehat, permintaan dikirim kembali ke versi v3. Anda dapat mengonfirmasi hal ini dengan memeriksa bidang"upstream_cluster":"outbound|9080|v3|reviews.default.svc.cluster.local".