Resolver problemas de balanceamento de carga no GKE

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:

  1. Ative os registros para cada serviço de back-end associado a cada serviço do GKE referenciado pela Entrada.
  2. 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:

  1. Acesse a página Entrada no console do Cloud de Confiance .

    Acessar o Ingress

  2. Clique no nome do Ingress externo.

  3. Clique no nome do balanceador de carga. A página Detalhes do balanceamento de carga é exibida.

  4. 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: Cluster para 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ço LoadBalancer no 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: