Meydan okuma - Istio
- Docker & Kubernetes kursu
- Uzman
- Ders 45/47
- 5 dk
VirtualService ile trafik yönlendirme yazarsın.
Meydan okuma: kanarya sürümü
Bu meydan okumada api servisinin yeni sürümünü Istio ile kademeli yayınlayacaksın. İki deployment var: version: v1 ve version: v2 etiketli. Hedef:
trafiğin %90'ı -> v1
trafiğin %10'u -> v2
"x-test: evet" başlığı olan istekler -> her zaman v2Önce DestinationRule ile alt kümeleri tanımlayacak, sonra VirtualService ile yönlendirmeyi yazacaksın.
Uygulama DestinationRule
Bir DestinationRule YAML'ı yaz: networking.istio.io/v1; adı api; host: api; subsets altında name: v1 (labels: version: v1) ve name: v2 (labels: version: v2).
Başlangıç kodu
# buraya yazÖrnek çözüm
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: api
spec:
host: api
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2Beklenen çıktı
destinationrule.networking.istio.io/api created
Uygulama VirtualService
Bir VirtualService'in http bölümünü yaz (http: ile başlayarak): ilk kural match altında headers: x-test: exact: evet olan istekleri host: api, subset: v2'ye göndersin; ikinci kural route ile v1'e weight: 90, v2'ye weight: 10 versin.
Başlangıç kodu
# buraya yazÖrnek çözüm
http:
- match:
- headers:
x-test:
exact: evet
route:
- destination:
host: api
subset: v2
- route:
- destination:
host: api
subset: v1
weight: 90
- destination:
host: api
subset: v2
weight: 10Beklenen çıktı
virtualservice.networking.istio.io/api configured
$ for i in $(seq 100); do curl -s http://api/surum; done | sort | uniq -c
91 v1
9 v2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 VirtualService'te başlık kuralı ağırlıklı kuraldan önce mi yazılmalıdır?
- Ağırlıklı kural her zaman önce gelir
- İkisi aynı kuralda olamaz
- Evet; http kuralları sırayla denenir, ilk eşleşen uygulanır Doğru cevap
- Hayır; sıra önemsizdir
Açıklama: Ağırlıklı kural eşleşme koşulu içermediği için her isteği yakalar.
2 Alt kümeyi seçen etiketi yaz.
subsets:
- name: v2
labels:
____: v2
subsets:
- name: v2
labels:
version: v2
Açıklama: Alt küme pod etiketleriyle tanımlanır.
3 Eşleştir.
| Kavram | Anlamı |
|---|---|
DestinationRule |
Alt kümeler |
VirtualService |
Yönlendirme |
weight |
Trafik payı |
match.headers |
Başlığa göre seç |