Crea una puerta de enlace de Cloud NAT

Descripción general

En este caso práctico, crearemos una puerta de enlace de Cloud NAT con varias IPs de salida asignadas. Estas puertas de enlace saldrán del tráfico de los pods y las VMs que coincidan con las etiquetas correspondientes configuradas en la puerta de enlace. La puerta de enlace asignará automáticamente una IP de salida a cada extremo que pueda salir del tráfico a través de ella.

Ejemplo de configuración de puerta de enlace con varias IPs de salida

Requisitos previos

Antes de configurar una puerta de enlace, debes obtener los permisos adecuados de Identity and Access Management (IAM), asegurarte de que tu proyecto tenga una política de red adecuada y habilitar la salida.

Consulta Antes de comenzar a usar Cloud NAT para obtener más detalles.

La puerta de enlace de Cloud NAT usa subredes leaf externas como entradas. Para obtener más información sobre la configuración de subredes externas para Cloud NAT, consulta Crea subredes externas para Cloud NAT.

Asegúrate de que la configuración del pod o la VM sea compatible

Como se mencionó en la descripción general de NAT, Cloud NAT no es compatible con la configuración de salida predeterminada del proyecto. Asegúrate de que cualquier pod o VM que quieras usar con Cloud NAT NO tenga la etiqueta egress.networking.gke.io/enabled:true.

De forma predeterminada, una configuración de acceso externo a la máquina virtual (VMEA) configura una VM para que salga del tráfico con la configuración de salida predeterminada del proyecto. En otras palabras, agrega automáticamente la etiqueta egress.networking.gke.io/enabled:"true" a la VM. Si la VM está configurada para salir del tráfico con una puerta de enlace de Cloud NAT, esto genera una colisión entre las configuraciones de NAT. Para evitar esta colisión, para cada VMEA asociada con una VM que esté configurada para salir del tráfico a través de una puerta de enlace de Cloud NAT, asegúrate de que la VMEA asociada con esa VM tenga la anotación egress.networking.gke.io/use-cloud-nat:"true". Luego, la VM asociada saldrá del tráfico exclusivamente a través de la puerta de enlace de Cloud NAT.

Crea las puertas de enlace de Cloud NAT

En el siguiente ejemplo, se define una puerta de enlace de Cloud NAT con dos subredes leaf externas (subnet-1 y subnet-2). La puerta de enlace usará todas las IPs de esas subredes, una de subnet-1 y cuatro de subnet-2, y las asignará automáticamente a los extremos 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

Verifica el estado de las puertas de enlace

Para verificar el estado de las puertas de enlace, ejecuta el siguiente comando kubectl.

export MGMT_KUBECONFIG=<path_to_management_kubeconfig>
kubectl get cloudnatgateways gateway-1 -n project-1 --kubeconfig "${MGMT_KUBECONFIG:?}"

Si se configura correctamente, el campo de condición de estado de la puerta de enlace de Cloud NAT debe mostrar la condición del tipo Ready establecida en true y las subredes marcadas como OK, como se muestra en el siguiente ejemplo de resultado.

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 puerta de enlace de Cloud NAT contiene 4 condiciones de los siguientes tipos:

  • Ready: Esta condición resume el estado de la puerta de enlace de Cloud NAT. Esta condición se establece en verdadero si la puerta de enlace está completamente 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 configuró (p.ej., IPs externas asignadas a nodos externos, etcétera).
  • EgressRoutesReady: Esta condición indica si ya se configuraron las rutas para salir del tráfico de los extremos de origen.

Prueba el tráfico

Para probar el tráfico, puedes ejecutar un comando curl desde uno de los pods o las VMs asignados a la puerta de enlace hacia un extremo externo. El extremo receptor debe ver una de las IPs de salida asociadas con la puerta de enlace.