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
Observe que, se você optar por usar qualquer
istioctl
comando da CLI, precisará incluir um sinalizador para apontar para a instalação complementar do Istio:--istioNamespace aks-istio-system
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 o guia para 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.
- 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. - 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 \
--generate-ssh-keys
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
istiod-asm-1-18-74f7f7c46c-4nt2v 1/1 Running 0 2m
Ativar injeção no carro lateral
Para instalar automaticamente o sidecar em qualquer novo pod, você precisa 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
Nota
Os clusters que usam um proxy HTTP para acesso de saída à Internet precisarão configurar uma Entrada de Serviço. Para obter instruções de configuração, consulte Suporte a proxy HTTP no Serviço Kubernetes do Azure
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 dois 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 CustomResourceDefintion
s (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
Azure Kubernetes Service