CodeBlanks Logo Icon CodeBlanks

Meydan okuma - Istio

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

terminal
# buraya yaz

Örnek çözüm

terminal
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: api
spec:
  host: api
  subsets:
    - name: v1
      labels:
        version: v1
    - name: v2
      labels:
        version: v2

Beklenen çı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

terminal
# buraya yaz

Örnek çözüm

terminal
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: 10

Beklenen çı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.

Soru
  subsets:
    - name: v2
      labels:
        ____: v2
Cevap
  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ç

Uzman bölümündeki tüm dersler