Share via


Implementar o suplemento do Service Mesh baseado em Istio para Azure Kubernetes Service

Este artigo mostra como instalar o complemento de malha de serviço baseado em Istio para cluster do Serviço Kubernetes do Azure (AKS).

Para obter mais informações sobre o Istio e o complemento de malha de serviço, consulte Complemento de malha de serviço baseado em Istio para o Serviço Kubernetes do Azure.

Antes de começar

  • O complemento requer a CLI do Azure versão 2.57.0 ou posterior instalada. Você pode executar az --version para verificar a versão. Para instalar ou atualizar, consulte Instalar a CLI do Azure.

  • Para encontrar informações sobre quais revisões de complementos do Istio estão disponíveis em uma região e sua compatibilidade com versões de cluster AKS, use o comando az aks mesh get-revisions:

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

Definir variáveis de ambiente

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

Instale o complemento Istio

Esta seção inclui etapas para instalar o complemento Istio durante a criação do cluster ou habilitar para um cluster existente usando a CLI do Azure. Se você quiser instalar o complemento usando o Bicep, consulte Instalar um cluster AKS com o complemento de malha de serviço Istio usando o Bicep. Para saber mais sobre a definição de recurso do Bicep para um cluster AKS, consulte Referência do Bicep managedCluster.

Seleção de revisão

Se você habilitar o complemento sem especificar uma revisão, uma revisão padrão suportada será instalada para você.

Para especificar uma revisão, execute as etapas a seguir.

  1. Use o az aks mesh get-revisions comando para verificar quais revisões estão disponíveis para diferentes versões de cluster AKS em uma região.
  2. Com base nas revisões disponíveis, você pode incluir o --revision asm-X-Y sinalizador (ex: --revision asm-1-20) no comando enable usado para instalação de malha.

Instalar malha durante a criação do cluster

Para instalar o complemento Istio ao criar o cluster, use o --enable-azure-service-mesh parâmetro or--enable-asm .

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

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

Instalar malha para cluster existente

O exemplo a seguir habilita o complemento Istio para um cluster AKS existente:

Importante

Não é possível ativar o complemento Istio em um cluster existente se um complemento OSM já estiver no cluster. Desinstale o complemento OSM antes de instalar o complemento Istio. Para obter mais informações, consulte desinstalar o complemento OSM do cluster AKS. O complemento Istio só pode ser ativado em clusters AKS da versão >= 1.23.

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

Verificar se a instalação foi bem-sucedida

Para verificar se o complemento Istio está instalado no cluster, execute o seguinte comando:

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

Confirme se a saída mostra Istio.

Use az aks get-credentials as credenciais para seu cluster AKS:

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

Use kubectl para verificar se istiod os pods (plano de controle Istio) estão sendo executados com êxito:

kubectl get pods -n aks-istio-system

Confirme se o istiod pod tem um status de Running. Por exemplo:

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

Ativar injeção no carro lateral

Para instalar automaticamente o sidecar em qualquer novo pod, você precisará anotar seus namespaces com o rótulo de revisão correspondente à revisão do plano de controle atualmente instalada.

Se não tiver certeza de qual revisão está instalada, use:

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

Aplique o rótulo de revisão:

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

Importante

A rotulagem padrão istio-injection=enabled não funciona. É necessário um controle de versão explícito correspondente à revisão do plano de controle (ex: istio.io/rev=asm-1-18).

Para injeção manual de sidecar usando istioctl kube-inject, você precisa especificar parâmetros extras para istioNamespace (-i) e revision (-r). Por exemplo:

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

Injeção lateral de gatilho

Você pode implantar o aplicativo de exemplo fornecido para teste ou acionar a injeção de sidecar para cargas de trabalho existentes.

Aplicações existentes

Se você tiver aplicativos existentes a serem adicionados à malha, verifique se seus namespaces estão rotulados como na etapa anterior e, em seguida, reinicie suas implantações para acionar a injeção de sidecar:

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

Verifique se a injeção no sidecar foi bem-sucedida, garantindo que todos os recipientes estejam prontos e procurando o istio-proxy contêiner na kubectl describe saída, por exemplo:

kubectl describe pod -n namespace <pod name>

O istio-proxy contentor é o sidecar Envoy. Seu aplicativo agora faz parte do plano de dados.

Implementar aplicação de exemplo

Use kubectl apply para implantar o aplicativo de exemplo no cluster:

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

Confirme se várias implantações e serviços foram criados em seu cluster. Por exemplo:

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

Use kubectl get services para verificar se os serviços foram criados com êxito:

kubectl get services

Confirme se os seguintes serviços foram implantados:

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

Confirme se todos os pods têm status de Running com 2 contêineres na READY coluna. O segundo recipiente (istio-proxy) adicionado a cada pod é o sidecar Envoy injetado pelo Istio, e o outro é o recipiente de aplicação.

Para testar este aplicativo de exemplo em relação à entrada, confira as próximas etapas.

Eliminar recursos

Use kubectl delete para excluir o aplicativo de exemplo:

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

Se você não pretende habilitar a entrada do Istio em seu cluster e deseja desabilitar o complemento Istio, execute o seguinte comando:

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

Atenção

A desativação do complemento de malha de serviço removerá completamente o plano de controle Istio do cluster.

Istio CustomResourceDefintions (CRDs) não são excluídos por padrão. Para limpá-los, use:

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

Use az group delete para excluir o cluster e os recursos associados:

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

Próximos passos