Distribuire il componente aggiuntivo mesh di servizi basato su Istio per servizio Azure Kubernetes

Questo articolo illustra come installare il componente aggiuntivo mesh di servizi basato su Istio per il cluster del servizio Azure Kubernetes (AKS).

Per altre informazioni su Istio e sul componente aggiuntivo mesh di servizi, vedere Componente aggiuntivo mesh di servizi basato su Istio per il servizio Azure Kubernetes.

Operazioni preliminari

  • Il componente aggiuntivo richiede la versione dell'interfaccia della riga di comando di Azure 2.57.0 o versione successiva. È possibile eseguire az --version per verificare la versione. Per installare o eseguire l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

  • Per trovare informazioni sulle revisioni del componente aggiuntivo Istio disponibili in un'area geografica e la relativa compatibilità con le versioni cluster del servizio Azure Container, usare il comando az aks mesh get-revisions:

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

Impostare le variabili di ambiente

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

Installare il componente aggiuntivo Istio

Questa sezione include i passaggi per installare il componente aggiuntivo Istio nell'ambito della creazione del cluster o abilitarlo per un cluster esistente usando l'interfaccia della riga di comando di Azure. Se si desidera installare il componente aggiuntivo usando Bicep, vedere la guida all'installazione di un cluster del servizio Azure Container con il componente aggiuntivo della mesh del servizio Istio usando Bicep. Per scoprire di più sulla definizione delle risorse Bicep per un cluster del servizio Azure Container, vedere riferimento a managedCluster Bicep.

Selezione revisione

Se si abilita il componente aggiuntivo senza specificare una revisione, verrà installata una revisione supportata predefinita.

Per specificare una revisione, eseguire i passaggi seguenti.

  1. Usare il comando az aks mesh get-revisions per verificare quali revisioni sono disponibili per versioni di cluster del servizio Azure Container distinte in un'area geografica.
  2. In base alle revisioni disponibili, è possibile includere il contrassegno --revision asm-X-Y (ex: --revision asm-1-20) nel comando di abilitazione in uso per l'installazione della mesh.

Installare la mesh durante la creazione del cluster

Per installare il componente aggiuntivo Istio durante la creazione del cluster, usare il parametro --enable-azure-service-mesh o --enable-asm.

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

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

Installare la mesh per il cluster esistente

L'esempio seguente abilita il componente aggiuntivo Istio per un cluster del servizio Azure Kubernetes esistente:

Importante

Non è possibile abilitare il componente aggiuntivo Istio in un cluster esistente se nel cluster si trova già un componente aggiuntivo OSM. Disinstallare il componente aggiuntivo OSM prima di installare il componente aggiuntivo Istio. Per altre informazioni, vedere Disinstallare il componente aggiuntivo OSM dal cluster del servizio Azure Kubernetes. Il componente aggiuntivo Istio può essere abilitato solo nei cluster del servizio Azure Kubernetes della versione >= 1.23.

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

Verificare l'esito positivo dell'installazione

Per verificare che il componente aggiuntivo Istio sia installato nel cluster, eseguire il comando seguente:

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

Confermare che l'output mostri Istio.

Usare az aks get-credentials per le credenziali per il cluster del servizio Azure Kubernetes:

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

Usare kubectl per verificare che istiod i pod (piano di controllo Istio) siano in esecuzione correttamente:

kubectl get pods -n aks-istio-system

Verificare che il pod istiod sia nello stato Running. Ad esempio:

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

Abilitare l’injection sidecar

Per installare automaticamente sidecar in qualsiasi nuovo pod, è necessario annotare gli spazi dei nomi con l'etichetta di revisione corrispondente alla revisione del piano di controllo attualmente installata.

Se non si conosce la revisione attualmente installata, usare:

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

Applicare nuova etichetta di revisione:

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

Importante

L'etichettatura predefinita istio-injection=enabled non funziona. È necessario che il controllo delle versioni esplicito corrisponda alla revisione del piano di controllo (ad esempio, istio.io/rev=asm-1-18).

Per l'injection manuale del sidecar tramite istioctl kube-inject, è necessario specificare parametri aggiuntivi per istioNamespace (-i) e revision (-r). Ad esempio:

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

Attivare l'inserimento sidecar

È possibile distribuire l'applicazione di esempio fornita a scopo di test, o attivare l'inserimento sidecar per i carichi di lavoro esistenti.

Applicazioni esistenti

Se devono essere aggiunte applicazioni esistenti alla mesh, verificare che gli spazi dei nomi siano etichettati come nel passaggio precedente, quindi riavviare le distribuzioni per attivare l'inserimento sidecar:

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

Verificare che l'inserimento sidecar sia andato a buon fine a garanzia che tutti i contenitori siano pronti e facciano riferimento al contenitore istio-proxy nell'output kubectl describe, ad esempio:

kubectl describe pod -n namespace <pod name>

Il contenitore istio-proxy è nel sidecar Envoy. Ora l'applicazione fa parte del piano dati.

Distribuire l'applicazione di esempio

Usare kubectl apply per distribuire l'applicazione di esempio nel cluster:

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

Nota

I cluster che usano un proxy HTTP per l'accesso a Internet in uscita dovranno configurare una voce di servizio. Per istruzioni sull'installazione, vedere Supporto del proxy HTTP in servizio Azure Kubernetes

Verificare che nel cluster siano stati creati più servizi e distribuzioni. Ad esempio:

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

Usare kubectl get services per verificare che i servizi siano stati creati correttamente:

kubectl get services

Confermare che siano stati distribuiti i servizi seguenti:

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

Confermare che tutti i pod abbiano lo stato Running con due contenitori nella colonna READY. Il secondo contenitore (istio-proxy) aggiunto a ogni pod è il sidecar Envoy inserito da Istio, mentre l'altro è il contenitore dell'applicazione.

Per testare questa applicazione di esempio in ingresso, eseguire il checkout dei passaggi successivi.

Eliminare risorse

Usare kubectl delete per eliminare l'applicazione di esempio:

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

Se non si intende abilitare Istio in ingresso nel cluster e si desidera disabilitare il componente aggiuntivo Istio, eseguire il comando seguente:

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

Attenzione

La disabilitazione del componente aggiuntivo mesh di servizi rimuoverà completamente il piano di controllo Istio dal cluster.

I mesh di servizi Istio CustomResourceDefintion(CRD) non vengono eliminati per impostazione predefinita. Per pulirli, usare:

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

Usare az group delete per eliminare il cluster e le risorse associate:

az group delete --name ${RESOURCE_GROUP} --yes --no-wait

Passaggi successivi