Cette page explique comment résoudre les problèmes de perte de paquets Cloud NAT dans un cluster Google Kubernetes Engine (GKE) natif VPC avec des nœuds privés activés.
Les VM de nœud dans les clusters GKE de VPC natif avec des nœuds privés ne disposent pas d'adresses IP externes. Cela signifie que les clients sur Internet ne peuvent pas se connecter aux adresses IP des nœuds. Vous pouvez utiliser Cloud NAT pour allouer les adresses IP et ports externes qui permettent aux clusters avec des nœuds privés d'établir des connexions publiques.
Si une VM de nœud manque d'allocation de ports et d'adresses IP externes de Cloud NAT, les paquets risquent d'être supprimés. Pour éviter cela, vous pouvez réduire le débit de paquets sortants ou augmenter l'allocation des adresses IP et des ports sources Cloud NAT disponibles. Les sections suivantes expliquent comment diagnostiquer et résoudre les problèmes de perte de paquets issus de Cloud NAT dans le contexte de clusters GKE avec des nœuds privés.
Diagnostiquer la perte de paquets
Les sections suivantes expliquent comment consigner les paquets supprimés à l'aide de Cloud Logging et diagnostiquer la cause de ces paquets supprimés à l'aide de Cloud Monitoring.
Enregistrer les paquets supprimés
Vous pouvez consigner les paquets supprimés à l'aide de la requête suivante dans Cloud Logging:
resource.type="nat_gateway" resource.labels.region=REGION resource.labels.gateway_name=GATEWAY_NAME jsonPayload.allocation_status="DROPPED"
Remplacez les éléments suivants :
REGION
: nom de la région dans laquelle se trouve le clusterGATEWAY_NAME
: nom de la passerelle Cloud NAT.
Cette commande renvoie la liste de tous les paquets supprimés par une passerelle Cloud NAT, mais n'identifie pas la cause.
Surveiller les causes de perte de paquets
Pour identifier les causes des paquets supprimés, interrogez l'observateur de métriques dans Cloud Monitoring. Les paquets sont supprimés pour l'une des trois raisons suivantes:
OUT_OF_RESOURCES
ENDPOINT_INDEPENDENT_CONFLICT
NAT_ALLOCATION_FAILED
Pour identifier les paquets supprimés en raison de codes d'erreur OUT_OF_RESOURCES
ou ENDPOINT_ALLOCATION_FAILED
, utilisez la requête suivante:
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 vous identifiez des paquets supprimés pour ces raisons, consultez les sections Paquets supprimés avec le motif "ressources épuisées" et Paquets supprimés avec le motif "conflit indépendant du point de terminaison" pour obtenir des conseils de dépannage.
Pour identifier les paquets supprimés en raison du code d'erreur NAT_ALLOCATION_FAILED
, utilisez la requête suivante :
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 vous identifiez des paquets supprimés pour cette raison, consultez la section Vous devez allouer plus d'adresses IP.
Examiner la configuration Cloud NAT
Si les requêtes précédentes renvoient des résultats vides et que les pods GKE ne parviennent pas à communiquer avec des adresses IP externes, utilisez le tableau suivant pour vous aider à résoudre les problèmes de votre configuration :
Configuration | Dépannage |
Cloud NAT configuré pour s'appliquer uniquement à la plage d'adresses IP principale du sous-réseau. |
Lorsque Cloud NAT est configuré uniquement pour la plage d'adresses IP principale du sous-réseau, les paquets envoyés depuis le cluster vers des adresses IP externes doivent disposer d'une adresse IP de nœud source. Dans cette configuration Cloud NAT :
|
Cloud NAT configuré pour s'appliquer uniquement à la plage d'adresses IP secondaire du sous-réseau utilisée pour les adresses IP des pods. |
Lorsque Cloud NAT est configuré uniquement pour la plage d'adresses IP secondaire du sous-réseau utilisée par les adresses IP des pods du cluster, les paquets envoyés depuis le cluster vers les adresses IP externes doivent disposer d'une adresse IP de pod source. Dans cette configuration Cloud NAT:
|
Réduire la perte de paquets
Après avoir diagnostiqué la cause de la perte de paquets, appliquez les recommandations suivantes pour réduire la probabilité que le problème se reproduise à l'avenir :
Configurer la passerelle Cloud NAT pour qu'elle utilise l'allocation de ports dynamique et augmentez le nombre maximal de ports par VM.
Si vous utilisez l'allocation de ports statique, augmentez le nombre minimal de ports par VM.
Réduisez le débit de paquets sortants de votre application. Lorsqu'une application établit plusieurs connexions sortantes vers la même adresse IP et le même port de destination, elle peut rapidement utiliser toutes les connexions que Cloud NAT peut établir vers cette destination en utilisant le nombre de tuples d'adresses sources NAT allouées et de ports sources.
Pour plus d'informations sur la manière dont Cloud NAT utilise les adresses sources et les ports sources NAT pour établir des connexions, y compris les limites du nombre de connexions simultanées à une destination, consultez la page Ports et connexions.
Pour réduire le taux de connexions sortantes de l'application, réutilisez les connexions ouvertes. Les méthodes courantes de réutilisation des connexions incluent le regroupement de connexions, le multiplexage de connexions à l'aide de protocoles tels que HTTP/2 ou l'établissement de connexions persistantes réutilisées pour plusieurs requêtes. Pour plus d'informations, consultez la section Ports et connexions.
Étape suivante
Si vous avez besoin d'une aide supplémentaire, contactez Cloud Customer Care.