En esta página se explica cómo resolver problemas de pérdida de paquetes de Cloud NAT en un clúster de Google Kubernetes Engine (GKE) nativo de VPC con nodos privados habilitados.
Las VMs de nodo de los clústeres de GKE nativos de VPC con nodos privados no tienen direcciones IP externas. Esto significa que los clientes de Internet no pueden conectarse a las direcciones IP de los nodos. Puedes usar Cloud NAT para asignar las direcciones IP externas y los puertos que permiten que los clústeres con nodos privados realicen conexiones públicas.
Si una VM de nodo se queda sin la asignación de puertos externos y direcciones IP de Cloud NAT, los paquetes se descartarán. Para evitarlo, puede reducir la tasa de paquetes salientes o aumentar la asignación de direcciones IP y puertos de origen de Cloud NAT disponibles. En las siguientes secciones se describe cómo diagnosticar y solucionar problemas de pérdida de paquetes de Cloud NAT en el contexto de clústeres de GKE con nodos privados.
Diagnosticar la pérdida de paquetes
En las siguientes secciones se explica cómo registrar los paquetes perdidos con Cloud Logging y cómo diagnosticar la causa de los paquetes perdidos con Cloud Monitoring.
Registrar paquetes descartados
Puedes registrar los paquetes perdidos con la siguiente consulta en Cloud Logging:
resource.type="nat_gateway" resource.labels.region=REGION resource.labels.gateway_name=GATEWAY_NAME jsonPayload.allocation_status="DROPPED"
Haz los cambios siguientes:
REGION
: el nombre de la región en la que se encuentra el clúster.GATEWAY_NAME
: nombre de la pasarela de Cloud NAT.
Este comando devuelve una lista de todos los paquetes descartados por una pasarela Cloud NAT, pero no identifica la causa.
Monitorizar las causas de la pérdida de paquetes
Para identificar las causas de los paquetes descartados, consulta el observador de métricas en Cloud Monitoring. Los paquetes se pierden por uno de estos tres motivos:
OUT_OF_RESOURCES
ENDPOINT_INDEPENDENT_CONFLICT
NAT_ALLOCATION_FAILED
Para identificar los paquetes descartados debido a los códigos de error OUT_OF_RESOURCES
o ENDPOINT_ALLOCATION_FAILED
, usa la siguiente 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)]
Si identifica paquetes que se descartan por estos motivos, consulte Paquetes descartados por falta de recursos y Paquetes descartados por conflicto independiente del endpoint para obtener consejos sobre cómo solucionar el problema.
Para identificar los paquetes descartados debido al código de error NAT_ALLOCATION_FAILED
, usa la siguiente 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
Si identificas paquetes que se han descartado por este motivo, consulta la sección Necesito asignar más direcciones IP.
Investigar la configuración de Cloud NAT
Si las consultas anteriores devuelven resultados vacíos y los pods de GKE no pueden comunicarse con direcciones IP externas, consulta la siguiente tabla para solucionar los problemas de tu configuración:
Configuración | Solución de problemas |
Cloud NAT configurado para aplicarse solo al intervalo de direcciones IP principal de la subred. |
Cuando Cloud NAT se configura solo para el intervalo de direcciones IP principal de la subred, los paquetes enviados del clúster a direcciones IP externas deben tener una dirección IP de nodo de origen. En esta configuración de Cloud NAT:
|
Cloud NAT configurado para aplicarse solo al intervalo de direcciones IP secundarias de la subred que se usa para las IPs de los pods. |
Cuando Cloud NAT se configura solo para el intervalo de direcciones IP secundarias de la subred que usan las IPs de los pods del clúster, los paquetes enviados desde el clúster a direcciones IP externas deben tener una dirección IP de pod de origen. En esta configuración de Cloud NAT:
|
Reducir la pérdida de paquetes
Una vez que hayas diagnosticado la causa de la pérdida de paquetes, te recomendamos que sigas estas indicaciones para reducir la probabilidad de que el problema vuelva a producirse en el futuro:
Configura la pasarela de Cloud NAT para que use la asignación dinámica de puertos y aumenta el número máximo de puertos por VM.
Si usas la asignación de puertos estáticos, aumenta el número mínimo de puertos por VM.
Reduce la tasa de paquetes salientes de tu aplicación. Cuando una aplicación establece varias conexiones salientes a la misma dirección IP y puerto de destino, puede consumir rápidamente todas las conexiones que Cloud NAT puede establecer con ese destino usando el número de direcciones de origen NAT asignadas y las tuplas de puerto de origen.
Para obtener información sobre cómo usa Cloud NAT las direcciones de origen y los puertos de origen de NAT para establecer conexiones, incluidos los límites del número de conexiones simultáneas a un destino, consulta Puertos y conexiones.
Para reducir la tasa de conexiones salientes de la aplicación, reutiliza las conexiones abiertas. Entre los métodos habituales para reutilizar conexiones se incluyen la agrupación de conexiones, la multiplexación de conexiones mediante protocolos como HTTP/2 o el establecimiento de conexiones persistentes que se reutilizan para varias solicitudes. Para obtener más información, consulta Puertos y conexiones.
Siguientes pasos
Si no encuentras una solución a tu problema en la documentación, consulta la sección Obtener asistencia para obtener más ayuda, incluidos consejos sobre los siguientes temas:
- Abrir un caso de asistencia poniéndose en contacto con el equipo de Atención al Cliente de Cloud.
- Obtener asistencia de la comunidad haciendo preguntas en Stack Overflow
y usando la etiqueta
google-kubernetes-engine
para buscar problemas similares. También puedes unirte al#kubernetes-engine
canal de Slack para obtener más ayuda de la comunidad. - Abrir errores o solicitudes de funciones mediante el seguimiento de problemas público.