Share via


Implantar o complemento de malha de serviço baseado em Istio para o Serviço de Kubernetes do Azure

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

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

Antes de começar

  • O complemento exige a CLI do Azure versão 2.57.0 ou posterior instalada. Execute az --version para verificar a versão. Para instalar ou atualizar, confira Instalar a CLI do Azure.

  • Para encontrar informações sobre quais revisões do complemento do Istio estão disponíveis em uma região e sua compatibilidade com versões de cluster do 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>

Instalar o complemento Istio

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

Seleção de revisão

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

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

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

Instalar a malha durante a criação do cluster

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

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

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

Instalar a malha para o cluster existente

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

Importante

Não é possível habilitar 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, confira Desinstalar o complemento OSM do cluster do AKS. O complemento Istio só pode ser habilitado em clusters do AKS da versão >= 1.23.

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

Verifique se a instalação 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 para as credenciais do cluster do AKS:

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

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

kubectl get pods -n aks-istio-system

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

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

Habilitar injeção de sidecar

Para instalar automaticamente o sidecar em novos pods, você precisará anotar seus namespaces com o rótulo de revisão correspondente à revisão do painel de controle instalada no momento.

Se você 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 istio-injection=enabled padrão não funciona. O controle de versão explícito que corresponde à revisão do plano de controle (por exemplo: istio.io/rev=asm-1-18) é necessário.

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

Disparar injeção de sidecar

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

Aplicativos existentes

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

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

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

kubectl describe pod -n namespace <pod name>

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

Implantar um aplicativo 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 no 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 o status de Running com dois contêineres na coluna READY. O segundo contêiner (istio-proxy) adicionado a cada pod é o sidecar Envoy injetado pelo Istio e o outro é o contêiner do aplicativo.

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

Excluir 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 no cluster e deseja desabilitar o complemento Istio, execute o seguinte comando:

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

Cuidado

Desabilitar o complemento de malha de serviço removerá completamente o painel de controle Istio do cluster.

Os CRDs (CustomResourceDefintions) do Istio não são excluídos por padrão. Para apagá-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óximas etapas