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 o guia para 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.
- 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. - 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 \
--generate-ssh-keys
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
istiod-asm-1-18-74f7f7c46c-4nt2v 1/1 Running 0 2m
Habilitar injeção de sidecar
Para instalar automaticamente o sidecar em novos pods, você precisa 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
Observação
Clusters que usam um proxy HTTP para acesso à internet precisarão configurar uma Entrada de Serviço. Para instruções de configuração, confira Suporte a proxy HTTP no Serviço de Kubernetes do Azure
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 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 (CustomResourceDefintion
s) 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
Azure Kubernetes Service