Traffic mirroring mengirimkan salinan traffic langsung ke versi layanan sekunder untuk pengujian terhadap permintaan produksi nyata—tanpa memengaruhi pengguna akhir. Gunakan fitur ini untuk memvalidasi versi layanan baru sebelum mengalihkan traffic produksi ke versi tersebut.
Topik ini menjelaskan cara merutekan seluruh traffic ke helloworld-v1 dan mencerminkan salinan setiap permintaan ke helloworld-v2.
Prasyarat
Selesaikan persiapan dan deploy layanan helloworld dan sleep. Untuk detailnya, lihat Preparations.
Langkah 1: Verifikasi perutean garis dasar
Sebelum menerapkan aturan mirroring, pastikan bahwa baik helloworld-v1 maupun helloworld-v2 menerima traffic melalui load balancing normal.
Buka shell di Pod
sleep:kubectl exec -it deploy/sleep -- shKirim permintaan ke layanan
helloworld:curl helloworld:5000/helloTanggapan berasal dari v1 atau v2 secara acak:
Hello version: v1, instance: helloworld-v1-6d77f4c4cf-p****atau
Hello version: v2, instance: helloworld-v2-6b96c5684-4****
Langkah 2: Buat destination rule dan virtual service
Definisikan dua subset (v1 dan v2) untuk layanan helloworld, lalu buat virtual service yang merutekan seluruh traffic ke v1 dan mencerminkannya ke v2.
Membuat aturan tujuan
Terapkan DestinationRule berikut untuk mendefinisikan subset v1 dan v2. Untuk detailnya, lihat Manage destination rules.
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: helloworld
namespace: default
spec:
host: helloworld
subsets:
- labels:
version: v1
name: v1
- labels:
version: v2
name: v2Buat virtual service dengan mirroring
Terapkan VirtualService berikut. Blok route mengirimkan seluruh traffic ke helloworld-v1. Blok mirror mengirimkan salinan setiap permintaan ke helloworld-v2. Untuk detailnya, lihat Manage virtual services.
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: helloworld-vs
namespace: default
spec:
hosts:
- helloworld
http:
- mirror:
host: helloworld
subset: v2
route:
- destination:
host: helloworld
subset: v1Langkah 3: Verifikasi mirroring
Pastikan v1 menangani semua tanggapan
Buka shell di Pod
sleep:kubectl exec -it deploy/sleep -- shKirim permintaan ke layanan
helloworld:curl helloworld:5000/helloSekarang, setiap tanggapan hanya berasal dari v1:
Hello version: v1, instance: helloworld-v1-6d77f4c4cf-p****
Pastikan v2 menerima traffic yang dicerminkan
Buka Mesh Topology untuk memeriksa topologi layanan. Topologi tersebut menunjukkan bahwa permintaan disalin ke helloworld-v2, meskipun v1 adalah satu-satunya versi yang merespons klien. Untuk detailnya, lihat Use Mesh Topology to view the topology of an application.
