Criar um gateway do Cloud NAT

Visão geral

Neste caso de uso, vamos criar um gateway do Cloud NAT com vários IPs de saída atribuídos. Esses gateways vão sair do tráfego dos pods e das VMs que correspondem aos rótulos correspondentes configurados no gateway. O gateway vai atribuir automaticamente um IP de saída a cada endpoint que possa sair do tráfego por ele.

Exemplo de configuração de gateway com vários IPs de saída

Pré-requisitos

Antes de configurar um gateway, você precisa receber as permissões adequadas do Identity and Access Management (IAM), garantir que o projeto tenha uma política de rede adequada e ativar a saída.

Consulte Antes de começar a usar o Cloud NAT para mais detalhes.

O gateway do Cloud NAT usa sub-redes leaf externas como entradas. Para mais informações sobre como configurar sub-redes externas para o Cloud NAT, consulte Criar sub-redes externas para o Cloud NAT.

Garantir uma configuração de pod ou VM compatível

Conforme mencionado na visão geral do NAT, o Cloud NAT não é compatível com a configuração de saída do projeto padrão. Verifique se nenhum pod ou VM que você quer usar com o Cloud NAT NÃO tem o rótulo egress.networking.gke.io/enabled:true.

Por padrão, uma configuração de acesso externo de máquina virtual (VMEA, na sigla em inglês) configura uma VM para sair do tráfego usando a configuração de saída do projeto padrão. Em outras palavras, ela adiciona automaticamente o rótulo egress.networking.gke.io/enabled:"true" à VM. Se a VM em questão também estiver configurada para sair do tráfego usando um gateway do Cloud NAT, isso resultará em uma colisão entre as configurações de NAT. Para evitar essa colisão, para cada VMEA associada a uma VM configurada para sair do tráfego por um gateway do Cloud NAT, verifique se a VMEA associada a essa VM tem a anotação egress.networking.gke.io/use-cloud-nat:"true". A VM associada vai sair do tráfego exclusivamente pelo gateway do Cloud NAT.

Criar os gateways do Cloud NAT

O exemplo a seguir define um gateway do Cloud NAT com duas sub-redes leaf externas (subnet-1 e subnet-2). O gateway vai usar todos os IPs dessas sub-redes, um de subnet-1 e quatro de subnet-2, e atribuí-los automaticamente aos endpoints de cada VM ou pod com os rótulos especificados. Vários pods ou VMs podem receber o mesmo IP de saída atribuído.

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

Verificar o status dos gateways

Para verificar o status dos gateways, execute o seguinte comando kubectl.

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

Se configurado corretamente, o campo de condição de status do gateway do Cloud NAT vai mostrar a condição do tipo Ready definida como true e as sub-redes marcadas como OK, conforme mostrado no exemplo de saída a seguir.

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

O status do gateway do Cloud NAT contém quatro condições dos seguintes tipos:

  • Ready: essa condição resume o status do gateway do Cloud NAT. Essa condição é definida como verdadeira se o gateway estiver totalmente configurado.
  • SubnetsReady: essa condição indica se as sub-redes atribuídas ao gateway são válidas.
  • PerimeterConfigurationReady: essa condição indica se a configuração do perímetro já foi configurada (por exemplo, IPs externos atribuídos a nós externos etc.).
  • EgressRoutesReady: essa condição indica se as rotas para sair do tráfego dos endpoints de origem já foram configuradas.

Testar o tráfego

Podemos testar o tráfego emitindo um comando curl de um dos pods ou VMs atribuídos ao gateway para um endpoint externo. O endpoint de recebimento vai mostrar um dos IPs de saída associados ao gateway.