Nesta página, mostramos como resolver problemas de perdas de pacotes do Cloud NAT em um cluster particular do Google Kubernetes Engine (GKE) nativo de VPC.
As VMs de nó nos clusters particulares do GKE nativos de VPC não têm endereços IP externos. Isso significa que os clientes na Internet não podem se conectar aos endereços IP dos nós. É possível usar o Cloud NAT para alocar as portas e os endereços IP externos que permitem que os clusters particulares estabeleçam conexões públicas.
Se uma VM do nó ficar sem sua alocação de portas externas e endereços IP do Cloud NAT, os pacotes serão descartados. Para evitar isso, reduza a taxa de pacotes de saída ou aumente a alocação de endereços IP e portas de origem do Cloud NAT disponíveis. As seções a seguir descrevem como diagnosticar e solucionar problemas de perda de pacotes do Cloud NAT no contexto de clusters particulares do GKE.
Diagnosticar perdas de pacotes
As seções a seguir explicam como registrar pacotes descartados usando o Cloud Logging e diagnosticar a causa deles usando o Cloud Monitoring.
Registrar pacotes descartados
Registre pacotes descartados 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:
REGION
: o nome da região em que o cluster está.GATEWAY_NAME
: o nome do gateway do Cloud NAT.
Esse comando retorna uma lista de todos os pacotes descartados por um gateway do Cloud NAT, mas não identifica a causa.
Monitorar as causas de perdas de pacotes
Para identificar as causas de pacotes descartados, consulte o Observador de métricas no Cloud Monitoring. Os pacotes são descartados por um destes três motivos:
OUT_OF_RESOURCES
ENDPOINT_INDEPENDENT_CONFLICT
NAT_ALLOCATION_FAILED
Para identificar pacotes descartados devido a 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 você identificar pacotes descartados devido a esses motivos, consulte Pacotes descartados com o motivo: sem recursos e Pacotes descartados com o motivo: conflito independente de endpoint, para receber conselhos de solução de problemas.
Para identificar pacotes descartados devido ao código de erro NAT_ALLOCATION_FAILED
,
use esta 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 você identificar pacotes descartados por esse motivo, consulte É necessário alocar mais endereços IP.
Investigar a configuração do Cloud NAT
Se as consultas anteriores retornarem resultados vazios e os pods do GKE não conseguirem se comunicar com endereços IP externos, use a tabela a seguir para receber ajuda ao resolver o problema da configuração:
Configuração | Solução de problemas |
Cloud NAT configurado para ser aplicado somente ao intervalo de endereços IP primário da sub-rede. |
Quando o Cloud NAT é configurado apenas para o intervalo de endereços IP primário da sub-rede, os pacotes enviados do cluster para endereços IP externos precisam ter um endereço IP do nó de origem. Nesta configuração do Cloud NAT:
|
Cloud NAT configurado para ser aplicado apenas ao intervalo de endereços IP secundário da sub-rede usado para IPs de pod. |
Quando o Cloud NAT é configurado apenas para o intervalo de endereços IP secundário da sub-rede usado pelos IPs de pod do cluster, os pacotes enviados do cluster para os endereços IP externos precisam ter um endereço IP do pod de origem. Nesta configuração do Cloud NAT:
|
Reduzir as perdas de pacotes
Depois de diagnosticar a causa da perda de pacotes, use as recomendações a seguir para reduzir a probabilidade de recorrência do problema no futuro:
Configure o gateway do Cloud NAT para usar a alocação de porta dinâmica e aumentar o número máximo de portas por VM.
Se você estiver usando a alocação de porta estática, aumente o número mínimo de portas por VM.
Reduza a taxa de pacotes de saída do app. Quando um aplicativo cria várias conexões de saída com a mesma porta e o mesmo endereço IP de destino, ele pode consumir rapidamente todas as conexões estabelecidas pelo Cloud NAT com esse destino usando o número de endereços de origem NAT alocados e as tuplas da porta de origem.
Para detalhes sobre como o Cloud NAT usa endereços e portas de origem NAT para estabelecer conexões, incluindo os limites no número de conexões simultâneas com um destino, consulte Portas e conexões.
Para reduzir a taxa de conexões de saída do app, reutilize as conexões estabelecidas. Os métodos comuns de reutilização de conexões incluem o pooling de conexão, a multiplexação de conexões com protocolos como HTTP/2 ou o estabelecimento de conexões persistentes reutilizadas para várias solicitações. Para mais informações, consulte Portas e conexões.
A seguir
Se precisar de mais ajuda, entre em contato com o Cloud Customer Care.