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 nelas a acesso externo usando IPs externos.

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

As regras NAT são uma extensão do Cloud NAT. O recurso de regras NAT no Cloud NAT permite criar regras de acesso que definem como o Cloud NAT é usado para se conectar à Internet. Atualmente, as regras NAT oferecem suporte à seleção do endereço NAT de origem com base no endereço de destino.

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

Às vezes, um caso de uso do NAT chama o Cloud NAT para usar endereços IP de origem diferentes para destinos específicos. Uma regra NAT define uma correspondência e uma ação correspondente. Depois que você especifica as regras NAT, o pacote é combinado 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 Documentação sobre regras NAT .

O que você vai aprender

  • Como configurar um gateway do Cloud NAT para se preparar para as regras NAT.
  • Como projetar regras NAT usando a Common Expression Language (CEL).
  • Como criar regras NAT e anexá-las a um gateway NAT.
  • Como testar regras NAT de 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
  • É útil fazer um tour sobre redes no GCP, como o laboratório Rede no Google Cloud.
  • Noções básicas sobre os 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 neste 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 é o identificador pessoal do projeto. Contanto 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 para todos os projetos do Google Cloud e não pode ser alterado (não pode ser alterado depois de definido). O console do Cloud gera automaticamente uma string exclusiva. normalmente você não se importa com o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, que normalmente é identificado como PROJECT_ID. Se não gostar dele, gere outro ID aleatório ou faça um teste e veja se ele está disponível. Então está "congelado" depois que o projeto for 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 custo financeiro.

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 depois 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ê 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 para serem usados neste laboratório. Isso vai ajudar você a gravar todas as regras relevantes de NAT e firewall na VPC 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 que foram 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 resposta é 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. VPC do produtor e configuração das instâncias.

Agora criaremos os recursos para os recursos do produtor. As instâncias em execução na VPC do produtor oferecerão 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

A seguir, 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 de VPC para permitir que os endereços IP do NAT alcancem as instâncias do produtor na porta 8080.

Para a primeira regra do 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 do produtor.

As instâncias do produtor executarão 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 todos os softwares necessários, vamos usar o recurso Implantação de contêiner no Compute Engine.

Para escrever regras NAT, provisionaremos 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 a VPC do consumidor, o Cloud NAT e a instância

Agora que você criou o serviço do produtor, é hora de criar a VPC do consumidor 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 nos permitirá estabelecer conexões SSH com as instâncias de consumidores diretamente usando a gcloud.

Depois vamos criar um gateway simples do Cloud NAT no modo de alocação manual e o endereço reservado "nat-address-1" associados 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

A seguir, 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 de 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 ASN privado, mas ele é 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 do produtor reservados aqui para poder se referir a 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 utiliza o mesmo IP reservado "nat-address-1" para comunicação com endereços externos.

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

Conecte-se via SSH à instância do consumidor. No Cloud Shell:

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

Agora você deve estar no shell da instância.

Exemplo de resposta (resultado completo truncado para concisão)

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, primeiro buscaremos os dois IPs do produtor e os preencheremos 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 usar o comando "curl" nas duas instâncias do 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

O mesmo endereço IP será retornado para os dois endpoints, que é igual ao valor do IP reservado externo "nat-address-1".

Da mesma forma, um curl para qualquer serviço refletor de IP externo deve 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 retornar o SSH depois de configurar as regras 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 o idioma da expressão da regra, consulte Linguagem da expressão da regra.

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

Primeiro, vamos criar um arquivo YAML de regra 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

Em seguida, vamos atualizar o gateway NAT atual usando esse arquivo de regra. No Cloud Shell:

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

Você deve esperar a seguinte saída :

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

Confira se a regra foi configurada. No Cloud Shell:

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

Você deve esperar a seguinte saída :

RULE_NUMBER  MATCH
100          destination.ip == '35.192.142.134'

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

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

Você deve esperar a seguinte saída :

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ê deve esperar a seguinte saída :

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

Novamente, repita o comando anterior para confirmar que a regra foi criada. Desta vez, adicionaremos a chave de formatação YAML para exibir 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ê deve esperar a seguinte saída :

---
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 "nat-address1" e "nat-address-2" endereços externos serão exibidos como "IN_USE". Para ver isso, execute este comando no Cloud Shell:

$ gcloud compute addresses list

Você deve esperar a seguinte saída (os endereços IP reais devem corresponder aos endereços que você reservou) :

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. Conecte-se via SSH à instância do consumidor. No Cloud Shell:

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

Agora você deve estar no shell da instância.

Exemplo de resposta (resultado completo truncado para concisão)

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, primeiro buscaremos os dois IPs do produtor e os preencheremos 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 usar o comando "curl" nas duas instâncias do 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ê verá um endereço IP diferente sendo retornado para os dois endpoints. O primeiro endereço IP deve ser o mesmo que o comportamento padrão. O segundo endereço IP deve ser igual a "nat-address-2" após a adição da nova regra NAT.

Um curl para qualquer serviço refletor de IP externo 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 de volta para testar a drenagem de endereços.

10. Atualizar e Excluir regras do Cloud NAT

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

Vamos atualizar o arquivo de regras NAT da seguinte maneira:

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 agora é colocar "nat-address-2" em um estado drenado. E adicione “nat-address-3” no estado ativo. Isso deve permitir que conexões existentes que usam nat-address-2 sejam encerradas normalmente, ao mesmo tempo em que novas conexões são criadas usando apenas nat-address-3.

Em seguida, vamos atualizar o gateway NAT atual usando esse arquivo de regra. No Cloud Shell:

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

Você deve esperar a seguinte saída :

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

Confira se a regra foi configurada. No Cloud Shell:

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

Você deve esperar a seguinte saída :

---
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 que "nat-address-2" foi colocado em um estado drenado. Deixaremos para você como um exercício de validar se as novas conexões da VPC do consumidor agora usam os IPs NAT corretos.

Por fim, excluir as regras NAT do gateway do Cloud NAT e voltar ao comportamento padrão. É possível usar o comando gcloud a seguir. No Cloud Shell:

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

Você deve esperar a seguinte saída :

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 "describe" do gateway NAT

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

Você deve esperar a seguinte saída :

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

Observe como não há um "rules:" no YAML de saída. Indica 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

Saída 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ê deve esperar a seguinte saída :

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ê deve esperar a seguinte saída :

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 as regras de firewall da VPC. No Cloud Shell:

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

Você deve esperar a seguinte saída :

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].

Excluir sub-redes. No Cloud Shell:

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

Você deve esperar a seguinte saída :

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ê deve esperar a seguinte saída :

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 de regras do Cloud NAT.

Conteúdo abordado

  • Como configurar um gateway do Cloud NAT em preparação para as regras NAT.
  • Como projetar regras NAT usando a Common Expression Language (CEL).
  • Como criar regras NAT e anexá-las a um gateway NAT.
  • Como testar regras NAT de 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

  • Crie regras NAT mais complexas, como este exemplo
  • Analisar a drenagem de endereços IP NAT e observar o impacto na conexão.
  • Saiba mais sobre rede no Google Cloud Platform.

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