Utilizzo delle regole Cloud NAT

1. Panoramica

Cloud NAT è uno strumento potente: con questo strumento, i carichi di lavoro di Compute Engine e Google Kubernetes Engine (GKE) possono accedere alle risorse internet in modo scalabile e sicuro, senza esporre i carichi di lavoro in esecuzione all'accesso esterno utilizzando IP esterni.

Cloud NAT è caratterizzato da un design senza proxy, che implementa NAT direttamente nel livello SDN Andromeda. Pertanto, non ci sono conseguenze sulle prestazioni del tuo workload e si adatta facilmente a molte VM, regioni e VPC.

Le regole NAT sono un'estensione di Cloud NAT. La funzionalità Regole NAT in Cloud NAT consente di creare regole di accesso che definiscono la modalità di utilizzo di Cloud NAT per la connessione a internet. Al momento, le regole NAT supportano la selezione dell'indirizzo NAT di origine in base all'indirizzo di destinazione.

Senza regole NAT, una VM con Cloud NAT abilitato utilizza lo stesso insieme di indirizzi IP NAT per raggiungere tutti gli indirizzi internet.

A volte, un caso d'uso NAT richiede che Cloud NAT utilizzi indirizzi IP di origine diversi per destinazioni specifiche. Una regola NAT definisce una corrispondenza e un'azione corrispondente. Una volta specificate le regole NAT, il pacchetto viene confrontato con ciascuna regola NAT. Se viene trovata una corrispondenza con una regola, viene eseguita l'azione corrispondente.

Per saperne di più, consulta la sezione della documentazione sulle regole NAT .

Cosa imparerai a fare

  • Come configurare un gateway Cloud NAT in preparazione delle regole NAT.
  • Come progettare regole NAT utilizzando Common Expression Language (CEL).
  • Come creare regole NAT e collegarle a un gateway NAT.
  • Come testare le regole NAT da un'istanza.
  • Come aggiornare le regole di un gateway NAT.
  • Come eliminare le regole NAT e ripristinare il comportamento predefinito di Cloud NAT.

Che cosa ti serve

  • Conoscenza di base di Google Compute Engine
  • Conoscenza di base del networking e di TCP/IP
  • Conoscenza di base della riga di comando Unix/Linux
  • È utile aver completato un tour del networking in GCP, ad esempio il lab Networking in Google Cloud.
  • Comprensione delle nozioni di base di Cloud NAT.

2. Utilizzo di Google Cloud Console e Cloud Shell

Per interagire con GCP, utilizzeremo sia la console Google Cloud che Cloud Shell durante questo lab.

Google Cloud Console

Puoi accedere alla console Cloud all'indirizzo https://console.cloud.google.com.

75eef5f6fd6d7e41.png

Configurazione dell'ambiente autonomo

  1. Accedi alla console Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Il nome del progetto è il tuo identificatore personale per questo progetto. Se rispetti le convenzioni di denominazione, puoi utilizzare qualsiasi nome e aggiornarlo in qualsiasi momento.
  • L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato una volta impostato). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che in genere è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro casuale oppure puoi provare il tuo e vedere se è disponibile. Viene "congelato" una volta creato il progetto.
  1. Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.

L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Assicurati di seguire le istruzioni riportate nella sezione "Pulizia", che ti consiglia come arrestare le risorse in modo da non incorrere in addebiti oltre questo tutorial. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.

Avvia Cloud Shell

Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Nella console GCP, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

bce75f34b2c53987.png

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere un risultato simile a questo:

f6ef2b5f13479f3a.png

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Tutto il lavoro di questo lab può essere svolto semplicemente con un browser.

3. Configurazione del lab

Per questo lab, utilizzerai un progetto e creerai due VPC con una subnet in ciascuno. Prenoterai indirizzi IP esterni, quindi creerai e configurerai un gateway Cloud NAT (con un router Cloud), due istanze di produttore e un'istanza di consumer. Dopo aver convalidato il comportamento predefinito di Cloud NAT, creerai regole personalizzate di Cloud NAT e ne convaliderai il comportamento.

Panoramica dell'architettura di rete:

815147de3de0bd19.png

4. Prenota indirizzi IP esterni

Prenotiamo tutti gli indirizzi IP esterni da utilizzare in questo lab. In questo modo, potrai scrivere tutte le regole NAT e firewall pertinenti sia nel VPC consumer che in quello producer.

Da Cloud Shell:

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

Output:

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

Compila gli indirizzi IP riservati come variabili di 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)"`

Non è previsto alcun output, ma per confermare che gli indirizzi siano stati compilati correttamente. Visualizziamo i valori di tutte le variabili di ambiente.

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

Output:

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

5. Configurazione di VPC e istanze producer.

Ora creeremo le risorse per le risorse del produttore. Le istanze in esecuzione nel VPC del producer offriranno il servizio rivolto a internet utilizzando due IP pubblici "producer-address-1" e "producer-address-2" .

Innanzitutto, creiamo il VPC. Da Cloud Shell:

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

Output:

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 questo punto, creiamo la subnet in us-east4. Da Cloud Shell:

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

Output:

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

Successivamente, creiamo regole firewall VPC per consentire agli indirizzi IP NAT di raggiungere le istanze del produttore sulla porta 8080.

Per la prima regola, da Cloud Shell:

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

Output:

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

Il passaggio successivo consiste nel creare le due istanze del produttore.

Le istanze del produttore eseguiranno un servizio di echo IP in un container Docker disponibile su Docker Hub (il codice sorgente è disponibile nel repository GitHub dell'autore del servizio).

Per eseguire rapidamente il provisioning delle istanze con tutto il software richiesto, utilizzeremo la funzionalità Deployment di container su Compute Engine.

Per poter scrivere regole NAT, eseguiremo il provisioning di ogni istanza con un indirizzo IP riservato diverso.

Crea la prima istanza. Da 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

Output:

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

Poi crea la seconda istanza. Da 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

Output:

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. Configura il VPC consumer, Cloud NAT e l'istanza

Ora che hai creato il servizio producer, è il momento di creare il VPC consumer e il relativo gateway Cloud NAT.

Dopo aver creato il VPC e la subnet, aggiungeremo una semplice regola firewall in entrata per consentire a IAP gli intervalli IP di origine TCP. In questo modo potremo accedere con SSH alle istanze consumer direttamente utilizzando gcloud.

Creeremo quindi un semplice gateway Cloud NAT in modalità di allocazione manuale e l'indirizzo riservato "nat-address-1" associato. Nelle parti successive del codelab, aggiorneremo la configurazione del gateway per aggiungere regole personalizzate. .

Innanzitutto, creiamo il VPC. Da Cloud Shell:

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

Output:

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

Successivamente, creiamo una subnet in us-east4. Da Cloud Shell:

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

Output:

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

Successivamente, creiamo regole firewall VPC per consentire agli indirizzi degli intervalli IAP di raggiungere le istanze consumer sulla porta 22.

Per la prima regola firewall, esegui questo comando da Cloud Shell:

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

Output:

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

Prima di creare un gateway NAT, dobbiamo prima creare un'istanza di Cloud Router (utilizziamo un numero ASN privato, ma è irrilevante per le attività di questo lab). Da Cloud Shell:

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

Output:

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

Poi crea l'istanza del gateway NAT. Da 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

Output:

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

Crea l'istanza di test consumer. Inseriamo qui gli IP del produttore riservati per poterli consultare in un secondo momento all'interno dell'istanza. Da 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

Output:

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. Verifica il comportamento predefinito di Cloud NAT

A questo punto, l'istanza consumer utilizza il comportamento predefinito di Cloud NAT, che utilizza lo stesso IP riservato "nat-address-1" per comunicare con tutti gli indirizzi esterni.

Convalidiamo prima questo comportamento prima di utilizzare la nuova funzionalità Regole NAT in Cloud NAT.

Accedi all'istanza consumer tramite SSH. Da Cloud Shell:

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

Ora dovresti essere nella shell dell'istanza.

Esempio di output (output completo troncato per brevità)

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:~$

Dall'interno dell'istanza consumer, recuperiamo prima gli IP del produttore e inseriamoli come variabili di 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"`

Quindi prova a eseguire curl su entrambe le istanze del produttore e osserva l'indirizzo IP di origine restituito.

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

Dovresti vedere lo stesso indirizzo IP restituito per entrambi gli endpoint, che è uguale al valore dell'IP esterno riservato "nat-address-1".

Allo stesso modo, un comando curl a qualsiasi servizio di reflector IP esterno dovrebbe mostrare lo stesso IP, ad esempio:

<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

Esci per ora dalla sessione SSH dell'istanza. Ritorneremo a SSH dopo aver configurato le regole NAT.

8. Crea regole Cloud NAT

Le regole NAT vengono scritte utilizzando la sintassi di Common Expression Language. Per saperne di più sul linguaggio delle espressioni delle regole, consulta Linguaggio delle espressioni delle regole.

Puoi anche aggiungere una regola NAT a un gateway NAT esistente utilizzando i comandi gcloud. Esploreremo entrambe le opzioni per creare regole Cloud NAT.

Innanzitutto, creiamo un file YAML della regola NAT.

Da 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

A questo punto, aggiorniamo il gateway NAT esistente utilizzando questo file di regole. Da Cloud Shell:

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

Dovresti aspettarti il seguente output :

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

Verifica che la regola sia stata configurata correttamente. Da Cloud Shell:

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

Dovresti aspettarti il seguente output :

RULE_NUMBER  MATCH
100          destination.ip == '35.192.142.134'

Proviamo a ricreare la stessa regola utilizzando solo i comandi gcloud. Elimina prima la regola esistente. Da Cloud Shell:

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

Dovresti aspettarti il seguente output :

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

Quindi ricrea la regola utilizzando questo comando gcloud. Da 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

Dovresti aspettarti il seguente output :

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

Per verificare che la regola sia stata creata correttamente, ripeti il comando precedente. Questa volta aggiungeremo l'opzione di formattazione YAML per visualizzare tutti i dettagli della regola.

Da Cloud Shell:

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

Dovresti aspettarti il seguente output :

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

Infine, nota che ora entrambi gli indirizzi esterni "nat-address1" e "nat-address-2" vengono visualizzati come "IN_USE". Per visualizzarlo, esegui questo comando da Cloud Shell:

$ gcloud compute addresses list

Dovresti aspettarti il seguente output (gli indirizzi IP effettivi devono corrispondere a quelli che hai riservato) :

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. Verifica il comportamento delle regole Cloud NAT

A questo punto, l'istanza consumer deve utilizzare la regola Cloud NAT creata per utilizzare nat-address-2 per comunicare con producer-address-2.

Convalidiamo questo comportamento. Accedi all'istanza consumer tramite SSH. Da Cloud Shell:

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

Ora dovresti essere nella shell dell'istanza.

Esempio di output (output completo troncato per brevità)

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:~$

Dall'interno dell'istanza consumer, recuperiamo prima gli IP del produttore e inseriamoli come variabili di 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"`

Quindi prova a eseguire curl su entrambe le istanze del produttore e osserva l'indirizzo IP di origine restituito.

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

Ora dovresti vedere un indirizzo IP diverso restituito per entrambi gli endpoint. Il primo indirizzo IP dovrebbe essere lo stesso del comportamento predefinito. Il secondo indirizzo IP deve essere uguale a "nat-address-2" dopo l'aggiunta della nuova regola NAT.

Un comando curl a qualsiasi servizio di reflector IP esterno dovrebbe comunque mostrare lo stesso IP del comportamento predefinito, ad esempio:

<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

Per il momento esci dalla sessione SSH dell'istanza. Torneremo a SSH per testare lo svuotamento degli indirizzi.

10. Aggiorna ed elimina le regole Cloud NAT

Puoi aggiornare le regole Cloud NAT esistenti. Ad esempio, puoi associare nuovi indirizzi IP ed eliminare quelli esistenti associati alle regole esistenti.

Aggiorniamo il file delle regole NAT come segue

Da 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

Questo nuovo file ora imposta "nat-address-2" in uno stato di esaurimento. e aggiungi "nat-address-3" nello stato attivo. In questo modo, le connessioni esistenti che utilizzano nat-address-2 verranno terminate normalmente, mentre le nuove connessioni utilizzeranno solo nat-address-3.

A questo punto, aggiorniamo il gateway NAT esistente utilizzando questo file di regole. Da Cloud Shell:

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

Dovresti aspettarti il seguente output :

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

Verifica che la regola sia stata configurata correttamente. Da Cloud Shell:

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

Dovresti aspettarti il seguente output :

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

Nota come "nat-address-2" sia ora in stato di esaurimento. Lasciamo a te il compito di verificare che le nuove connessioni dal VPC consumer ora utilizzino gli IP NAT corretti.

Infine, per eliminare le regole NAT dal gateway Cloud NAT e ripristinare il comportamento predefinito. Puoi utilizzare il seguente comando gcloud. Da Cloud Shell:

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

Dovresti aspettarti il seguente output :

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

Per verificare che non esistano altre regole NAT, utilizziamo il comando di descrizione del gateway NAT

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

Dovresti aspettarti il seguente output :

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

Nota che non è presente una sezione "rules:" nel file YAML di output. che indica che non sono configurate regole NAT.

11. Procedura di pulizia

Per evitare addebiti ricorrenti, devi eliminare tutte le risorse associate a questo codelab.

Elimina prima tutte le istanze.

Da Cloud Shell:

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

Output previsto :

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

Dopodiché, elimina il router Cloud. Da Cloud Shell:

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

Dovresti aspettarti il seguente output :

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

Rilascia tutti gli indirizzi IP esterni. Da 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

Dovresti aspettarti il seguente output :

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

Elimina le regole firewall VPC. Da Cloud Shell:

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

Dovresti aspettarti il seguente output :

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

Elimina le subnet. Da Cloud Shell:

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

Dovresti aspettarti il seguente output :

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

Infine, eliminiamo i VPC. Da Cloud Shell:

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

Dovresti aspettarti il seguente output :

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. Complimenti!

Hai completato il lab sulle regole Cloud NAT.

Argomenti trattati

  • Come configurare un gateway Cloud NAT in preparazione delle regole NAT.
  • Come progettare regole NAT utilizzando Common Expression Language (CEL).
  • Come creare regole NAT e collegarle a un gateway NAT.
  • Come testare le regole NAT da un'istanza.
  • Come aggiornare le regole di un gateway NAT.
  • Come eliminare le regole NAT e ripristinare il comportamento predefinito di Cloud NAT.

Passaggi successivi

  • Prova a creare regole NAT più complesse, come questo esempio.
  • Esplora gli indirizzi IP NAT in esaurimento e osserva l'impatto sulla connessione.
  • Scopri di più sul networking su Google Cloud Platform

©Google, Inc. e/o le sue società consociate. Tutti i diritti riservati. Distribuzione vietata.