Solucionar problemas de conexões com pontos de extremidade fora da rede virtual
Este artigo discute como solucionar problemas de conexões com pontos de extremidade fora da rede virtual (ou seja, por meio da Internet pública) de um cluster do AKS (Serviço de Kubernetes do Microsoft Azure).
Pré-requisitos
A ferramenta de URL do cliente (curl).
A ferramenta kubectl do Kubernetes ou uma ferramenta semelhante para se conectar ao cluster. Para instalar o kubectl usando a CLI do Azure, execute o comando az aks install-cli .
Lista de verificação de solução de problemas
O problema é persistente?
Etapa 1: Fazer a solução de problemas básica
Verifique se você pode se conectar a pontos de extremidade públicos na Internet. Para obter instruções, consulte Solução de problemas básicos de conexões de cluster do AKS de saída.
Etapa 2: Determinar o tipo de saída para o cluster do AKS
Para identificar o tipo de saída do cluster do AKS, execute o comando az aks show :
az aks show --resource-group <resource_group> --name <cluster_name> --query "networkProfile.outboundType"
Se o tipo de saída for loadBalancer
, não haverá tabela de rotas, a menos que você use a rede kubenet . Se você usar kubenet, certifique-se de que a tabela de rotas padrão não tenha nenhuma configuração adicional que bloqueie a conexão de saída com a Internet. Se você usar outra rede, como CNI do Azure, Alocação Dinâmica ou Sobreposição de CNI do Azure, nenhuma tabela de rotas será criada por padrão. Nesse caso, verifique se o NSG (grupo de segurança de rede) não tem nenhuma configuração personalizada que bloqueie a conexão de saída com a Internet.
Se o tipo de saída for userDefinedRouting
, verifique se as seguintes condições foram atendidas:
O dispositivo de saída (firewall ou proxy) está acessível.
O dispositivo de saída permite o tráfego de saída necessário do cluster.
Para obter a lista de FQDNs permitidos para o cluster do AKS, execute o comando az aks egress-endpoints list :
az aks egress-endpoints list --resource-group <resource_group> --name <cluster_name>
Se o tipo de saída for managedNATGateway
, verifique se a sub-rede do AKS está associada ao gateway NAT executando o comando az network nat gateway show :
az network nat gateway show --resource-group <resource_group> --name <nat_gateway_name> --query "subnets[].id"
Para obter mais informações sobre como usar um gateway NAT junto com o AKS, consulte Gateway NAT gerenciado.
Etapa 3: Examine a saída curl ao se conectar ao pod do aplicativo
Os códigos de resposta de curl podem ajudá-lo a identificar o tipo de problema. Depois que o código de resposta estiver disponível, tente entender melhor como o problema se comporta. Para obter mais informações sobre os códigos de status HTTP e o comportamento subjacente do problema, consulte a tabela a seguir.
Fonte de informação | Link |
---|---|
Autoridade para Atribuição de Números da Internet (IANA) | Registro de código de status do Hypertext Transfer Protocol (HTTP) |
Mozilla | Códigos de status de resposta HTTP |
Wikipédia | Lista de códigos de status de HTTP |
Os códigos de status HTTP a seguir podem indicar os problemas listados.
Código de status de HTTP | Problema | Exemplo |
---|---|---|
4xx |
|
|
5xx |
Um problema afeta o servidor. | O aplicativo está inativo ou um gateway não está funcionando. |
Você pode tentar se conectar ao ponto de extremidade do aplicativo usando curl. Aqui está um exemplo de comando e saída:
# 404 error code example
$ curl -vv <host IP address>/test.index
* Trying <host IP address>:80...
* TCP_NODELAY set
* Connected to <host IP address> (<host IP address>) port 80 (#0)
> GET /test.index HTTP/1.1
> Host: <host IP address>
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
...
* Connection #0 to host <host IP address> left intact
Etapa 4: verificar o que acontece se o tráfego de saída ignorar temporariamente o dispositivo virtual
Para testes rápidos para determinar se o dispositivo de saída (dispositivo virtual) causa o problema, você pode permitir temporariamente que todo o tráfego passe pela Internet. Para definir essa configuração, você pode alterar o endereço IP padrão e a rota de porta por meio do 0.0.0.0
/0
dispositivo virtual para passar pela Internet.
Se o dispositivo de saída funcionar bem ao ignorar o dispositivo virtual, verifique os logs do dispositivo virtual para ver quais pacotes são negados e adicione regras de permissão no dispositivo virtual de acordo.
O problema é intermitente?
Você pode ter problemas intermitentes de saída por vários motivos. Para solucionar problemas de conexão de saída intermitente, tente as seguintes etapas:
Etapa 1: Verificar se os recursos do pod ou do nó estão esgotados
Execute os seguintes comandos para verificar o quanto os recursos são usados:
kubectl top pods
kubectl top nodes
Etapa 2: verifique se o disco do sistema operacional é muito usado
Para verificar se o disco do sistema operacional é muito usado, siga estas etapas:
No portal do Azure, pesquise e selecione Conjuntos de dimensionamento de máquinas virtuais.
Na lista de conjuntos de dimensionamento, selecione o conjunto de dimensionamento usado para o cluster do AKS.
No painel de navegação do conjunto de dimensionamento, vá para a seção Monitoramento e selecione Métricas.
Exiba as métricas de disco para o conjunto de dimensionamento na seção Métricas procurando os campos a seguir.
Campo Valor Escopo Nome da VMSS Namespace de métricas Host de Máquina Virtual Métricas Métrica do sistema operacional e do disco de dados
Para obter mais informações sobre métricas, consulte Métricas de disco do sistema operacional e disco de dados.
Para exibir as recomendações do AKS sobre a utilização do disco, siga estas etapas:
No portal do Azure, pesquise e selecione Serviços do Kubernetes.
Na lista de serviços do Kubernetes, selecione o nome do cluster do AKS.
No painel de navegação do cluster do AKS, vá para a seção Monitoramento e selecione Recomendações do Assistente.
Revise as recomendações listadas sobre o uso do disco.
Se o disco do sistema operacional for muito usado, considere usar as seguintes soluções:
Aumente o tamanho do disco do sistema operacional.
Alterne para discos do sistema operacional efêmero.
Se essas soluções não resolverem o problema, analise o processo que executa operações pesadas de leitura/gravação no disco. Em seguida, verifique se você pode mover as ações para um disco de dados em vez do disco do sistema operacional.
Etapa 3: verifique se a porta de conversão do endereço de rede de origem está esgotada
Se os aplicativos estiverem fazendo muitas conexões de saída, eles poderão esgotar o número de portas disponíveis no endereço IP do dispositivo de saída. Siga o diagnóstico do balanceador de carga padrão com métricas, alertas e integridade de recursos para monitorar o uso e a alocação da porta SNAT (conversão de endereços de rede) de origem do balanceador de carga existente. Monitore para verificar ou determinar o risco de esgotamento da porta SNAT.
Você está atingindo ou excedendo o número máximo de portas SNAT alocadas? Nesse caso, você pode verificar seu aplicativo para determinar se ele está reutilizando conexões existentes. Para obter mais informações, consulte Projetar seus aplicativos para usar conexões com eficiência.
Se você achar que o aplicativo está configurado corretamente e precisar de mais portas SNAT do que o número padrão de portas alocadas, siga estas etapas:
Aumente o número de IPs públicos no dispositivo de saída. Se o dispositivo de saída for o balanceador de carga, você poderá Aumentar o número de endereços IP públicos no balanceador de carga.
Aviso de isenção de responsabilidade para contatos de terceiros
A Microsoft fornece informações de contato de terceiros para ajudá-lo a encontrar informações adicionais sobre esse tópico. Essas informações de contato podem ser alteradas sem aviso prévio. A Microsoft não garante a precisão das informações de contato de terceiros.
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.