Mekanisme fallback menyediakan jalur panggilan alternatif ketika panggilan layanan gagal. Jika layanan mikro tidak tersedia, mekanisme ini memanggil layanan alternatif untuk memproses permintaan, memastikan stabilitas dan ketersediaan sistem. Contohnya, jika titik akhir layanan tidak dapat diakses, fallback dapat meneruskan permintaan ke layanan alternatif sehingga permintaan klien tetap diproses tanpa gangguan. Service Mesh (ASM) memungkinkan Anda mendefinisikan parameter fallback dalam layanan virtual agar fallback dapat dilakukan saat layanan yang diminta gagal. Topik ini menjelaskan cara menggunakan mekanisme fallback ASM.
Prasyarat
Sebuah instance ASM Edisi Enterprise atau Edisi Ultimate telah dibuat, dengan versi 1.17.2.22 atau lebih baru. Untuk informasi lebih lanjut, lihat Buat instance ASM.
CatatanJika versi instance ASM Anda lebih lama dari 1.17, perbarui instance tersebut ke versi 1.17.2.22 atau lebih baru, atau submit a ticket untuk mendapatkan dukungan teknis. Informasi lebih lanjut tentang pembaruan instance ASM dapat ditemukan di Perbarui instance ASM.
Sebuah kluster Container Service for Kubernetes (ACK) telah ditambahkan ke instance ASM. Untuk informasi lebih lanjut, lihat Tambahkan kluster ke instance ASM.
Aplikasi sampel bernama Bookinfo telah diterapkan. Untuk informasi lebih lanjut, lihat Terapkan aplikasi di instance ASM.
Versi proxy sidecar pada bidang data harus 1.17 atau lebih baru.
CatatanAnda dapat melihat versi proxy sidecar di setiap pod aplikasi pada halaman Instances Status di Konsol ASM. Untuk informasi lebih lanjut, lihat Manajemen Peningkatan.
Deskripsi Konfigurasi
Dalam contoh ini, layanan reviews di aplikasi Bookinfo digunakan. Ketika layanan productpage mengakses layanan reviews dengan tiga versi (v1, v2, dan v3), jika v3 tidak tersedia, fallback akan mengarahkan permintaan ke v2, dan kode status HTTP 503 tidak dikembalikan.
Unduh file YAML yang digunakan dalam contoh ini dengan mengklik File Konfigurasi.
Langkah 1: Akses aplikasi Bookinfo
Buat file reviews.yaml dengan konten berikut untuk mendeklarasikan versi v1, v2, dan v3 dari layanan reviews:
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: v3Gunakan kubectl untuk terhubung ke instance ASM berdasarkan informasi di file KubeConfig, lalu jalankan perintah berikut untuk menerapkan aturan tujuan:
kubectl apply -f reviews.yamlGunakan salah satu metode berikut untuk mendapatkan alamat IP gateway masuk:
Metode 1: Jalankan perintah berikut untuk mendapatkan alamat IP gateway masuk:
kubectl get svc -n istio-system istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}'Metode 2: Dapatkan alamat IP gateway masuk dari halaman Ingress Gateway di Konsol ASM. Untuk informasi lebih lanjut, lihat Kueri alamat IP gateway masuk instance ASM.
Kunjungi
http://${YourGatewayIp}/productpagedi browser.${YourGatewayIp}adalah alamat IP gateway masuk yang diperoleh di langkah sebelumnya. Versi layanan reviews dapat ditentukan berdasarkan nilai Reviews served by atau bintang. Versi v1 tidak memiliki bintang, v2 memiliki bintang hitam, dan v3 memiliki bintang merah.Sebagai contoh, pada gambar berikut, nilai reviews-v2 menunjukkan versi v2 dengan bintang hitam.

Segarkan halaman secara berkala. Anda dapat melihat bahwa permintaan layanan diseimbangkan ke versi v1, v2, dan v3 dari layanan reviews.
Langkah 2: Tentukan aturan routing dan fallback untuk mengakses layanan reviews
Buat file reviews-route-fallback-sample1.yaml dengan 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: v2Gunakan kubectl untuk terhubung ke instance ASM berdasarkan informasi di file KubeConfig, lalu jalankan perintah berikut untuk menerapkan aturan routing dan fallback untuk mengakses layanan reviews:
kubectl apply -f reviews-route-fallback-sample1.yamlKunjungi
http://${YourGatewayIp}/productpagedi browser dan segarkan halaman secara berkala.Anda dapat melihat bahwa permintaan layanan selalu dirutekan ke versi v3 dari layanan reviews.

Jalankan perintah berikut untuk mensimulasikan kegagalan di reviews-v3 dengan mengubah jumlah instansinya menjadi 0:
kubectl scale deployment reviews-v3 --replicas=0Kunjungi
http://${YourGatewayIp}/productpagedi browser dan segarkan halaman secara berkala.Anda dapat melihat bahwa permintaan layanan jatuh kembali ke versi v2 dari layanan reviews. Anda dapat menambahkan bidang terkait fallback ke format log akses kustom, lalu melihat log untuk memverifikasi apakah fallback dilakukan.
Langkah 3: Konfigurasikan aturan fallback di bawah rute berbobot
Jalankan perintah berikut untuk mengatur reviews-v3 agar tersedia:
kubectl scale deployment reviews-v3 --replicas=1Buat file reviews-route-fallback-sample2.yaml dengan konten berikut untuk memodifikasi definisi reviews-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 aturan routing dan fallback baru untuk layanan reviews:
kubectl apply -f reviews-route-fallback-sample1.yamlKunjungi
http://${YourGatewayIp}/productpagedi browser dan segarkan halaman secara berkala.Anda dapat melihat bahwa permintaan dirutekan ke reviews-v2 dan reviews-v3 dengan rasio 50:50. Retry dinonaktifkan dalam contoh ini untuk memudahkan pengamatan hasil.
Jalankan perintah berikut untuk mengubah jumlah instansi reviews-v3 menjadi 0 dan periksa apakah aturan fallback reviews-v3 sesuai harapan:
kubectl scale deployment reviews-v3 --replicas=0Segarkan halaman secara berkala. Anda dapat melihat bahwa permintaan selalu dirutekan ke reviews-v2, sesuai harapan.
Jalankan perintah berikut untuk mengubah jumlah instansi reviews-v2 menjadi 0:
kubectl scale deployment reviews-v2 --replicas=0Segarkan halaman secara berkala. Halaman serupa dengan gambar berikut muncul, menunjukkan bahwa layanan productpage gagal mengakses layanan reviews. Probabilitas halaman ini muncul adalah 50%, dan probabilitas lainnya 50% adalah bahwa permintaan dirutekan ke reviews-v2. Karena reviews-v2 tidak sehat, permintaan jatuh kembali ke reviews-v1.

Jalankan perintah berikut untuk menanyakan 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 bahwa log serupa dengan kode status HTTP 503 di atas ada di productpage-v1. Berdasarkan konfigurasi routing berbobot dari reviews-route, layanan productpage memiliki probabilitas 50% untuk meminta reviews-v3. Karena reviews-v3 tidak tersedia, proxy sidecar (istio-proxy) mencoba fallback dari reviews-v3 ke reviews-v2 berdasarkan aturan fallback. Permintaan dikirim ke reviews-v3 karena reviews-v2 tidak sehat. Anda dapat mengonfirmasi fallback berdasarkan bidang
"upstream_cluster":"outbound|9080|v3|reviews.default.svc.cluster.local".
