Esta página mostra como resolver problemas de perda de pacotes do Cloud NAT de um cluster do Google Kubernetes Engine (GKE) nativo da VPC com nós privados ativados.
As VMs de nós em clusters do GKE nativos da VPC com nós privados não têm endereços IP externos. Isto significa que os clientes na Internet não podem estabelecer ligação aos endereços IP dos nós. Pode usar o Cloud NAT para atribuir os endereços IP externos e as portas que permitem que os clusters com nós privados façam ligações públicas.
Se uma VM de nó ficar sem a respetiva atribuição de portas externas e endereços IP do Cloud NAT, os pacotes são ignorados. Para evitar esta situação, pode reduzir a taxa de pacotes de saída ou aumentar a atribuição de endereços IP de origem e portas do Cloud NAT disponíveis. As secções seguintes descrevem como diagnosticar e resolver problemas de perda de pacotes do Cloud NAT no contexto de clusters do GKE com nós privados.
Diagnostique a perda de pacotes
As secções seguintes explicam como registar pacotes rejeitados através do Cloud Logging e diagnosticar a causa dos pacotes rejeitados através do Cloud Monitoring.
Registe pacotes rejeitados
Pode registar pacotes rejeitados com a seguinte consulta no Cloud Logging:
resource.type="nat_gateway" resource.labels.region=REGION resource.labels.gateway_name=GATEWAY_NAME jsonPayload.allocation_status="DROPPED"
Substitua o seguinte:
REGION
: o nome da região em que o cluster se encontra.GATEWAY_NAME
: o nome do gateway do Cloud NAT.
Este comando devolve uma lista de todos os pacotes rejeitados por uma gateway do Cloud NAT, mas não identifica a causa.
Monitorize as causas da perda de pacotes
Para identificar as causas dos pacotes perdidos, consulte o observador de métricas no Cloud Monitoring. Os pacotes são ignorados por um de três motivos:
OUT_OF_RESOURCES
ENDPOINT_INDEPENDENT_CONFLICT
NAT_ALLOCATION_FAILED
Para identificar pacotes rejeitados devido aos códigos de erro OUT_OF_RESOURCES
ou ENDPOINT_ALLOCATION_FAILED
, use a seguinte consulta:
fetch nat_gateway metric 'router.googleapis.com/nat/dropped_sent_packets_count' filter (resource.gateway_name == GATEWAY_NAME) align rate(1m) every 1m group_by [metric.reason], [value_dropped_sent_packets_count_aggregate: aggregate(value.dropped_sent_packets_count)]
Se identificar pacotes que são ignorados por estes motivos, consulte os artigos Pacotes ignorados com o motivo: sem recursos e Pacotes ignorados com o motivo: conflito independente do ponto final para obter sugestões de resolução de problemas.
Para identificar pacotes rejeitados devido ao código de erro NAT_ALLOCATION_FAILED
, use a seguinte consulta:
fetch nat_gateway metric 'router.googleapis.com/nat/nat_allocation_failed' group_by 1m, [value_nat_allocation_failed_count_true: count_true(value.nat_allocation_failed)] every 1m
Se identificar pacotes que foram rejeitados por este motivo, consulte a secção Precisa de atribuir mais endereços IP.
Investigue a configuração do Cloud NAT
Se as consultas anteriores devolverem resultados vazios e os pods do GKE não conseguirem comunicar com endereços IP externos, use a tabela seguinte para ajudar a resolver problemas com a sua configuração:
Configuração | Resolução de problemas |
O Cloud NAT está configurado para se aplicar apenas ao intervalo de endereços IP principal da sub-rede. |
Quando o Cloud NAT está configurado apenas para o intervalo de endereços IP principal da sub-rede, os pacotes enviados do cluster para endereços IP externos têm de ter um endereço IP do nó de origem. Nesta configuração do Cloud NAT:
|
Cloud NAT configurado para aplicar apenas ao intervalo de endereços IP secundários da sub-rede usado para IPs de pods. |
Quando o Cloud NAT está configurado apenas para o intervalo de endereços IP secundários da sub-rede usado pelos IPs dos pods do cluster, os pacotes enviados do cluster para endereços IP externos têm de ter um endereço IP do pod de origem. Nesta configuração do Cloud NAT:
|
Reduza a perda de pacotes
Depois de diagnosticar a causa da perda de pacotes, considere usar as seguintes recomendações para reduzir a probabilidade de o problema ocorrer novamente no futuro:
Configure o gateway NAT da nuvem para usar a atribuição dinâmica de portas e aumentar o número máximo de portas por VM.
Se estiver a usar a atribuição de portas estáticas, aumente o número mínimo de portas por MV.
Reduza a taxa de pacotes de saída da sua aplicação. Quando uma aplicação faz várias ligações de saída para o mesmo endereço IP e porta de destino, pode consumir rapidamente todas as ligações que o Cloud NAT pode fazer a esse destino através do número de endereços de origem NAT e tuplos de portas de origem atribuídos.
Para ver detalhes sobre como o Cloud NAT usa endereços de origem NAT e portas de origem para fazer ligações, incluindo limites no número de ligações simultâneas a um destino, consulte Portas e ligações.
Para reduzir a taxa de ligações de saída da aplicação, reutilize as ligações abertas. Os métodos comuns de reutilização de ligações incluem o agrupamento de ligações, a multiplexagem de ligações através de protocolos como o HTTP/2 ou o estabelecimento de ligações persistentes reutilizadas para vários pedidos. Para mais informações, consulte Portas e ligações.
O que se segue?
Se não conseguir encontrar uma solução para o seu problema na documentação, consulte a secção Obtenha apoio técnico para receber mais ajuda, incluindo aconselhamento sobre os seguintes tópicos:
- Abrindo um registo de apoio ao cliente através do contacto com o Cloud Customer Care.
- Receber apoio técnico da comunidade fazendo perguntas no StackOverflow e usando a etiqueta
google-kubernetes-engine
para pesquisar problemas semelhantes. Também pode juntar-se ao#kubernetes-engine
canal do Slack para receber mais apoio técnico da comunidade. - Abrir erros ou pedidos de funcionalidades através do rastreador de problemas público.