Compartilhar via


Solução de problemas gerais do complemento de malha de serviço do Istio

Este artigo discute estratégias gerais (que usam kubectlo , istioctle 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

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

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

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.