Como usar regras do Cloud NAT

1. Visão geral

O Cloud NAT é uma ferramenta poderosa: com ele, as cargas de trabalho do Compute Engine e do Google Kubernetes Engine (GKE) podem acessar recursos da Internet de maneira escalonável e segura, sem expor as cargas de trabalho em execução a acessos externos usando IPs externos.

O Cloud NAT tem um design sem proxy, implementando o NAT diretamente na camada SDN do Andromeda. Assim, não há impacto na performance da sua carga de trabalho, e ela é escalonada sem esforço para muitas VMs, regiões e VPCs.

As regras de NAT são uma extensão do Cloud NAT. Com esse recurso, é possível criar regras de acesso que definem como o Cloud NAT é usado para se conectar à Internet. No momento, as regras NAT são compatíveis com a seleção de endereços NAT de origem com base no endereço de destino.

Sem regras de NAT, uma VM com o Cloud NAT ativado usa o mesmo conjunto de endereços IP NAT para alcançar todos os endereços da Internet.

Às vezes, um caso de uso do NAT exige que o Cloud NAT use diferentes endereços IP de origem para destinos específicos. Uma regra NAT define uma correspondência e uma ação correspondente. Depois de especificar as regras NAT, o pacote será correspondido com cada regra NAT. Se uma regra for correspondida, a ação correspondente a essa correspondência será realizada.

Para mais informações, consulte a seção de documentação sobre regras de NAT .

O que você vai aprender

  • Como configurar um gateway do Cloud NAT em preparação para as regras de NAT.
  • Como criar regras NAT usando a Common Expression Language (CEL).
  • Como criar regras NAT e anexá-las a um gateway NAT.
  • Como testar regras de NAT em uma instância.
  • Como atualizar as regras de um gateway NAT.
  • Como excluir regras NAT e reverter para o comportamento padrão do Cloud NAT.

O que é necessário

  • Conhecimento básico do Google Compute Engine
  • Conhecimento básico de TCP/IP e rede
  • Conhecimento básico de linha de comando do Unix/Linux
  • É recomendável ter concluído um tour de redes no GCP, como o laboratório Redes no Google Cloud.
  • Entendimento dos conceitos básicos do Cloud NAT.

2. Como usar o console do Google Cloud e o Cloud Shell

Para interagir com o GCP, vamos usar o console do Google Cloud e o Cloud Shell ao longo deste laboratório.

Console do Google Cloud

O console do Cloud pode ser acessado em https://console.cloud.google.com.

75eef5f6fd6d7e41.png

Configuração de ambiente autoguiada

  1. Faça login no console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • O nome do projeto é seu identificador pessoal para ele. Desde que você siga as convenções de nomenclatura, é possível usar o que quiser e atualizar a qualquer momento.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser alterado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como PROJECT_ID. Se você não gostar dele, crie outro aleatório ou tente usar um próprio para ver se ele está disponível. Em seguida, ele fica "congelado" depois que o projeto é criado.
  1. Em seguida, será necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.

A execução deste codelab não será muito cara, se for o caso. Siga todas as instruções na seção "Limpeza", que orienta você sobre como encerrar recursos para não incorrer em cobranças além deste tutorial. Novos usuários do Google Cloud estão qualificados para o programa de US$300 de avaliação sem custos.

Inicie o Cloud Shell

Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

No Console do GCP, clique no ícone do Cloud Shell na barra de ferramentas localizada no canto superior direito:

bce75f34b2c53987.png

O provisionamento e a conexão com o ambiente levarão apenas alguns instantes para serem concluídos: Quando o processamento for concluído, você verá algo como:

f6ef2b5f13479f3a.png

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Todo o trabalho neste laboratório pode ser feito apenas com um navegador.

3. configurar o laboratório

Neste laboratório, você vai usar um projeto e criar duas VPCs com uma sub-rede em cada uma. Você vai reservar endereços IP externos e criar e configurar um gateway do Cloud NAT (com um Cloud Router), duas instâncias de produtor e uma instância de consumidor. Depois de validar o comportamento padrão do Cloud NAT, você vai criar regras personalizadas do Cloud NAT e validar o comportamento delas.

Visão geral da arquitetura de rede:

815147de3de0bd19.png

4. Reservar endereços IP externos

Vamos reservar todos os endereços IP externos que serão usados neste laboratório. Isso vai ajudar você a escrever todas as regras de NAT e firewall relevantes nas VPCs do consumidor e do produtor.

No Cloud Shell:

gcloud compute addresses  create nat-address-1 nat-address-2 nat-address-3 producer-address-1 producer-address-2 --region us-east4

Saída:

Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1].
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2].
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3].
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1].
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].

Preencha os endereços IP reservados como variáveis de ambiente.

export natip1=`gcloud compute addresses list --filter name:nat-address-1 --format="get(address)"`
export natip2=`gcloud compute addresses list --filter name:nat-address-2 --format="get(address)"`
export natip3=`gcloud compute addresses list --filter name:nat-address-3 --format="get(address)"`
export producerip1=`gcloud compute addresses list --filter name:producer-address-1 --format="get(address)"`
export producerip2=`gcloud compute addresses list --filter name:producer-address-2 --format="get(address)"`

Nenhuma saída é esperada, mas para confirmar que os endereços foram preenchidos corretamente. Vamos gerar os valores de todas as variáveis de ambiente.

$ env | egrep '^(nat|producer)ip[1-3]'

Saída:

producerip1=<Actual Producer IP 1>
producerip2=<Actual Producer IP 2>
natip1=<NAT IP 1>
natip2=<NAT IP 2>
natip3=<NAT IP 3>

5. Configuração da VPC e das instâncias do produtor.

Agora vamos criar os recursos do produtor. As instâncias em execução na VPC do produtor vão oferecer o serviço voltado à Internet usando dois IPs públicos "producer-address-1" e "producer-address-2" .

Primeiro, vamos criar a VPC. No Cloud Shell:

gcloud compute networks create producer-vpc --subnet-mode custom

Saída:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/producer-vpc].
NAME      SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
producer-vpc  CUSTOM       REGIONAL

Instances on this network will not be reachable until firewall rules
are created. As an example, you can allow all internal traffic between
instances as well as SSH, RDP, and ICMP by running:

$ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE>
$ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp

Em seguida, vamos criar a sub-rede em us-east4. No Cloud Shell:

gcloud compute networks subnets create producer-e4 \
   --network producer-vpc --range 10.0.0.0/24 --region us-east4

Saída:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/regions/us-east4/subnetworks/producer-e4].
NAME              REGION       NETWORK       RANGE
producer-e4       us-east4  producer-vpc  10.0.0.0/24

Em seguida, vamos criar regras de firewall da VPC para permitir que os endereços IP do NAT alcancem as instâncias do produtor na porta 8080.

Para a primeira regra, no Cloud Shell:

gcloud compute firewall-rules create producer-allow-8080 \
  --network producer-vpc --allow tcp:8080 \
  --source-ranges $natip1,$natip2,$natip3

Saída:

Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/producer-allow-8080].
Creating firewall...done.
NAME                 NETWORK       DIRECTION  PRIORITY  ALLOW     DENY  DISABLED
producer-allow-8080  producer-vpc  INGRESS    1000      tcp:8080        False

A próxima etapa é criar as duas instâncias de produtor.

As instâncias de produtor vão executar um serviço de eco de IP em um contêiner do Docker disponível no Docker Hub. O código-fonte está disponível no repositório do GitHub do autor do serviço.

Para provisionar rapidamente as instâncias com todo o software necessário, vamos usar o recurso Implantação de contêineres no Compute Engine.

Para escrever regras de NAT, vamos provisionar cada instância com um endereço IP reservado diferente.

Crie a primeira instância. No Cloud Shell:

gcloud compute instances create-with-container producer-instance-1 \
--zone=us-east4-a --machine-type=e2-medium \
--network-interface=address=producer-address-1,network-tier=PREMIUM,subnet=producer-e4 \
--container-image=mpolden/echoip --container-restart-policy=always

Saída:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/producer-instance-1].
NAME                 ZONE           MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP  STATUS
producer-instance-1  us-east4-a  e2-medium                  10.0.0.2     <producer IP 1>  RUNNING

Em seguida, crie a segunda instância. No Cloud Shell:

gcloud compute instances create-with-container producer-instance-2 \
 --zone=us-east4-a --machine-type=e2-medium \
--network-interface=address=producer-address-2,network-tier=PREMIUM,subnet=producer-e4 \
--container-image=mpolden/echoip --container-restart-policy=always

Saída:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/producer-instance-2].
NAME                 ZONE           MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP  STATUS
producer-instance-2  us-east4-a  e2-medium                  10.0.0.3     <producer IP 2>  RUNNING

6. Configurar VPC do consumidor, Cloud NAT e instância

Agora que você criou o serviço produtor, é hora de criar a VPC consumidora e o gateway do Cloud NAT.

Depois de criar a VPC e a sub-rede, vamos adicionar uma regra de firewall de entrada simples para permitir o IAP para intervalos de IP de origem TCP. Isso vai permitir que façamos SSH nas instâncias do consumidor diretamente usando o gcloud.

Em seguida, vamos criar um gateway simples do Cloud NAT no modo de alocação manual e o endereço reservado "nat-address-1" associado a ele. Nas próximas partes do codelab, vamos atualizar a configuração do gateway para adicionar regras personalizadas. .

Primeiro, vamos criar a VPC. No Cloud Shell:

gcloud compute networks create consumer-vpc --subnet-mode custom

Saída:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/consumer-vpc].
NAME      SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
consumer-vpc  CUSTOM       REGIONAL

Instances on this network will not be reachable until firewall rules
are created. As an example, you can allow all internal traffic between
instances as well as SSH, RDP, and ICMP by running:

$ gcloud compute firewall-rules create <FIREWALL_NAME> --network consumer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE>
$ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp

Em seguida, vamos criar uma sub-rede em us-east4. No Cloud Shell:

gcloud compute networks subnets create consumer-e4 \
   --network consumer-vpc --range 10.0.0.0/24 --region us-east4

Saída:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/regions/us-east4/subnetworks/consumer-e4].
NAME              REGION       NETWORK       RANGE
consumer-e4       us-east4  consumer-vpc  10.0.0.0/24

Em seguida, vamos criar regras de firewall da VPC para permitir que os endereços de intervalos do IAP alcancem as instâncias do consumidor na porta 22.

Para a primeira regra de firewall, execute o seguinte no Cloud Shell:

gcloud compute firewall-rules create consumer-allow-iap \
  --network consumer-vpc --allow tcp:22 \
  --source-ranges 35.235.240.0/20

Saída:

Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/consumer-allow-iap].
Creating firewall...done.
NAME                 NETWORK       DIRECTION  PRIORITY  ALLOW     DENY  DISABLED
consumer-allow-iap  consumer-vpc  INGRESS    1000      tcp:22        False

Antes de criar um gateway NAT, precisamos criar uma instância do Cloud Router. Usamos um número de ASN particular, mas isso é irrelevante para as atividades deste laboratório. No Cloud Shell:

gcloud compute routers create consumer-cr \
--region=us-east4 --network=consumer-vpc \
 --asn=65501

Saída:

Creating router [consumer-cr]...done.
NAME         REGION       NETWORK
consumer-cr  us-east4  consumer-vpc

Em seguida, crie a instância do gateway NAT. No Cloud Shell:

gcloud compute routers nats create consumer-nat-gw \
    --router=consumer-cr \
    --router-region=us-east4 \
    --nat-all-subnet-ip-ranges \
    --nat-external-ip-pool=nat-address-1

Saída:

Creating NAT [consumer-nat-gw] in router [consumer-cr]...done.

Crie a instância de teste do consumidor. Preenchemos os IPs de produtor reservados aqui para poder consultar eles na instância mais tarde. No Cloud Shell:

gcloud compute instances create consumer-instance --zone=us-east4-a \
--machine-type=e2-medium --network-interface=subnet=consumer-e4,no-address \
--metadata=producer-service-ip1=$producerip1,producer-service-ip2=$producerip2

Saída:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/consumer-instance].
NAME               ZONE           MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP  STATUS
consumer-instance  us-east4-a  e2-medium                  10.0.0.2                  RUNNING

7. Verificar o comportamento padrão do Cloud NAT

Neste ponto, a instância do consumidor usa o comportamento padrão do Cloud NAT, que usa o mesmo IP reservado "nat-address-1" para se comunicar com todos os endereços externos.

Vamos validar esse comportamento primeiro antes de usar o novo recurso de regras de NAT no Cloud NAT.

Acesse a instância do consumidor por SSH. No Cloud Shell:

gcloud compute ssh consumer-instance --zone=us-east4-a

Agora você está no shell da instância.

Exemplo de saída (saída completa truncada para brevidade)

No zone specified. Using zone [us-east4-a] for instance: [consumer-instance].
External IP address was not found; defaulting to using IAP tunneling.
...
...
<username>@consumer-instance:~$

Na instância do consumidor, vamos buscar os IPs do produtor e preenchê-los como variáveis de ambiente.

export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"`

export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`

Em seguida, tente curl para as duas instâncias de produtor e observe o endereço IP de origem retornado.

<username>@consumer-instance:~$ curl http://$producerip1:8080
34.136.8.83
<username>@consumer-instance:~$ curl http://$producerip2:8080
34.136.8.83

Você vai ver o mesmo endereço IP retornado para os dois endpoints, que é igual ao valor do IP externo reservado "nat-address-1".

Da mesma forma, um curl para qualquer serviço externo de refletor de IP vai mostrar o mesmo IP. Por exemplo:

<username>@consumer-instance:~$ curl http://ifconfig.co
34.136.8.83
<username>@consumer-instance:~$ curl http://ifconfig.me
34.136.8.83
<username>@consumer-instance:~$ curl http://ip.fyr.io
34.136.8.83

Saia da sessão SSH da instância por enquanto. Vamos voltar ao SSH depois de configurar as regras de NAT.

8. Criar regras do Cloud NAT

As regras NAT são escritas usando a sintaxe da Common Expression Language. Para mais informações sobre a linguagem de expressão de regra, consulte Linguagem de expressão de regra.

Também é possível adicionar uma regra NAT a um gateway NAT usando comandos gcloud. Vamos conhecer as duas opções para criar regras do Cloud NAT.

Primeiro, vamos criar um arquivo YAML de regra de NAT.

No Cloud Shell:

export projectid=`gcloud config get-value project`

cat <<EOF >natrulesfile.txt
rules:
 - ruleNumber: 100
   match: destination.ip == '$producerip2'
   action:
     sourceNatActiveIps:
     -  /projects/$projectid/regions/us-east4/addresses/nat-address-2
EOF

Agora vamos atualizar o gateway NAT usando esse arquivo de regras. No Cloud Shell:

gcloud alpha compute routers nats update consumer-nat-gw \
    --router=consumer-cr \
    --rules=natrulesfile.txt \
    --router-region=us-east4

Você vai receber esta resposta :

Updating nat [consumer-nat-gw] in router [consumer-cr]...done.

Valide se a regra foi configurada corretamente. No Cloud Shell:

gcloud alpha compute routers nats rules list \
--nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4

Você vai receber esta resposta :

RULE_NUMBER  MATCH
100          destination.ip == '35.192.142.134'

Vamos tentar recriar a mesma regra usando apenas comandos gcloud. Primeiro, exclua a regra atual. No Cloud Shell:

gcloud alpha compute routers nats rules delete 100 \
--nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4 --quiet

Você vai receber esta resposta :

Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]

Em seguida, recrie a regra usando este comando gcloud. No Cloud Shell:

gcloud alpha compute routers nats rules create 100 \
 --match='destination.ip == "'$producerip2'"' \
--source-nat-active-ips=nat-address-2 --nat=consumer-nat-gw \
 --router=consumer-cr --router-region=us-east4

Você vai receber esta resposta :

Creating Rule [100] in NAT [consumer-nat-gw]...done.

Para validar se a regra foi criada corretamente, repita o comando anterior. Desta vez, vamos adicionar a chave de formatação YAML para conferir todos os detalhes da regra.

No Cloud Shell:

gcloud alpha compute routers nats rules list\
 --nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4  --format=yaml

Você vai receber esta resposta :

---
action:
  sourceNatActiveIps:
  - https://www.googleapis.com/compute/alpha/projects/<Project-ID>/regions/us-east4/addresses/nat-address-2
match: destination.ip == <actual IP for producer-IP 2>
ruleNumber: 100

Por fim, observe que agora os endereços externos "nat-address1" e "nat-address-2" aparecem como "IN_USE". Para conferir, execute este comando no Cloud Shell:

$ gcloud compute addresses list

Você vai receber a seguinte saída (os endereços IP reais precisam corresponder aos endereços reservados) :

NAME                ADDRESS/RANGE   TYPE      PURPOSE  NETWORK  REGION       SUBNET  STATUS
nat-address-1       34.136.8.83     EXTERNAL                    us-east4          IN_USE
nat-address-2       34.70.137.35    EXTERNAL                    us-east4          IN_USE
nat-address-3       34.135.103.88   EXTERNAL                    us-east4          RESERVED
producer-address-1  34.66.0.105     EXTERNAL                    us-east4          IN_USE
producer-address-2  35.192.142.134  EXTERNAL                    us-east4          IN_USE

9. Verificar o comportamento das regras do Cloud NAT

Neste ponto, a instância do consumidor deve usar a regra do Cloud NAT criada para usar nat-address-2 e se comunicar com producer-address-2.

Vamos validar esse comportamento. Acesse a instância do consumidor por SSH. No Cloud Shell:

gcloud compute ssh consumer-instance --zone=us-east4-a

Agora você está no shell da instância.

Exemplo de saída (saída completa truncada para brevidade)

No zone specified. Using zone [us-east4-a] for instance: [consumer-instance].
External IP address was not found; defaulting to using IAP tunneling.
...
...
<username>@consumer-instance:~$

Na instância do consumidor, vamos buscar os IPs do produtor e preenchê-los como variáveis de ambiente.

export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"`

export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`

Em seguida, tente curl para as duas instâncias de produtor e observe o endereço IP de origem retornado.

<username>@consumer-instance:~$ curl http://$producerip1:8080
34.136.8.83
<username>@consumer-instance:~$ curl http://$producerip2:8080
34.70.137.35

Agora você vai ver um endereço IP diferente sendo retornado para os dois endpoints. O primeiro endereço IP será o mesmo do comportamento padrão. O segundo endereço IP precisa ser igual a "nat-address-2" após a adição da nova regra de NAT.

Um curl para qualquer serviço externo de refletor de IP ainda vai mostrar o mesmo IP que o comportamento padrão. Por exemplo:

<username>@consumer-instance:~$ curl http://ifconfig.co
34.136.8.83
<username>@consumer-instance:~$ curl http://ifconfig.me
34.136.8.83
<username>@consumer-instance:~$ curl http://ip.fyr.io
34.136.8.83

Saia da sessão SSH da instância por enquanto. Vamos usar o SSH novamente para testar o esgotamento de endereço.

10. Atualizar e excluir regras do Cloud NAT

É possível atualizar as regras do Cloud NAT. Por exemplo, é possível associar novos endereços IP e esgotar os endereços IP associados às regras atuais.

Vamos atualizar o arquivo de regras NAT da seguinte forma:

No Cloud Shell:

export projectid=`gcloud config get-value project`

cat <<EOF >natrulesfile.txt
rules:
 - ruleNumber: 100
   match: destination.ip == '$producerip2'
   action:
     sourceNatDrainIps:
     -  /projects/$projectid/regions/us-east4/addresses/nat-address-2
     sourceNatActiveIps:
     -  /projects/$projectid/regions/us-east4/addresses/nat-address-3
EOF

O que esse novo arquivo faz é colocar "nat-address-2" em um estado esgotado. E adicione "nat-address-3" no estado ativo. Isso permite que as conexões atuais que usam nat-address-2 sejam encerradas normalmente, enquanto cria novas conexões apenas usando nat-address-3.

Agora vamos atualizar o gateway NAT usando esse arquivo de regras. No Cloud Shell:

gcloud alpha compute routers nats update consumer-nat-gw \
    --router=consumer-cr \
    --rules=natrulesfile.txt \
    --router-region=us-east4

Você vai receber esta resposta :

Updating nat [consumer-nat-gw] in router [consumer-cr]...done.

Valide se a regra foi configurada corretamente. No Cloud Shell:

gcloud alpha compute routers nats rules list \
--nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4 --format=yaml

Você vai receber esta resposta :

---
action:
  sourceNatActiveIps:
  - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-3
  sourceNatDrainIps:
  - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-2
match: destination.ip == '35.192.142.134'
ruleNumber: 100

Observe como "nat-address-2" agora está em um estado de drenagem. Deixamos para você, como exercício, validar se as novas conexões da VPC do consumidor agora usam os IPs NAT corretos.

Por fim, para excluir as regras NAT do gateway do Cloud NAT e reverter para o comportamento padrão. É possível usar o seguinte comando gcloud. No Cloud Shell:

gcloud alpha compute routers nats rules delete 100 \
 --nat=consumer-nat-gw --router=consumer-cr \
 --router-region=us-east4 --quiet

Você vai receber esta resposta :

Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]

Para verificar se não há mais regras NAT, use o comando de descrição do gateway NAT.

gcloud alpha compute routers nats describe consumer-nat-gw \
 --router=consumer-cr --router-region=us-east4

Você vai receber esta resposta :

enableEndpointIndependentMapping: false
name: consumer-nat-gw
natIpAllocateOption: MANUAL_ONLY
natIps:
- https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-1
sourceSubnetworkIpRangesToNat: ALL_SUBNETWORKS_ALL_IP_RANGES

Não há uma seção "rules:" no YAML de saída. Indicando que não há regras NAT configuradas.

11. Etapas de limpeza

Para evitar cobranças recorrentes, exclua todos os recursos associados a este codelab.

Primeiro, exclua todas as instâncias.

No Cloud Shell:

gcloud compute instances delete consumer-instance \
producer-instance-1 producer-instance-2 \
 --zone us-east4-a --quiet

Resposta esperada :

Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/consumer-instance].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-1].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-2].

Em seguida, exclua o Cloud Router. No Cloud Shell:

gcloud compute routers delete consumer-cr \
--region us-east4 --quiet

Você vai receber esta resposta :

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].

Libere todos os endereços IP externos. No Cloud Shell:

gcloud compute addresses delete nat-address-1 \
 nat-address-2 nat-address-3 producer-address-1 \
producer-address-2 --region us-east4 --quiet

Você vai receber esta resposta :

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].

Exclua regras de firewall da VPC. No Cloud Shell:

gcloud compute firewall-rules delete consumer-allow-iap \
 producer-allow-8080 --quiet

Você vai receber esta resposta :

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/consumer-allow-iap].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/producer-allow-8080].

Exclua sub-redes. No Cloud Shell:

gcloud compute networks subnets delete consumer-e4 \
producer-e4 --region=us-east4 --quiet

Você vai receber esta resposta :

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/consumer-e4].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/producer-e4].

Por fim, vamos excluir as VPCs. No Cloud Shell:

gcloud compute networks delete consumer-vpc \
producer-vpc --quiet

Você vai receber esta resposta :

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/consumer-vpc].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/producer-vpc].

12. Parabéns!

Você concluiu o laboratório "Regras do Cloud NAT".

O que você abordou

  • Como configurar um gateway do Cloud NAT em preparação para as regras de NAT.
  • Como criar regras NAT usando a Common Expression Language (CEL).
  • Como criar regras NAT e anexá-las a um gateway NAT.
  • Como testar regras de NAT em uma instância.
  • Como atualizar as regras de um gateway NAT.
  • Como excluir regras NAT e reverter para o comportamento padrão do Cloud NAT.

Próximas etapas

  • Teste a criação de regras NAT mais complexas, como este exemplo.
  • Aprenda a drenar endereços IP de NAT e observe o impacto na conexão.
  • Saiba mais sobre rede no Google Cloud Platform.

©Google, Inc. ou afiliadas. Todos os direitos reservados. Distribuição proibida.