Service Mesh (ASM), trafik yönlendirmeyi pod ölçeklendirmeden ayırarak her uygulama sürümüne giden trafiği çoğaltma sayısından bağımsız olarak yüzdelik bazda kontrol etmenizi sağlar.
Bu kılavuz, Bookinfo örnek uygulamasını kullanarak sanal hizmetler ve hedef kurallarıyla üç dağıtım stratejisini adım adım açıklar:
Blue-green dağıtımı -- tüm trafiği tek bir adımda bir sürümden diğerine aktarın.
Ağırlık tabanlı canary dağıtımı -- trafiği iki sürüm arasında yüzdelik olarak bölün.
Üst bilgi tabanlı canary dağıtımı -- belirli kullanıcıları istek üst bilgilerine göre yeni bir sürüme yönlendirin.
Ön Koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Bir ASM örneği. Daha fazla bilgi için bkz. ASM örneği oluşturma
ASM örneğine eklenmiş en az bir Container Service for Kubernetes (ACK) kümesi. Daha fazla bilgi için bkz. ASM örneğine küme ekleme
ACK kümesinde dağıtılmış Bookinfo uygulaması. Daha fazla bilgi için bkz. ASM örneğinde uygulama dağıtma
ACK kümesi için dağıtılmış bir giriş ağ geçidi. Daha fazla bilgi için bkz. Giriş ağ geçidi hizmeti oluşturma
Nasıl Çalışır
Hedef kuralları, pod'larınızdaki sürüm etiketleriyle eşlenen adlandırılmış alt kümeleri tanımlar. Sanal hizmetler, hangi sürümün ne oranda trafik alacağını kontrol etmek için bu alt kümelere başvurur.
Bu kılavuz gerçekçi bir ilerleme sırası izler:
Tüm Bookinfo mikroservis sürümleri için alt kümeleri tanımlayın (hedef kuralları).
Tüm trafiği v1'e yönlendirin (temel çizgi).
Blue-green dağıtımı: reviews hizmetini v1'den v2'ye geçirin.
Ağırlık tabanlı canary dağıtımı: trafiği reviews v2 ve v3 arasında bölün.
Üst bilgi tabanlı canary dağıtımı: belirli bir kullanıcıyı reviews v3'e yönlendirin.
Adım 1: Hedef Kuralları Oluşturma
Sanal hizmetlerin bu alt kümeleri adlarıyla referans alabilmesi için her Bookinfo mikroservisi için alt kümeler tanımlayın. Daha fazla bilgi için bkz. Hedef kurallarını yönetme.
Aşağıdaki hedef kurallarını ASM örneğinize uygulayın:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: productpage
spec:
host: productpage
subsets:
- name: v1
labels:
version: v1
---
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: v3
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: ratings
spec:
host: ratings
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v2-mysql
labels:
version: v2-mysql
- name: v2-mysql-vm
labels:
version: v2-mysql-vm
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: details
spec:
host: details
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
Hedef kurallarının oluşturulduğunu doğrulayın:
kubectl get destinationrules -o name
Beklenen çıktı:
destinationrule.networking.istio.io/productpage
destinationrule.networking.istio.io/reviews
destinationrule.networking.istio.io/ratings
destinationrule.networking.istio.io/details
Adım 2: Tüm Trafiği v1'e Yönlendirme (Temel Çizgi)
Her Bookinfo mikroservisinin v1 alt kümesine tüm trafiği yönlendirmek için sanal hizmetler oluşturun. Bu işlem, trafiği kaydırmadan önce kararlı bir temel çizgi oluşturur. Daha fazla bilgi için bkz. Sanal hizmetleri yönetme.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: productpage
spec:
hosts:
- productpage
http:
- route:
- destination:
host: productpage
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- route:
- destination:
host: ratings
subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: details
spec:
hosts:
- details
http:
- route:
- destination:
host: details
subset: v1
Temel Çizgiyi Doğrulama
Tarayıcınızda Bookinfo ürün sayfasını yenileyin. Reviews bölümü yıldız derecelendirmeleri olmadan görüntülenir çünkü reviews v1, ratings hizmetini çağırmaz.
Yönlendirme kuralını onaylayın:
kubectl get virtualservice reviews -o yaml
Çıktı, reviews hizmeti için tek hedef olarak subset: v1 değerini göstermelidir.
Bu noktada, reviews v2 ve v3 için pod'lar çalışır durumdadır ancak trafik almaz.
Adım 3: Blue-Green Dağıtımı -- reviews v2'ye Geçiş
Blue-green dağıtımı, tüm trafiği tek bir adımda bir sürümden diğerine aktarır. Trafiğin %100'ünü v2 alt kümesine yönlendirmek için reviews sanal hizmetini güncelleyin:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
Blue-Green Dağıtımını Doğrulama
Bookinfo ürün sayfasını yenileyin. Reviews bölümü artık siyah yıldız derecelendirmelerini gösterir; bu, tüm trafiğin reviews v2'ye ulaştığını doğrular.
Yönlendirme kuralını onaylayın:
kubectl get virtualservice reviews -o yaml
Çıktı, tek hedef olarak subset: v2 değerini göstermelidir.
Not: Geri almak için, trafiği v1 alt kümesine yönlendiren Adım 2'deki sanal hizmeti yeniden uygulayın.
Adım 4: Ağırlık Tabanlı Canary Dağıtımı -- Trafiği v2 ve v3 Arasında Bölme
Tüm trafiği bir anda değiştirmek yerine, yeni sürüme yavaş yavaş belirli bir yüzde kaydırın. Aşağıdaki sanal hizmet, trafiği reviews v2 ve v3 arasında %50/%50 oranında böler:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v2
weight: 50
- destination:
host: reviews
subset: v3
weight: 50
weight değerleri, her sürüm için trafik yüzdesini kontrol eder. Ağırlıkların toplamı 100 olmalıdır.
Canary Dağıtımını Doğrulama
Bookinfo ürün sayfasını birkaç kez yenileyin. Reviews bölümü, yaklaşık olarak eşit sıklıkta siyah yıldızlar (v2) ve kırmızı yıldızlar (v3) arasında değişir.
Not: Geri almak için, v2 hedefindeweight: 100ve v3'teweight: 0olarak ayarlayın veya v3 hedefini tamamen kaldırın.
Adım 5: Üst Bilgi Tabanlı Canary Dağıtımı -- Kullanıcı Kimliğine Göre Yönlendirme
HTTP üst bilgilerine dayanarak belirli kullanıcıları yeni sürüme yönlendirirken diğer tüm kullanıcıları mevcut sürümde tutun. Bu yaklaşım, daha geniş bir yayından önce dahili testler için kullanışlıdır.
Bookinfo uygulaması, oturum açmış kullanıcı adını end-user HTTP üst bilgisi olarak iletir. Aşağıdaki sanal hizmet, jason kullanıcısını reviews v3'e ve diğer tüm kullanıcıları reviews v2'ye yönlendirir:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v3
- route:
- destination:
host: reviews
subset: v2
Üst Bilgi Tabanlı Dağıtımı Doğrulama
Oturum açmadan Bookinfo ürün sayfasını yenileyin. Reviews bölümü siyah yıldızları (v2) gösterir.
Sağ üst köşedeki Sign in seçeneğine tıklayın. Kullanıcı adı olarak
jasongirin. Parola gerekmez.Oturum açtıktan sonra sayfayı yenileyin. Reviews bölümü artık kırmızı yıldızları (v3) gösterir.
Bu işlem, Bookinfo ürün sayfasının arka uç mikroservislerine yapılan isteklere bir end-user üst bilgisi dahil etmesi nedeniyle çalışır. end-user değeri jason ile eşleştiğinde, sanal hizmet isteği reviews v3'e yönlendirir.
Temizleme
Bu kılavuzda oluşturulan yönlendirme kurallarını kaldırmak için sanal hizmetleri ve hedef kurallarını silin:
kubectl delete virtualservice productpage reviews ratings details
kubectl delete destinationrule productpage reviews ratings details
Sonraki Adımlar
Sanal hizmetleri yönetme -- hata enjeksiyonu ve zaman aşımları gibi yönlendirme seçeneklerini keşfedin.
Hedef kurallarını yönetme -- alt kümeler için yük dengeleme ilkelerini ve bağlantı havuzu ayarlarını yapılandırın.