En los clústeres de Google Kubernetes Engine (GKE) nativos de VPC, los nodos sin direcciones IP externas mejoran la seguridad. Estos nodos usan Cloud NAT para las conexiones salientes a Internet. La pérdida de paquetes puede producirse si una VM de nodo agota los puertos y las direcciones IP de Cloud NAT asignados, a menudo con una carga de salida alta, lo que interrumpe el tráfico de salida.
En este documento se explica cómo registrar y monitorizar los paquetes perdidos, investigar la configuración de Cloud NAT e implementar medidas para reducir la pérdida de paquetes en el futuro.
Esta información es importante para los administradores y operadores de la plataforma, así como para los administradores de redes que gestionan clústeres de GKE con nodos sin acceso a Internet y que dependen de Cloud NAT para la conectividad externa. Para obtener más información sobre los roles habituales y las tareas de ejemplo a los que hacemos referencia en el contenido, consulta Roles y tareas habituales de los usuarios de GKE.Google Cloud
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_RESOURCESENDPOINT_INDEPENDENT_CONFLICTNAT_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 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-enginepara buscar problemas similares. También puedes unirte al#kubernetes-enginecanal de Slack para obtener más ayuda de la comunidad. - Abrir errores o solicitudes de funciones mediante el seguimiento de problemas público.