1. Übersicht
Cloud NAT ist ein leistungsstarkes Tool, mit dem Compute Engine- und Google Kubernetes Engine-Arbeitslasten (GKE) skalierbar und sicher auf Internetressourcen zugreifen können, ohne die darauf ausgeführten Arbeitslasten über externe IPs für den externen Zugriff verfügbar zu machen.
Cloud NAT ist proxyfrei und implementiert NAT direkt auf der Andromeda-SDN-Ebene. Daher gibt es keine Leistungseinbußen für Ihre Arbeitslast und sie lässt sich mühelos auf viele VMs, Regionen und VPCs skalieren.
NAT-Regeln sind eine Erweiterung von Cloud NAT. Mit dem Feature „NAT-Regeln“ in Cloud NAT können Sie Zugriffsregeln erstellen, die festlegen, wie Cloud NAT für die Verbindung mit dem Internet verwendet wird. Derzeit unterstützen NAT-Regeln die Auswahl der Quell-NAT-Adresse basierend auf der Zieladresse.
Ohne NAT-Regeln verwendet eine VM mit aktiviertem Cloud NAT denselben NAT-IP-Adressbereich, um alle Internetadressen zu erreichen.
Manchmal ist es bei einem NAT-Anwendungsfall erforderlich, dass Cloud NAT für bestimmte Ziele unterschiedliche Quell-IP-Adressen verwendet. Eine NAT-Regel definiert eine Übereinstimmung und eine entsprechende Aktion. Nachdem Sie NAT-Regeln angegeben haben, wird das Paket mit jeder NAT-Regel abgeglichen. Wenn eine Regel zutrifft, wird die entsprechende Aktion ausgeführt.
Weitere Informationen finden Sie im Dokumentationsabschnitt zu NAT-Regeln .
Lerninhalte
- So richten Sie ein Cloud NAT-Gateway zur Vorbereitung auf NAT-Regeln ein.
- So entwerfen Sie NAT-Regeln mit der Common Expression Language (CEL).
- NAT-Regeln erstellen und an ein NAT-Gateway anhängen
- NAT-Regeln über eine Instanz testen
- So aktualisieren Sie die Regeln eines NAT-Gateways.
- So löschen Sie NAT-Regeln und stellen das Standardverhalten von Cloud NAT wieder her.
Voraussetzungen
- Grundkenntnisse hinsichtlich der Google Compute Engine
- Grundkenntnisse in den Bereichen Netzwerk und TCP/IP
- Grundkenntnisse zu Unix/Linux-Befehlszeilen
- Es ist hilfreich, wenn Sie bereits eine Einführung in das Networking in der GCP absolviert haben, z. B. das Lab Networking in Google Cloud.
- Grundlagen von Cloud NAT.
2. Google Cloud Console und Cloud Shell verwenden
In diesem Lab verwenden wir sowohl die Google Cloud Console als auch Cloud Shell, um mit GCP zu interagieren.
Google Cloud Console
Die Cloud Console ist unter https://console.cloud.google.com erreichbar.

Umgebung zum selbstbestimmten Lernen einrichten
- Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.



- Der Projektname ist Ihre persönliche Kennung für dieses Projekt. Solange Sie die Namenskonventionen einhalten, können Sie alles verwenden, was Sie möchten, und es jederzeit aktualisieren.
- Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (die in der Regel als
PROJECT_IDangegeben wird). Wenn Ihnen die ID nicht gefällt, können Sie eine andere zufällige ID generieren oder eine eigene ID ausprobieren und sehen, ob sie verfügbar ist. Sobald das Projekt erstellt wurde, wird es „eingefroren“.
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Google Cloud-Ressourcen verwenden zu können.
Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Folgen Sie bitte der Anleitung im Abschnitt „Bereinigen“, in der Sie erfahren, wie Sie Ressourcen herunterfahren können, damit nach Abschluss dieser Anleitung keine Gebühren anfallen. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.
Cloud Shell starten
Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.
Klicken Sie in der GCP Console oben rechts in der Symbolleiste auf das Cloud Shell-Symbol:

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Für dieses Lab benötigen Sie lediglich einen Browser.
3. Lab einrichten
In diesem Lab verwenden Sie ein Projekt und erstellen zwei VPCs mit jeweils einem Subnetz. Sie reservieren externe IP-Adressen und erstellen und konfigurieren dann ein Cloud NAT-Gateway (mit einem Cloud Router), zwei Producer-Instanzen und eine Consumer-Instanz. Nachdem Sie das Standardverhalten von Cloud NAT validiert haben, erstellen Sie benutzerdefinierte Cloud NAT-Regeln und validieren deren Verhalten.
Übersicht über die Netzwerkarchitektur:

4. Externe IP-Adressen reservieren
Reservieren wir alle externen IP-Adressen, die in diesem Lab verwendet werden sollen. So können Sie alle relevanten NAT- und Firewallregeln sowohl im VPC des Nutzers als auch im VPC des Erstellers schreiben.
Über Cloud Shell:
gcloud compute addresses create nat-address-1 nat-address-2 nat-address-3 producer-address-1 producer-address-2 --region us-east4
Ausgabe:
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].
Füllen Sie die reservierten IP-Adressen als Umgebungsvariablen ein.
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)"`
Es wird keine Ausgabe erwartet, aber Sie können prüfen, ob die Adressen richtig eingetragen wurden. Lassen Sie uns die Werte aller Umgebungsvariablen ausgeben.
$ env | egrep '^(nat|producer)ip[1-3]'
Ausgabe:
producerip1=<Actual Producer IP 1> producerip2=<Actual Producer IP 2> natip1=<NAT IP 1> natip2=<NAT IP 2> natip3=<NAT IP 3>
5. Ersteller-VPC und Instanzen einrichten.
Wir erstellen jetzt die Ressourcen für die Producer-Ressourcen. Die Instanzen, die in der Ersteller-VPC ausgeführt werden, bieten den internetorientierten Dienst über zwei öffentliche IPs an: „producer-address-1“ und „producer-address-2“.
Erstellen wir zuerst die VPC. Über Cloud Shell:
gcloud compute networks create producer-vpc --subnet-mode custom
Ausgabe:
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
Als Nächstes erstellen wir das Subnetz in us-east4. Über Cloud Shell:
gcloud compute networks subnets create producer-e4 \ --network producer-vpc --range 10.0.0.0/24 --region us-east4
Ausgabe:
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
Als Nächstes erstellen wir VPC-Firewallregeln, damit die NAT-IP-Adressen die Producer-Instanzen auf Port 8080 erreichen können.
Für die erste Regel in Cloud Shell:
gcloud compute firewall-rules create producer-allow-8080 \ --network producer-vpc --allow tcp:8080 \ --source-ranges $natip1,$natip2,$natip3
Ausgabe:
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
Als Nächstes erstellen Sie die beiden Producer-Instanzen.
Auf den Producer-Instanzen wird ein IP-Echodienst in einem Docker-Container ausgeführt, der auf Docker Hub verfügbar ist. Der Quellcode ist im GitHub-Repository des Dienstautors verfügbar.
Um die Instanzen schnell mit der erforderlichen Software bereitzustellen, verwenden wir die Funktion Containerbereitstellung in Compute Engine.
Damit wir NAT-Regeln schreiben können, stellen wir für jede Instanz eine andere reservierte IP-Adresse bereit.
Erstellen Sie die erste Instanz. Über 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
Ausgabe:
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
Erstellen Sie dann die zweite Instanz. Über 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
Ausgabe:
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. Consumer-VPC, Cloud NAT und Instanz einrichten
Nachdem Sie den Dienst des Diensterstellers erstellt haben, müssen Sie die VPC des Dienstnutzers und das zugehörige Cloud NAT-Gateway erstellen.
Nachdem wir die VPC und das Subnetz erstellt haben, fügen wir eine einfache Firewallregel für eingehenden Traffic hinzu, um die TCP-Quell-IP-Bereiche von IAP zuzulassen. So können wir mit gcloud direkt eine SSH-Verbindung zu den Consumer-Instanzen herstellen.
Wir erstellen dann ein einfaches Cloud NAT-Gateway im manuellen Zuweisungsmodus und die zugehörige reservierte Adresse „nat-address-1“. In den folgenden Teilen des Codelabs aktualisieren wir die Konfiguration des Gateways, um benutzerdefinierte Regeln hinzuzufügen. .
Erstellen wir zuerst die VPC. Über Cloud Shell:
gcloud compute networks create consumer-vpc --subnet-mode custom
Ausgabe:
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
Als Nächstes erstellen wir ein Subnetz in us-east4. Über Cloud Shell:
gcloud compute networks subnets create consumer-e4 \ --network consumer-vpc --range 10.0.0.0/24 --region us-east4
Ausgabe:
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
Als Nächstes erstellen wir VPC-Firewallregeln, damit IAP-Bereichsadressen die Consumer-Instanzen auf Port 22 erreichen können.
Führen Sie für die erste Firewallregel den folgenden Befehl in Cloud Shell aus:
gcloud compute firewall-rules create consumer-allow-iap \ --network consumer-vpc --allow tcp:22 \ --source-ranges 35.235.240.0/20
Ausgabe:
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
Bevor wir ein NAT-Gateway erstellen können, müssen wir zuerst eine Cloud Router-Instanz erstellen. Wir verwenden eine private ASN-Nummer, die für die Aktivitäten in diesem Lab jedoch irrelevant ist. Über Cloud Shell:
gcloud compute routers create consumer-cr \ --region=us-east4 --network=consumer-vpc \ --asn=65501
Ausgabe:
Creating router [consumer-cr]...done. NAME REGION NETWORK consumer-cr us-east4 consumer-vpc
Erstellen Sie dann die NAT-Gateway-Instanz. Über 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
Ausgabe:
Creating NAT [consumer-nat-gw] in router [consumer-cr]...done.
Erstellen Sie die Testinstanz für Verbraucher. Wir füllen die reservierten Producer-IPs hier ein, damit wir später in der Instanz darauf verweisen können. Über 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
Ausgabe:
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. Standardverhalten von Cloud NAT prüfen
An diesem Punkt verwendet die Consumer-Instanz das Standardverhalten von Cloud NAT, bei dem dieselbe reservierte IP-Adresse „nat-address-1“ für die Kommunikation mit allen externen Adressen verwendet wird.
Lassen Sie uns dieses Verhalten zuerst validieren, bevor wir die neue Funktion für NAT-Regeln in Cloud NAT verwenden.
Stellen Sie eine SSH-Verbindung zur Consumer-Instanz her. Über Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
Sie sollten sich jetzt in der Instanz-Shell befinden.
Beispielausgabe (vollständige Ausgabe aus Gründen der Übersichtlichkeit gekürzt)
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:~$
Rufen wir zuerst in der Consumer-Instanz die beiden Producer-IPs ab und weisen wir sie als Umgebungsvariablen zu.
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"`
Versuchen Sie dann, beide Erstellerinstanzen mit curl aufzurufen, und beobachten Sie die zurückgegebene Quell-IP-Adresse.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.136.8.83
Für beide Endpunkte sollte dieselbe IP-Adresse zurückgegeben werden, die dem Wert der externen reservierten IP-Adresse „nat-address-1“ entspricht.
Ebenso sollte ein curl an einen beliebigen externen IP-Reflektordienst dieselbe IP-Adresse anzeigen, z. B.:
<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
Beenden Sie die SSH-Sitzung der Instanz. Wir stellen die SSH-Verbindung wieder her, nachdem wir NAT-Regeln konfiguriert haben.
8. Cloud NAT-Regeln erstellen
NAT-Regeln werden in der Common Expression Language-Syntax geschrieben. Weitere Informationen zur Sprache von Regelausdrücken finden Sie unter Sprache von Regelausdrücken.
Sie können einem vorhandenen NAT-Gateway auch mit gcloud-Befehlen eine NAT-Regel hinzufügen. Wir sehen uns beide Optionen zum Erstellen von Cloud NAT-Regeln an.
Erstellen wir zuerst eine YAML-Datei für die NAT-Regel.
Über 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
Aktualisieren wir nun unser vorhandenes NAT-Gateway mit dieser Regeldatei. Über Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
Sie sollten die folgende Ausgabe erhalten :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
Prüfen Sie, ob die Regel erfolgreich konfiguriert wurde. Über Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4
Sie sollten die folgende Ausgabe erhalten :
RULE_NUMBER MATCH 100 destination.ip == '35.192.142.134'
Wir versuchen, dieselbe Regel nur mit gcloud-Befehlen neu zu erstellen. Löschen Sie zuerst die vorhandene Regel. Über Cloud Shell:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
Sie sollten die folgende Ausgabe erhalten :
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
Erstellen Sie die Regel dann mit diesem gcloud-Befehl neu. Über 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
Sie sollten die folgende Ausgabe erhalten :
Creating Rule [100] in NAT [consumer-nat-gw]...done.
Wiederholen Sie den vorherigen Befehl, um zu prüfen, ob die Regel erfolgreich erstellt wurde. Dieses Mal fügen wir den YAML-Formatierungsschalter hinzu, um die vollständigen Details der Regel zu sehen.
Über Cloud Shell:
gcloud alpha compute routers nats rules list\ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
Sie sollten die folgende Ausgabe erhalten :
--- 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
Beachten Sie, dass die externen Adressen „nat-address1“ und „nat-address-2“ jetzt als „IN_USE“ angezeigt werden. Führen Sie dazu den folgenden Befehl in Cloud Shell aus:
$ gcloud compute addresses list
Die Ausgabe sollte in etwa so aussehen (die tatsächlichen IP-Adressen sollten mit den von Ihnen reservierten Adressen übereinstimmen) :
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. Verhalten von Cloud NAT-Regeln prüfen
An diesem Punkt sollte die Consumer-Instanz die erstellte Cloud NAT-Regel verwenden, um mit nat-address-2 mit producer-address-2 zu kommunizieren.
Lassen Sie uns dieses Verhalten überprüfen. Stellen Sie eine SSH-Verbindung zur Consumer-Instanz her. Über Cloud Shell:
gcloud compute ssh consumer-instance --zone=us-east4-a
Sie sollten sich jetzt in der Instanz-Shell befinden.
Beispielausgabe (vollständige Ausgabe aus Gründen der Übersichtlichkeit gekürzt)
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:~$
Rufen wir zuerst in der Consumer-Instanz die beiden Producer-IPs ab und weisen wir sie als Umgebungsvariablen zu.
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"`
Versuchen Sie dann, beide Erstellerinstanzen mit curl aufzurufen, und beobachten Sie die zurückgegebene Quell-IP-Adresse.
<username>@consumer-instance:~$ curl http://$producerip1:8080 34.136.8.83 <username>@consumer-instance:~$ curl http://$producerip2:8080 34.70.137.35
Für beide Endpunkte sollte jetzt eine andere IP-Adresse zurückgegeben werden. Die erste IP-Adresse sollte mit dem Standardverhalten übereinstimmen. Die zweite IP-Adresse sollte nach dem Hinzufügen der neuen NAT-Regel gleich „nat-address-2“ sein.
Ein curl an einen beliebigen externen IP-Reflektordienst sollte weiterhin dieselbe IP-Adresse wie beim Standardverhalten anzeigen, z. B.:
<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
Beenden Sie die SSH-Sitzung der Instanz. Wir stellen später wieder eine SSH-Verbindung her, um das Leeren der Adressen zu testen.
10. Cloud NAT-Regeln aktualisieren und löschen
Sie können vorhandene Cloud NAT-Regeln aktualisieren. Sie können beispielsweise neue IP-Adressen zuordnen und vorhandene IP-Adressen, die mit vorhandenen Regeln verknüpft sind, entfernen.
Aktualisieren wir die NAT-Regeldatei so:
Über 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
Durch diese neue Datei wird „nat-address-2“ in den Status „Drained“ versetzt. Fügen Sie „nat-address-3“ im aktiven Status hinzu. Dadurch sollten bestehende Verbindungen mit nat-address-2 ordnungsgemäß beendet werden, während neue Verbindungen nur mit nat-address-3 erstellt werden.
Aktualisieren wir nun unser vorhandenes NAT-Gateway mit dieser Regeldatei. Über Cloud Shell:
gcloud alpha compute routers nats update consumer-nat-gw \
--router=consumer-cr \
--rules=natrulesfile.txt \
--router-region=us-east4
Sie sollten die folgende Ausgabe erhalten :
Updating nat [consumer-nat-gw] in router [consumer-cr]...done.
Prüfen Sie, ob die Regel erfolgreich konfiguriert wurde. Über Cloud Shell:
gcloud alpha compute routers nats rules list \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --format=yaml
Sie sollten die folgende Ausgabe erhalten :
--- 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
Beachten Sie, dass „nat-address-2“ jetzt den Status „Drained“ hat. Es liegt an Ihnen, zu prüfen, ob für neue Verbindungen aus der Consumer-VPC jetzt die richtigen NAT-IPs verwendet werden.
Zum Schluss können Sie NAT-Regeln aus Ihrem Cloud NAT-Gateway löschen und zum Standardverhalten zurückkehren. Sie können den folgenden gcloud-Befehl verwenden. Über Cloud Shell:
gcloud alpha compute routers nats rules delete 100 \ --nat=consumer-nat-gw --router=consumer-cr \ --router-region=us-east4 --quiet
Sie sollten die folgende Ausgabe erhalten :
Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]
Verwenden Sie den Befehl „NAT-Gateway beschreiben“, um zu prüfen, ob keine NAT-Regeln mehr vorhanden sind.
gcloud alpha compute routers nats describe consumer-nat-gw \ --router=consumer-cr --router-region=us-east4
Sie sollten die folgende Ausgabe erhalten :
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
Beachten Sie, dass es in der YAML-Ausgabe keinen Abschnitt „rules:“ gibt. Es sind keine NAT-Regeln konfiguriert.
11. Bereinigungsschritte
Um wiederkehrende Gebühren zu vermeiden, sollten Sie alle Ressourcen löschen, die mit diesem Codelab verknüpft sind.
Löschen Sie zuerst alle Instanzen.
Über Cloud Shell:
gcloud compute instances delete consumer-instance \ producer-instance-1 producer-instance-2 \ --zone us-east4-a --quiet
Erwartete Ausgabe :
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].
Löschen Sie als Nächstes den Cloud Router. Über Cloud Shell:
gcloud compute routers delete consumer-cr \ --region us-east4 --quiet
Sie sollten die folgende Ausgabe erhalten :
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].
Geben Sie alle externen IP-Adressen frei. Über 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
Sie sollten die folgende Ausgabe erhalten :
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].
VPC-Firewallregeln löschen Über Cloud Shell:
gcloud compute firewall-rules delete consumer-allow-iap \ producer-allow-8080 --quiet
Sie sollten die folgende Ausgabe erhalten :
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].
Subnetze löschen Über Cloud Shell:
gcloud compute networks subnets delete consumer-e4 \ producer-e4 --region=us-east4 --quiet
Sie sollten die folgende Ausgabe erhalten :
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].
Löschen Sie schließlich die VPCs. Über Cloud Shell:
gcloud compute networks delete consumer-vpc \ producer-vpc --quiet
Sie sollten die folgende Ausgabe erhalten :
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. Glückwunsch!
Sie haben das Lab „Cloud NAT-Regeln“ abgeschlossen.
Behandelte Themen
- So richten Sie ein Cloud NAT-Gateway zur Vorbereitung auf NAT-Regeln ein.
- So entwerfen Sie NAT-Regeln mit der Common Expression Language (CEL).
- NAT-Regeln erstellen und an ein NAT-Gateway anhängen
- NAT-Regeln über eine Instanz testen
- So aktualisieren Sie die Regeln eines NAT-Gateways.
- So löschen Sie NAT-Regeln und stellen das Standardverhalten von Cloud NAT wieder her.
Nächste Schritte
- Erstellen Sie komplexere NAT-Regeln, z. B. dieses Beispiel.
- NAT-IP-Adressen per Drain beenden und Auswirkungen auf Verbindungen beobachten
- Sie können mehr über Netzwerke auf der Google Cloud Platform erfahren.
© Google LLC oder deren Tochtergesellschaften. Alle Rechte vorbehalten. Nicht weitergeben.