Información general
En este caso práctico, crearemos una pasarela Cloud NAT con varias IPs de salida asignadas. Estas pasarelas dirigirán el tráfico saliente de los pods y las VMs que coincidan con las etiquetas configuradas en la pasarela. La pasarela asignará automáticamente una IP de salida a cada endpoint que pueda enviar tráfico a través de ella.

Requisitos previos
Antes de configurar una pasarela, debes obtener los permisos de gestión de identidades y accesos (IAM) adecuados, asegurarte de que tu proyecto tiene una política de red adecuada y habilitar la salida.
Para obtener más información, consulta Antes de empezar a usar Cloud NAT.
La pasarela de Cloud NAT usa subredes leaf externas como entradas. Para obtener más información sobre cómo configurar subredes externas para Cloud NAT, consulta Crear subredes externas para Cloud NAT.
Asegúrate de que el pod o la configuración de la VM sean compatibles
Como se menciona en la información general sobre NAT, Cloud NAT no es compatible con la configuración de salida predeterminada del proyecto. Asegúrate de que los pods o las VMs que quieras usar con Cloud NAT NO tengan la etiqueta egress.networking.gke.io/enabled:true.
De forma predeterminada, una configuración de acceso externo de máquina virtual (VMEA) configura una VM para que envíe tráfico mediante la configuración de salida predeterminada del proyecto. Es decir, añade automáticamente la etiqueta egress.networking.gke.io/enabled:"true" a la máquina virtual. Si la máquina virtual está configurada para enviar tráfico de salida mediante una pasarela de Cloud NAT, se producirá un conflicto entre las configuraciones de NAT. Para evitar esta colisión, por cada VMEA asociado a una VM configurada para enviar tráfico a través de una pasarela Cloud NAT, asegúrate de que el VMEA asociado a esa VM tenga la anotación egress.networking.gke.io/use-cloud-nat:"true".
La máquina virtual asociada enviará el tráfico de salida exclusivamente a través de la pasarela de Cloud NAT.
Crear las pasarelas de Cloud NAT
En el siguiente ejemplo se define una pasarela Cloud NAT con dos subredes hoja externas (subnet-1 y subnet-2). La pasarela usará todas las IPs de esas subredes (una de subnet-1 y cuatro de subnet-2) y las asignará automáticamente a los endpoints de cada VM o pod con las etiquetas especificadas. Se puede asignar la misma IP de salida a varios pods o VMs.
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
Comprobar el estado de las pasarelas
Comprueba el estado de las pasarelas ejecutando el siguiente comando de kubectl.
export MGMT_KUBECONFIG=<path_to_management_kubeconfig>
kubectl get cloudnatgateways gateway-1 -n project-1 --kubeconfig "${MGMT_KUBECONFIG:?}"
Si se ha configurado correctamente, el campo de estado de la pasarela Cloud NAT debe mostrar la condición del tipo Ready definida como true y las subredes marcadas como OK, tal como se muestra en el siguiente ejemplo de salida.
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
El estado de la pasarela de Cloud NAT contiene cuatro condiciones de los siguientes tipos:
Ready: esta condición resume el estado de la pasarela de Cloud NAT. Esta condición se establece en true si la pasarela está totalmente configurada.SubnetsReady: esta condición indica si las subredes asignadas a la puerta de enlace son válidas.PerimeterConfigurationReady: esta condición indica si la configuración del perímetro ya se ha configurado (por ejemplo, IPs externas asignadas a nodos orientados al exterior, etc.).EgressRoutesReady: esta condición indica si ya se han configurado las rutas al tráfico de salida desde los endpoints de origen.
Tráfico de prueba
Podemos probar el tráfico emitiendo un comando curl desde uno de los pods o las VMs asignados a la pasarela hacia un endpoint externo. El endpoint receptor debería ver una de las IPs de salida asociadas a la pasarela.