Problemas de balanceamento de carga no Google Kubernetes Engine (GKE) podem causar interrupções no serviço, como erros HTTP 502, ou impedir o acesso aos aplicativos.
Use este documento para saber como resolver erros de 502 do Entrada
externo e como usar registros do balanceador de carga e ferramentas de diagnóstico, como
check-gke-ingress, para identificar problemas.
Essas informações são importantes para administradores e operadores de plataforma e desenvolvedores de aplicativos que configuram e mantêm serviços com balanceamento de carga no GKE. Para mais informações sobre as funções comuns e exemplos de tarefas que mencionamos no conteúdo do Cloud de Confiance by S3NS , consulte Funções e tarefas comuns do usuário do GKE.
A Entrada externa produz erros HTTP 502
Use as orientações a seguir para solucionar erros HTTP 502 com recursos de Entrada externa:
- Ative os registros para cada serviço de back-end associado a cada serviço do GKE referenciado pela Entrada.
- Use os detalhes do status para identificar as causas das respostas HTTP 502. Os detalhes do status que indicam a resposta HTTP 502 originada do back-end exigem solução de problemas nos pods de exibição, não no balanceador de carga.
Grupos de instâncias não gerenciadas
É possível que ocorram erros HTTP 502 com os recursos de Entrada externos se sua Entrada externa usar back-ends de grupos de instâncias não gerenciados. Esse problema ocorre quando todas as condições a seguir são atendidas:
- O cluster tem um grande número total de nós em todos os pools.
- Os pods de exibição para um ou mais serviços que são referenciados pela Entrada estão localizados em apenas alguns nós.
- Os serviços referenciados pela Entrada usam
externalTrafficPolicy: Local.
Para determinar se a Entrada externa usa back-ends de grupos de instâncias não gerenciadas, faça o seguinte:
Acesse a página Entrada no console do Cloud de Confiance .
Clique no nome do Ingress externo.
Clique no nome do balanceador de carga. A página Detalhes do balanceamento de carga é exibida.
Verifique a tabela na seção Serviços de back-end para determinar se a Entrada externa usa NEGs ou grupos de instâncias.
Para resolver esse problema, use um dos métodos a seguir.
- Use um cluster nativo de VPC.
- Use
externalTrafficPolicy: Clusterpara cada Serviço referenciado pelo Ingress externo. Essa solução faz com que você perca o endereço IP original do cliente nas origens do pacote. - Use a anotação
node.kubernetes.io/exclude-from-external-load-balancers=true: Adicione a anotação aos nós ou pools de nós que não executam qualquer pod de veiculação para qualquer serviço referenciado por qualquer entrada externa ou serviçoLoadBalancerno cluster.
Configuração de geração de registros do balanceador de carga L4
Esta seção fornece informações de solução de problemas se você tiver ativado o registro em log para o balanceador de carga de rede de passagem externa ou interna.
Monitorar o status da configuração de geração de registros
O controlador L4LB do GKE fornece feedback sobre o status de reconciliação do
registro em registros pelo tipo status.conditions do serviço. Para verificar
esse status, execute o comando a seguir:
kubectl get svc SERVICE_NAME -o yaml
Substitua:
SERVICE_NAME: o nome do cluster.
Na saída, procure o tipo de condição LoggingConfigManaged. A tabela a seguir descreve os possíveis motivos para a condição:
| Status da condição | Motivo | Descrição |
|---|---|---|
| Verdadeiro | Reconciliado | O controlador está aplicando ativamente a configuração de geração de registros definida no CRD L4LBConfig. |
| Falso | Não gerenciado | A seção logging está ausente do CRD L4LBConfig ou a anotação foi removida. O
controlador interrompeu o gerenciamento e deixou o serviço de back-end no último
estado conhecido. |
| Falso | Ausente | O recurso L4LBConfig referenciado na anotação de serviço não foi encontrado. |
| Falso | Inválida | O recurso L4LBConfig falhou na validação cruzada do parâmetro optionalFields. |
| Falso | Erro | Ocorreu um erro durante a reconciliação do serviço de back-end. |
Entender o comportamento de desaceleração
Se a anotação networking.gke.io/l4lb-config for removida do manifesto do Serviço
ou se o recurso L4LBConfig referenciado for excluído, a configuração
entrará em um estado Coast.
Nesse estado, o controlador do GKE para de gerenciar as configurações de registro em registros, mas não redefine o serviço de back-end Cloud de Confiance by S3NS para as configurações padrão. Em vez disso, o serviço de back-end permanece no último estado válido conhecido. Um evento de aviso geralmente é emitido para notificar que o Kubernetes não está mais controlando a configuração.
Usar registros do balanceador de carga para resolver problemas
É possível usar registros do balanceador de carga de rede de passagem interna e registros do balanceador de carga de rede de passagem externa para solucionar problemas com balanceadores de carga e correlacionar tráfego de balanceadores de carga para recursos do GKE.
Os registros são agregados por conexão e exportados quase em tempo real. Os registros são gerados para cada nó do GKE envolvido no caminho de dados de um serviço LoadBalancer, para o tráfego de entrada e saída. As entradas de registro incluem campos adicionais para recursos do GKE, como:
- Nome do cluster
- Local do cluster
- Nome do serviço
- Namespace do serviço
- Nome do pod
- Namespace do pod
Usar ferramentas de diagnóstico para resolver problemas
A ferramenta de diagnóstico check-gke-ingress inspeciona os recursos do Ingress em busca de
erros de configuração comuns. É possível usar a ferramenta check-gke-ingress das seguintes
maneiras:
- Execute a
ferramenta de linha de comando
gcpdiagno cluster. Os resultados do Ingress aparecem na seçãogke/ERR/2023_004da regra de verificação. - Use a ferramenta
check-gke-ingresssozinha ou como um plug-in do kubectl seguindo as instruções em check-gke-ingress.