Présentation
Dans ce cas d'utilisation, nous allons créer une passerelle Cloud NAT avec plusieurs adresses IP de sortie attribuées. Ces passerelles feront sortir le trafic des pods et des VM correspondant aux libellés configurés dans la passerelle. La passerelle attribuera automatiquement une adresse IP de sortie à chaque point de terminaison pouvant faire transiter le trafic par son intermédiaire.

Prérequis
Avant de configurer une passerelle, vous devez obtenir les autorisations IAM (Identity and Access Management) appropriées, vous assurer que votre projet dispose d'une stratégie réseau appropriée et activer le trafic sortant.
Pour en savoir plus, consultez Avant de commencer à utiliser Cloud NAT.
La passerelle Cloud NAT utilise des sous-réseaux leaf externes comme entrées. Pour en savoir plus sur la configuration des sous-réseaux externes pour Cloud NAT, consultez Créer des sous-réseaux externes pour Cloud NAT.
S'assurer d'une configuration de pod ou de VM compatible
Comme indiqué dans la présentation de NAT, Cloud NAT n'est pas compatible avec la configuration de sortie par défaut du projet. Assurez-vous qu'aucun pod ni aucune VM que vous souhaitez utiliser avec Cloud NAT ne porte le libellé egress.networking.gke.io/enabled:true.
Par défaut, une configuration VMEA (Virtual Machine External Access) configure une VM pour qu'elle fasse sortir le trafic à l'aide de la configuration de sortie par défaut du projet. En d'autres termes, il ajoute automatiquement le libellé egress.networking.gke.io/enabled:"true" à la VM. Si cette VM est également configurée pour faire sortir le trafic à l'aide d'une passerelle Cloud NAT, cela entraîne un conflit entre les configurations NAT. Pour éviter cette collision, assurez-vous que chaque VMEA associé à une VM configurée pour faire transiter le trafic via une passerelle Cloud NAT comporte l'annotation egress.networking.gke.io/use-cloud-nat:"true".
La VM associée fera ensuite sortir le trafic exclusivement via la passerelle Cloud NAT.
Créer les passerelles Cloud NAT
L'exemple suivant définit une passerelle Cloud NAT avec deux sous-réseaux feuilles externes (subnet-1 et subnet-2). La passerelle utilisera toutes les adresses IP de ces sous-réseaux (une de subnet-1 et quatre de subnet-2) et les attribuera automatiquement aux points de terminaison de chaque VM ou pod portant les libellés spécifiés. Plusieurs pods ou VM peuvent se voir attribuer la même adresse IP de sortie.
apiVersion: networking.gdc.goog/v1
kind: CloudNATGateway
metadata:
namespace: project-1
name: gateway-1
spec:
workloadSelector: # Immutable
labelSelector:
workloads:
matchLabels:
app: aa
subnetRefs: # Mutable
- subnet-1
- subnet-2
Vérifier l'état des passerelles
Vérifiez l'état des passerelles en exécutant la commande kubectl suivante.
export MGMT_KUBECONFIG=<path_to_management_kubeconfig>
kubectl get cloudnatgateways gateway-1 -n project-1 --kubeconfig "${MGMT_KUBECONFIG:?}"
Si elle est correctement configurée, le champ d'état de la passerelle Cloud NAT doit afficher la condition de type Ready définie sur true et les sous-réseaux marqués comme OK, comme indiqué dans l'exemple de résultat suivant.
apiVersion: networking.gdc.goog/v1
kind: CloudNATGateway
metadata:
namespace: project-1
name: gateway-1
spec:
workloadSelector:
labelSelector:
workloads:
matchLabels:
app: aa
subnetRefs:
- subnet-1
- subnet-2
status:
conditions:
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: Ready
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: SubnetsReady
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: PerimeterConfigurationReady
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: EgressRoutesReady
subnets:
- name: subnet-1
status: OK
- name: subnet-2
status: OK
L'état de la passerelle Cloud NAT contient quatre conditions des types suivants :
Ready: cette condition récapitule l'état de la passerelle Cloud NAT. Cette condition est définie sur "true" si la passerelle est entièrement configurée.SubnetsReady: cette condition indique si les sous-réseaux attribués à la passerelle sont valides.PerimeterConfigurationReady: cette condition indique si la configuration du périmètre a déjà été effectuée (par exemple, si des adresses IP externes ont été attribuées à des nœuds orientés vers l'extérieur, etc.).EgressRoutesReady: cette condition indique si les routes vers le trafic de sortie des points de terminaison sources ont déjà été configurées.
Trafic de test
Nous pouvons tester le trafic en exécutant une commande curl à partir de l'un des pods ou des VM attribués à la passerelle vers un point de terminaison externe. Le point de terminaison de réception doit voir l'une des adresses IP de sortie associées à la passerelle.