Azure Kubernetes Service için Istio tabanlı Service Mesh eklentisini dağıtın

Bu makalede, Azure Kubernetes Service (AKS) kümesi için Istio tabanlı hizmet ağı eklentisinin nasıl yükleneceği gösterilmektedir.

Istio ve hizmet ağı eklentisi hakkında daha fazla bilgi için bkz . Azure Kubernetes Service için Istio tabanlı hizmet ağı eklentisi.

Tip

Azure portalında Aks kümelerinize Istio dağıtımına yardımcı olması için Azure Copilot'ı kullanabilirsiniz. Daha fazla bilgi için bkz. Azure Copilot kullanarak AKS kümeleriyle verimli çalışma.

Başlamadan önce

  • Eklenti için Azure CLI 2.57.0 veya sonraki bir sürümün yüklü olması gerekir. Sürümü doğrulamak için komutunu çalıştırabilirsiniz az --version . Yüklemek veya yükseltmek için bkz . Azure CLI'yı yükleme.

  • Bir bölgede hangi Istio eklenti düzeltmelerinin kullanılabilir olduğu ve BUNLARıN AKS standart ve LTS kümesi sürümleriyle uyumluluğu hakkında bilgi edinmek için komutunu az aks mesh get-revisionskullanın:

    az aks mesh get-revisions --location <location> -o table
    

    Istio eklentisinin AKS ile uyumluluğu hakkında daha fazla bilgi için uyumluluk destek ilkesine bakın.

  • Bazı durumlarda, önceki yüklemelerdeki Istio CRD'leri kaldırma işleminde otomatik olarak temizlenmeyebilir. Mevcut Istio CRD'lerinin silindiğinden emin olun:

    kubectl delete crd $(kubectl get crd -A | grep "istio.io" | awk '{print $1}')
    

    ClusterRoles, MutatingWebhookConfigurations ve ValidatingWebhookConfigurations gibi Istio'nun kendi kendine yönetilen yüklemelerinden de diğer kaynakların temizlenmesi önerilir.

  • Herhangi bir istioctl CLI komutu kullanmayı seçerseniz, Istio'nun eklenti yüklemesine işaret eden bir bayrak eklemeniz gerektiğini unutmayın: --istioNamespace aks-istio-system

Ortam değişkenlerini belirleme

export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
export LOCATION=<location>

Istio eklentisini yükleme

Bu bölüm, Küme oluşturma sırasında Istio eklentisini yükleme veya Azure CLI kullanarak mevcut bir küme için etkinleştirme adımlarını içerir. Eklentiyi Bicep kullanarak yüklemek istiyorsanız Bicep kullanarak Istio hizmet ağı eklentisiyle AKS kümesi yükleme kılavuzuna bakın. AKS kümesi için Bicep kaynak tanımı hakkında daha fazla bilgi edinmek için Bicep managedCluster referansı bölümüne bakın.

Note

Belirli düğümlerde istiod zamanlanmış ve giriş/çıkış ağ geçidi podlarına ihtiyacınız varsa AKS sistem düğümlerini veya azureservicemesh/istio.replica.preferred düğüm etiketini kullanabilirsiniz.

Giriş, çıkış ve ağ geçidi podlarının, 100 etiketli düğümler için azureservicemesh/istio.replica.preferred: true ağırlıklı bir tercihe ve AKS sistem düğümleri (kubernetes.azure.com/mode: system ile etiketli) için 50 ağırlıklı bir tercihe sahip düğüm yakınlıkları vardır. Bu yapılandırma, azureservicemesh/istio.replica.preferred: true etiketi bulunamazsa veya bu düğümlere zamanlama yapılamıyorsa podların AKS sistem düğümlerinde zamanlanacağı anlamına gelir. asm-1-30 öncesindeki düzeltmeler için bu ağırlıklar tersine çevrilir: AKS sistem düğümleri için 100 ve 50 düğümleri için azureservicemesh/istio.replica.preferred: true.

istiod (discovery) dağıtımı, tüm revizyonlarda AKS sistem düğümleri için 100 ve azureservicemesh/istio.replica.preferred: true ile etiketlenmiş düğümler için 50 ağırlıklı tercihe sahiptir.

Düzeltme seçimi

Eklentiyi bir düzeltme belirtmeden etkinleştirirseniz, sizin için varsayılan olarak desteklenen bir düzeltme yüklenir.

Bir düzeltme belirtmek için aşağıdaki adımları gerçekleştirin.

  1. az aks mesh get-revisions Bir bölgedeki farklı AKS kümesi sürümleri için hangi düzeltmelerin kullanılabilir olduğunu denetlemek için komutunu kullanın.
  2. Mevcut revizyonlara göre, mesh kurulumunda kullandığınız etkinleştirme komutuna --revision asm-X-Y (örn: --revision asm-1-24) bayrağını ekleyebilirsiniz.

Küme oluşturma sırasında mesh'i yükleme

Kümeyi oluştururken Istio eklentisini yüklemek için --enable-azure-service-mesh veya --enable-asm parametresini kullanın.

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

az aks create \
    --resource-group ${RESOURCE_GROUP} \
    --name ${CLUSTER} \
    --enable-asm \
    --generate-ssh-keys

Mevcut küme için mesh kurulumu

Aşağıdaki örnek, mevcut aks kümesi için Istio eklentisini etkinleştirir:

Important

Açık Service Mesh (OSM) eklentisi zaten kümenizdeyse mevcut bir kümede Istio eklentisini etkinleştiremezsiniz. Istio eklentisini yüklemeden önce OSM eklentisini kaldırın. Daha fazla bilgi için bkz . AKS kümenizden OSM eklentisini kaldırma. Istio eklentisi yalnızca sürüm >= 1.23'ün AKS kümelerinde etkinleştirilebilir.

az aks mesh enable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}

Yüklemenin başarılı olduğunu doğrulama

Kümenizde Istio eklentisinin yüklü olduğunu doğrulamak için aşağıdaki komutu çalıştırın:

az aks show --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}  --query 'serviceMeshProfile.mode'

Çıktının Istio gösterildiğini onaylayın.

AKS kümenizin kimlik bilgilerini almak için kullanın az aks get-credentials :

az aks get-credentials --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}

kubectl kullanarak istiod (Istio denetim düzlemi) podlarının başarıyla çalıştığını doğrulayın:

kubectl get pods -n aks-istio-system

istiod podunun durumunun Running olduğunu onaylayın. Örneğin:

NAME                               READY   STATUS    RESTARTS   AGE
istiod-asm-1-24-74f7f7c46c-xfdtl   1/1     Running   0          2m
istiod-asm-1-24-74f7f7c46c-4nt2v   1/1     Running   0          2m

Yan ünite enjeksiyonunu aktifleştir

Yeni podlara sidecar'ı otomatik olarak yüklemek için, namespace'lerinizi şu anda yüklü olan kontrol düzlemi revizyonuna karşılık gelen revizyon etiketiyle açıklamanız gerekir.

Hangi düzeltmenin yüklü olduğundan emin değilseniz şunu kullanın:

az aks show --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}  --query 'serviceMeshProfile.istio.revisions'

Düzeltme etiketini uygulayın:

kubectl label namespace default istio.io/rev=asm-X-Y

Important

Kontrol düzlemi düzeltmesi (örn: istio.io/rev=asm-1-24) ile eşleşen açık sürüm oluşturma gereklidir.

Varsayılan istio-injection=enabled etiket çalışmayacak ve yan arabirim enjeksiyonunun eklenti için ad alanını atlamasına neden olacak.

Elle yan taşıyıcı eklemesi yapmak için istioctl kube-inject kullanırken, istioNamespace (-i) ve revision (-r) için ek parametreler belirtmeniz gerekir. Örneğin:

kubectl apply -f <(istioctl kube-inject -f sample.yaml -i aks-istio-system -r asm-X-Y) -n foo

Yan taşıyıcı enjeksiyonu tetikleme

Test için sağlanan örnek uygulamayı dağıtabilir veya mevcut iş yükleri için sidecar enjeksiyonunu tetikleyebilirsiniz.

Mevcut uygulamalar

Mesh'e eklenecek mevcut uygulamalarınız varsa, ad alanlarının önceki adımda olduğu gibi etiketlendiğinden emin olun ve sidecar enjeksiyonunu tetiklemek için dağıtımları yeniden başlatın.

kubectl rollout restart -n <namespace> <deployment name>

Sidecar enjeksiyonunun başarılı olduğunu doğrulamak için tüm kapsayıcıların hazır olduğundan emin olun ve istio-proxy çıktısında kubectl describe kapsayıcısını kontrol edin, örneğin:

kubectl describe pod -n namespace <pod name>

istio-proxy kapsayıcı, Envoy yardımcı arabirimidir. Uygulamanız artık veri düzleminin bir parçasıdır.

Örnek uygulamayı dağıtın

Örnek uygulamayı kümeye dağıtmak için kullanın kubectl apply :

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/bookinfo/platform/kube/bookinfo.yaml

Note

Giden İnternet erişimi için HTTP ara sunucusu kullanan kümelerin bir Hizmet Girişi ayarlaması gerekir. Kurulum yönergeleri için bkz. Azure Kubernetes Service'te HTTP proxy desteği

Kümenizde çeşitli dağıtımların ve hizmetlerin oluşturulduğunu onaylayın. Örneğin:

service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created

Hizmetlerin başarıyla oluşturulduğunu doğrulamak için kullanın kubectl get services :

kubectl get services

Aşağıdaki hizmetlerin dağıtıldığını onaylayın:

NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.0.180.193   <none>        9080/TCP   87s
kubernetes    ClusterIP   10.0.0.1       <none>        443/TCP    15m
productpage   ClusterIP   10.0.112.238   <none>        9080/TCP   86s
ratings       ClusterIP   10.0.15.201    <none>        9080/TCP   86s
reviews       ClusterIP   10.0.73.95     <none>        9080/TCP   86s
kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-558b8b4b76-2llld       2/2     Running   0          2m41s
productpage-v1-6987489c74-lpkgl   2/2     Running   0          2m40s
ratings-v1-7dc98c7588-vzftc       2/2     Running   0          2m41s
reviews-v1-7f99cc4496-gdxfn       2/2     Running   0          2m41s
reviews-v2-7d79d5bd5d-8zzqd       2/2     Running   0          2m41s
reviews-v3-7dbcdcbc56-m8dph       2/2     Running   0          2m41s

İki kapsayıcı bulunan sütundaki tüm podların durumunun Running olduğundan emin olun. Her pod'a eklenen ikinci konteyner, Istio tarafından enjekte edilen Envoy sidecar'dır ve diğeri uygulama konteyneridir.

Bu örnek uygulamayı girişe karşı test etmek için sonraki adımlara göz atın.

Sonraki Adımlar