Solução de problemas gerais do complemento de malha de serviço do Istio
Este artigo discute estratégias gerais (que usam kubectl
o , istioctl
e outras ferramentas) para solucionar problemas relacionados ao complemento de malha de serviço do Istio para o AKS (Serviço de Kubernetes do Microsoft Azure). Este artigo também fornece uma lista de possíveis mensagens de erro, motivos para ocorrências de erros e recomendações para resolver esses erros.
Pré-requisitos
A ferramenta kubectl do Kubernetes ou uma ferramenta semelhante para se conectar ao cluster
Observação: para instalar o kubectl usando a CLI do Azure, execute o comando az aks install-cli .
A ferramenta de linha de comando Istio istioctl
A ferramenta URL do cliente (cURL)
Lista de verificação de solução de problemas: usando kubectl
As etapas de solução de problemas a seguir usam vários kubectl
comandos para ajudá-lo a depurar pods travados ou falhas no daemon do Istio (Istiod).
Etapa 1: Obter logs do pod Istiod
Obtenha os logs do pod Istiod executando o seguinte comando kubectl logs :
kubectl logs --selector app=istiod --namespace aks-istio-system
Etapa 2: devolver (excluir) um pod
Você pode ter um bom motivo para reiniciar um pod. Como o Istiod é uma implantação, é seguro simplesmente excluir o pod executando o comando kubectl delete :
kubectl delete pods <istio-pod> --namespace aks-istio-system
O pod do Istio é gerenciado por uma implantação. Ele é recriado e reimplantado automaticamente depois que você o exclui diretamente. Portanto, excluir o pod é um método alternativo para reiniciar o pod.
Observação
Como alternativa, você pode reiniciar a implantação diretamente executando o seguinte comando kubectl rollout restart :
kubectl rollout restart deployment <istiod-asm-revision> --namespace aks-istio-system
Etapa 3: Verificar o status dos recursos
Se o Istiod não estiver agendado ou se o pod não estiver respondendo, talvez você queira verificar o status da implantação e dos conjuntos de réplicas. Para fazer isso, execute o comando kubectl get :
kubectl get <resource-type> [[--selector app=istiod] | [<resource-name>]]
O status atual do recurso aparece próximo ao final da saída. A saída também pode exibir eventos associados ao loop do controlador.
Etapa 4: Obter tipos de definição de recursos personalizados
Para visualizar os tipos de definições de recursos personalizados (CRDs) que o Istio usa, execute o kubectl get
comando:
kubectl get crd | grep istio
Para listar todos os nomes de recursos baseados em um CRD específico, execute o seguinte kubectl get
comando:
kubectl get <crd-type> --all-namespaces
Etapa 5: Visualizar a lista de pods do Istiod
Para visualizar a lista de pods do Istiod, execute o seguinte kubectl get
comando:
kubectl get pod --namespace aks-istio-system --output yaml
Etapa 6: Obter mais informações sobre a configuração do Envoy
Se você tiver problemas de conectividade entre pods, obtenha mais informações sobre a configuração do Envoy executando o seguinte comando kubectl exec na porta de administração do Envoy:
kubectl exec --namespace <pod-namespace> \
"$(kubectl get pods \
--namespace <pod-namespace> \
--selector app=sleep \
--output jsonpath='{.items[0].metadata.name}')" \
--container sleep \
-- curl -s localhost:15000/clusters
Etapa 7: Obter os registros auxiliares para os sidecars de origem e destino
Recupere os logs auxiliares para os sidecars de origem e destino executando o seguinte kubectl logs
comando duas vezes (a primeira vez para o pod de origem e a segunda vez para o pod de destino):
kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy
Lista de verificação de solução de problemas: usando istioctl
As etapas de solução de problemas a seguir descrevem como coletar informações e depurar seu ambiente de malha executando vários istioctl
comandos.
Todos os istioctl
comandos devem ser executados junto com o --istioNamespace aks-istio-system
sinalizador para apontar para a instalação do complemento do AKS do Istio.
Aviso
Alguns istioctl
comandos enviam solicitações para todos os sidecars.
Observação
Antes de começar, observe que a maioria dos istioctl
comandos exige que você conheça a revisão do plano de controle. Você pode obter essas informações do sufixo das implantações do Istiod ou dos pods, ou pode executar o seguinte comando istioctl tag list :
istioctl tag list
Etapa 1: verifique se o Istio está instalado corretamente
Para verificar se você tem uma instalação correta do complemento do Istio, execute o seguinte comando istioctl verify-install :
istioctl verify-install --istioNamespace aks-istio-system --revision <tag>
Etapa 2: Analisar namespaces
Para analisar todos os namespaces ou analisar um namespace específico, execute o seguinte comando istioctl analyze :
istioctl analyze --istioNamespace aks-istio-system \
--revision <tag> \
[--all-namespaces | --namespace <namespace-name>] \
[--failure-threshold {Info | Warning | Error}]
Etapa 3: Obter o status do proxy
Para recuperar o status do proxy, execute o seguinte comando istioctl proxy-status :
istioctl proxy-status pod/<pod-name> \
--istioNamespace aks-istio-system \
--revision <tag> \
--namespace <pod-namespace>
Etapa 4: baixar a configuração do proxy
Para baixar a configuração do proxy, execute o seguinte comando istioctl proxy-config all :
istioctl proxy-config all <pod-name> \
--istioNamespace aks-istio-system \
--namespace <pod-namespace> \
--output json
Observação
Em vez de usar a all
variante do istioctl proxy-config
comando, você pode usar uma das seguintes variantes:
- Istioctl proxy-config ECDS (serviço de descoberta de configuração de extensão)
- Bootstrap de configuração de proxy istioctl
- cluster de configuração de proxy istioctl
- endpoint de configuração de proxy istioctl
- istioctl proxy-config listener
- istioctl proxy-config log
- Rota de configuração de proxy istioctl
- istioctl proxy-config secret
Etapa 5: verifique o status da injeção
Para verificar o status de injeção do recurso, execute o seguinte comando istioctl experimental check-inject :
istioctl experimental check-inject --istioNamespace aks-istio-system \
--namespace <pod-namespace> \
--labels <label-selector> | <pod-name> | deployment/<deployment-name>
Etapa 6: obter um relatório de bug completo
Um relatório de bug completo contém as informações mais detalhadas. No entanto, a execução desse relatório pode ser demorada em um cluster grande porque inclui todos os pods. Você pode limitar o relatório de bug a determinados namespaces. Você também pode limitar o relatório a determinadas implantações, pods ou seletores de rótulo.
Para recuperar um relatório de bug, execute o seguinte comando istioctl bug-report :
istioctl bug-report --istioNamespace aks-istio-system \
[--include <namespace-1>[, <namespace-2>[, ...]]]
Lista de verificação de solução de problemas: problemas diversos
Etapa 1: Corrigir problemas de uso de recursos
Se você encontrar um alto consumo de memória no Envoy, verifique novamente as configurações do Envoy para coleta de dados estatísticos. Se você estiver personalizando as métricas do Istio por meio do MeshConfig, lembre-se de que determinadas métricas podem ter alta cardinalidade e, portanto, criar um volume de memória maior. Outros campos em MeshConfig, como simultaneidade, afetam o uso da CPU e devem ser configurados com cuidado.
Por padrão, o Istio adiciona informações sobre todos os serviços que estão no cluster a cada configuração do Envoy. O sidecar pode limitar o escopo dessa adição a cargas de trabalho que estão apenas dentro de namespaces específicos. Para obter mais informações, consulte Cuidado com essa armadilha de memória sidecar do proxy do Istio.
Por exemplo, a aks-istio-system
seguinte Sidecar
definição no namespace restringe a configuração do Envoy para todos os proxies na malha e aks-istio-system
outras cargas de trabalho dentro do mesmo namespace que esse aplicativo específico:
apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
name: sidecar-restrict-egress
namespace: aks-istio-system # Needs to be deployed in the root namespace.
spec:
egress:
- hosts:
- "./*"
- "aks-istio-system/*"
Você também pode tentar usar a opção discoverySelectors do Istio no MeshConfig. A discoverySelectors
opção contém uma matriz de seletores do Kubernetes e pode restringir o reconhecimento do Istiod a namespaces específicos (em oposição a todos os namespaces no cluster). Para obter mais informações, consulte Usar seletores de descoberta para configurar namespaces para sua malha de serviço do Istio.
Etapa 2: corrigir problemas de configuração incorreta de tráfego e segurança
Para resolver problemas comuns de gerenciamento de tráfego e configuração incorreta de segurança que os usuários do Istio encontram com frequência, consulte Problemas de gerenciamento de tráfego e Problemas de segurança no site do Istio.
Para obter links para discussões sobre outros problemas, como injeção de sidecar, observabilidade e atualizações, consulte Problemas comuns no site de documentação do Istio.
Etapa 3: evitar a sobrecarga do CoreDNS
Problemas relacionados à sobrecarga do CoreDNS podem exigir que você altere determinadas configurações de DNS do Istio, como o dnsRefreshRate
campo na definição do Istio MeshConfig.
Etapa 4: corrigir as condições de corrida do pod e do sidecar
Se o pod do aplicativo for iniciado antes do início do sidecar do Envoy, o aplicativo poderá parar de responder ou poderá ser reiniciado. Para obter instruções sobre como evitar esse problema, consulte Pod ou contêineres começam com problemas de rede se istio-proxy não estiver pronto. Especificamente, definir o holdApplicationUntilProxyStarts
campo MeshConfig em defaultConfig
como true
pode ajudar a evitar essas condições de corrida.
Etapa 5: Configurar uma entrada de serviço ao usar um proxy HTTP para tráfego de saída
Se o cluster usar um proxy HTTP para acesso de saída à Internet, você precisará configurar uma entrada de serviço. Para obter mais informações, consulte Suporte a proxy HTTP no Serviço Kubernetes do Azure.
Mensagens de erro
A tabela a seguir contém uma lista de possíveis mensagens de erro (para implantar o complemento, habilitar gateways de entrada e executar atualizações), o motivo pelo qual ocorreu um erro e recomendações para resolvê-lo.
Erro | Motivo | Recomendações |
---|---|---|
Azure service mesh is not supported in this region |
O recurso não está disponível na região durante a versão prévia (está disponível na nuvem pública, mas não na nuvem soberana). | Consulte a documentação pública sobre o recurso em regiões com suporte. |
Missing service mesh mode: {} |
Você não definiu a propriedade mode no perfil de malha de serviço da solicitação de cluster gerenciado. | No campo ServiceMeshProfile da managedCluster solicitação de API, defina a mode propriedade como Istio . |
Invalid istio ingress mode: {} |
Você define um valor inválido para o modo de entrada ao adicionar entrada no perfil da malha de serviço. | Defina o modo de entrada na solicitação de API como ou External Internal . |
Too many ingresses for type: {}. Only {} ingress gateway are allowed |
Você tentou criar muitas entradas no cluster. | Crie, no máximo, uma entrada externa e uma entrada interna no cluster. |
Istio profile is missing even though Service Mesh mode is Istio |
Você ativou o complemento do Istio sem fornecer o perfil do Istio. | Ao habilitar o complemento do Istio, especifique informações específicas do componente (gateway de entrada, CA de plug-in) para o perfil do Istio e a revisão específica. |
Istio based Azure service mesh is incompatible with feature %s |
Você tentou usar outra extensão, complemento ou recurso que atualmente é incompatível com o complemento do Istio (por exemplo, Open Service Mesh). | Antes de ativar o complemento do Istio, desative o outro recurso primeiro e limpe todos os recursos correspondentes. |
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority |
Você não forneceu todos os parâmetros necessários para a CA do plug-in. | Forneça todos os parâmetros necessários para o recurso de autoridade de certificação (CA) do plug-in (para obter mais informações, consulte Configurar o complemento de service mesh baseado em Istio com certificados de CA de plug-in). |
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature |
Você não habilitou o complemento Driver CSI do Repositório de Segredos do AKS antes de usar a AC do plug-in. | Configure o Azure Key Vault antes de usar o recurso de AC do plug-in. |
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' |
Você usou uma ID de recurso do AKS inválida. | Consulte o formato mencionado na mensagem de erro para definir uma ID válida do Azure Key Vault para o recurso de AC do plug-in. |
Kubernetes version is missing in orchestrator profile |
Sua solicitação não tem a versão do Kubernetes. Portanto, ele não pode fazer uma verificação de compatibilidade de versão. | Certifique-se de fornecer a versão do Kubernetes nas operações de upgrade de complemento do Istio. |
Service mesh revision %s is not compatible with cluster version %s. To find information about mesh-cluster compatibility, use 'az aks mesh get-upgrades' |
Você tentou habilitar uma revisão de complemento do Istio que é incompatível com a versão atual do cluster do Kubernetes. | Use o comando az aks mesh get-upgrades da CLI do Azure para saber quais revisões de complemento do Istio estão disponíveis para o cluster atual. |
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' |
Você está usando uma versão do Kubernetes sem suporte. | Atualize para uma versão compatível do Kubernetes. |
ServiceMeshProfile revision field must not be empty |
Você tentou atualizar o complemento do Istio sem especificar uma revisão. | Especifique a revisão e todos os outros parâmetros (para obter mais informações, consulte Atualização de revisão secundária). |
Request exceeds maximum allowed number of revisions (%d) |
Você tentou fazer uma operação de atualização mesmo que já (%d) existam revisões instaladas. |
Conclua ou reverta a operação de atualização antes de atualizar para outra revisão. |
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information |
Você tentou acessar informações de revisão e compatibilidade antes de concluir ou reverter a operação de atualização atual. | Conclua ou reverta a operação de atualização atual antes de recuperar as informações de revisão e compatibilidade. |
Referências
Para obter dicas gerais sobre a depuração do Istio, consulte Ferramentas de diagnóstico do Istio
Solução de problemas do MeshConfig do complemento de malha de serviço do Istio
Solução de problemas do gateway de entrada do complemento do Service Mesh do Istio
Solução de problemas de atualização de revisão secundária do complemento do Service Mesh do Istio
Solução de problemas de certificado CA do plug-in do complemento do Service Mesh do Istio
Aviso de isenção de responsabilidade para informações de terceiros
Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, do desempenho ou da confiabilidade desses produtos.
Entre em contato conosco para obter ajuda
Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.