Cloud NAT-NAT-Regeln verwenden

1. Übersicht

Cloud NAT ist ein leistungsstarkes Tool: Damit können Compute Engine- und Google Kubernetes Engine-Arbeitslasten (GKE) skalierbar und sicher auf Internetressourcen zugreifen, ohne die darauf ausgeführten Arbeitslasten über externe IP-Adressen für den externen Zugriff freizugeben.

Cloud NAT hat ein Proxy-freies Design und implementiert NAT direkt auf der Andromeda-SDN-Ebene. Dies hat keine Auswirkungen auf die Leistung Ihrer Arbeitslast und lässt sich mühelos auf viele VMs, Regionen und VPCs skalieren.

NAT-Regeln sind eine Erweiterung von Cloud NAT. Mit der Funktion „NAT-Regeln“ in Cloud NAT können Sie Zugriffsregeln erstellen, die festlegen, wie Cloud NAT für die Verbindung zum Internet verwendet wird. Derzeit unterstützen NAT-Regeln die Quell-NAT-Adressauswahl anhand der Zieladresse.

Ohne NAT-Regeln verwendet eine VM mit aktiviertem Cloud NAT denselben Satz von NAT-IP-Adressen, um alle Internetadressen zu erreichen.

Manchmal verlangt ein NAT-Anwendungsfall für Cloud NAT die Verwendung unterschiedlicher Quell-IP-Adressen für bestimmte Ziele. Eine NAT-Regel definiert eine Übereinstimmung und eine entsprechende Aktion. Nachdem Sie NAT-Regeln festgelegt haben, wird das Paket mit jeder NAT-Regel abgeglichen. Wird eine Regel abgeglichen, wird die Aktion für diese Übereinstimmung ausgeführt.

Weitere Informationen finden Sie im Dokumentationsabschnitt zu NAT-Regeln .

Aufgaben in diesem Lab

  • Anleitung zum Einrichten eines Cloud NAT-Gateways zur Vorbereitung auf NAT-Regeln.
  • So entwerfen Sie NAT-Regeln mithilfe der Common Expression Language (CEL).
  • So erstellen Sie NAT-Regeln und hängen sie an ein NAT-Gateway an.
  • So testen Sie NAT-Regeln in einer Instanz.
  • So aktualisieren Sie die Regeln eines NAT-Gateways.
  • NAT-Regeln löschen und zum Standardverhalten von Cloud NAT zurückkehren.

Voraussetzungen

  • Grundkenntnisse hinsichtlich der Google Compute Engine
  • Grundkenntnisse in den Bereichen Netzwerk und TCP/IP
  • Grundkenntnisse zu Unix/Linux-Befehlszeilen
  • Es ist hilfreich, eine Tour zum Thema Netzwerke in der GCP zu absolvieren, z. B. das Lab Netzwerke in Google Cloud.
  • Kenntnisse der Grundlagen von Cloud NAT

2. Google Cloud Console und Cloud Shell verwenden

Für die Interaktion mit der GCP verwenden wir in diesem Lab sowohl die Google Cloud Console als auch Cloud Shell.

Google Cloud Console

Die Cloud Console ist unter https://console.cloud.google.com erreichbar.

75eef5f6fd6d7e41.png

Umgebung für das selbstbestimmte Lernen einrichten

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Der Projektname ist Ihre persönliche Kennung für dieses Projekt. Solange Sie die Namenskonventionen einhalten, können Sie beliebig festlegen und jederzeit aktualisieren.
  • Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich. Sie kann später nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die in der Regel als PROJECT_ID identifiziert wird. Wenn es dir nicht gefällt, kannst du eine weitere zufällige Projekt-ID generieren. Du kannst aber auch selbst eine andere testen, um zu sehen, ob sie verfügbar ist. Dann ist es „eingefroren“ sobald das Projekt erstellt ist.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen nutzen zu können.

Dieses Codelab sollte möglichst wenig kosten. Folgen Sie der Anleitung im Abschnitt „Bereinigen“, . Hier erfahren Sie, wie Sie Ressourcen herunterfahren, damit Ihnen über dieses Tutorial hinaus keine Kosten entstehen. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion mit 300$Guthaben.

Cloud Shell starten

Sie können Google Cloud zwar von Ihrem Laptop aus der Ferne bedienen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, 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:

bce75f34b2c53987.png

Die Bereitstellung und Verbindung mit der Umgebung dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:

f6ef2b5f13479f3a.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Sie können alle Aufgaben in diesem Lab ganz einfach in einem Browser erledigen.

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 sowie eine Nutzerinstanz. Nachdem Sie das Cloud NAT-Standardverhalten geprüft haben, erstellen Sie benutzerdefinierte Cloud NAT-Regeln und validieren ihr Verhalten.

Netzwerkarchitektur – Übersicht:

815147de3de0bd19.png

4. Externe IP-Adressen reservieren

Jetzt reservieren wir alle externen IP-Adressen für dieses Lab. So können Sie alle relevanten NAT- und Firewallregeln sowohl in der Nutzer- als auch in der Producer-VPC schreiben.

In 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 IP-Adressen aus, die als Umgebungsvariablen reserviert wurden.

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 es wird bestätigt, dass die Adressen korrekt ausgefüllt 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. Producer-VPC und -Instanzeinrichtung.

Jetzt erstellen wir die Ressourcen für die Erstellerressourcen. Die Instanzen, die in der Producer-VPC ausgeführt werden, bieten den mit dem Internet verbundenen Dienst über die beiden öffentlichen IP-Adressen "Producer-address-1" an. und "Producer-address-2" .

Zuerst erstellen wir die VPC. In 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. In 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 an Port 8080 erreichen können.

Führen Sie für die erste Regel in Cloud Shell folgende Schritte aus:

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

Im nächsten Schritt erstellen Sie die beiden Producer-Instanzen.

Die Producer-Instanzen führen einen IP-Echo-Dienst in einem Docker-Container aus, der auf Docker Hub verfügbar ist. Der Quellcode ist im GitHub-Repository des Diensterstellers verfügbar.

Um die Instanzen schnell mit der erforderlichen Software bereitzustellen, verwenden wir die Funktion Container-Bereitstellung in Compute Engine.

Damit Sie NAT-Regeln schreiben können, stellen wir jeder Instanz eine andere reservierte IP-Adresse zur Verfügung.

Erstellen Sie die erste Instanz. In 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. In 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. Nutzer-VPC, Cloud NAT und Instanz einrichten

Nachdem Sie den Producer-Dienst erstellt haben, können Sie nun die Nutzer-VPC und das zugehörige Cloud NAT-Gateway erstellen.

Nachdem Sie die VPC und das Subnetz erstellt haben, fügen Sie eine einfache Firewallregel für eingehenden Traffic hinzu, um IAP für TCP-Quell-IP-Bereiche zuzulassen. Dadurch können wir mit gcloud direkt eine SSH-Verbindung zu den Nutzerinstanzen herstellen.

Wir erstellen dann ein einfaches Cloud NAT-Gateway im manuellen Zuweisungsmodus und die reservierte Adresse „nat-address-1“ die damit verknüpft sind. In den nachfolgenden Teilen des Codelabs aktualisieren wir die Gateway-Konfiguration, um benutzerdefinierte Regeln hinzuzufügen. .

Zuerst erstellen wir die VPC. In 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. In 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 Adressen von IAP-Bereichen die Nutzerinstanzen an Port 22 erreichen können.

Führen Sie als erste Firewallregel 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 Sie ein NAT-Gateway erstellen, müssen Sie eine Cloud Router-Instanz erstellen. Wir verwenden eine private ASN-Nummer, die für die Aktivitäten dieses Labs jedoch nicht relevant ist. In 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. In 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 Nutzertestinstanz. Die reservierten Producer-IP-Adressen werden hier eingetragen, damit wir später in der Instanz darauf verweisen können. In 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. Cloud NAT-Standardverhalten prüfen

An dieser Stelle verwendet die Nutzerinstanz das Cloud NAT-Standardverhalten, das dieselbe reservierte IP-Adresse „nat-address-1“ verwendet für die Kommunikation mit allen externen Adressen.

Lassen Sie uns dieses Verhalten zuerst validieren, bevor Sie die neue NAT-Regelfunktion in Cloud NAT verwenden.

Stellen Sie eine SSH-Verbindung zur Nutzerinstanz her. In Cloud Shell:

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

Sie sollten sich jetzt in der Instanz-Shell befinden.

Beispielausgabe (der Einfachheit halber vollständige Ausgabe 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 Sie in der Nutzerinstanz zuerst beide Producer-IP-Adressen ab und geben Sie sie als Umgebungsvariablen ein.

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, mit dem curl-Befehl beide Producer-Instanzen zu erreichen, 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

Sie sollten für beide Endpunkte dieselbe IP-Adresse sehen, die dem Wert der externen reservierten IP-Adresse „nat-address-1“ entspricht.

Ebenso sollte ein curl-Befehl für einen externen IP-Reflektor-Dienst dieselbe IP-Adresse haben. Beispiel:

<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 vorerst die SSH-Sitzung der Instanz. Nachdem Sie die NAT-Regeln konfiguriert haben, wird die SSH-Verbindung wiederhergestellt.

8. Cloud NAT-Regeln erstellen

NAT-Regeln werden in der Common Expression Language-Syntax geschrieben. Weitere Informationen zur Sprache für Regelausdrücke finden Sie unter Sprache für Regelausdrücke.

Sie können einem vorhandenen NAT-Gateway auch mithilfe von gcloud-Befehlen eine NAT-Regel hinzufügen. Wir betrachten beide Optionen zum Erstellen von Cloud NAT-Regeln.

Zuerst erstellen wir eine YAML-Datei für die NAT-Regel.

In 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

Nun aktualisieren wir unser vorhandenes NAT-Gateway mit dieser Regeldatei. In Cloud Shell:

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

Die Ausgabe sollte folgendermaßen aussehen :

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

Prüfen Sie, ob die Regel erfolgreich konfiguriert wurde. In Cloud Shell:

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

Die Ausgabe sollte folgendermaßen aussehen :

RULE_NUMBER  MATCH
100          destination.ip == '35.192.142.134'

Versuchen wir, dieselbe Regel nur mit gcloud-Befehlen neu zu erstellen. Löschen Sie zuerst die vorhandene Regel. In Cloud Shell:

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

Die Ausgabe sollte folgendermaßen aussehen :

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

Erstellen Sie dann die Regel mit diesem gcloud-Befehl neu. In 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

Die Ausgabe sollte folgendermaßen aussehen :

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

Wiederholen Sie den vorherigen Befehl, um zu überprüfen, ob die Regel erfolgreich erstellt wurde. Dieses Mal fügen wir den YAML-Formatierungsschalter hinzu, um alle Details der Regel zu sehen.

In Cloud Shell:

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

Die Ausgabe sollte folgendermaßen aussehen :

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

Jetzt sehen Sie, dass sowohl "nat-address1" und „nat-address-2“ externe Adressen werden als „IN_USE“ angezeigt. Führen Sie dazu den folgenden Befehl in Cloud Shell aus:

$ gcloud compute addresses list

Die Ausgabe sollte folgendermaßen aussehen (die tatsächlichen IP-Adressen sollten mit den Adressen übereinstimmen, die Sie reserviert haben) :

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 dieser Stelle sollte die Nutzerinstanz die erstellte Cloud NAT-Regel verwenden, um nat-address-2 für die Kommunikation mit Producer-address-2 zu verwenden.

Lassen Sie uns dieses Verhalten validieren. Stellen Sie eine SSH-Verbindung zur Nutzerinstanz her. In Cloud Shell:

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

Sie sollten sich jetzt in der Instanz-Shell befinden.

Beispielausgabe (der Einfachheit halber vollständige Ausgabe 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 Sie in der Nutzerinstanz zuerst beide Producer-IP-Adressen ab und geben Sie sie als Umgebungsvariablen ein.

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, mit dem curl-Befehl beide Producer-Instanzen zu erreichen, 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

Sie sollten jetzt für beide Endpunkte eine andere IP-Adresse sehen. Die erste IP-Adresse sollte dem Standardverhalten entsprechen. Die zweite IP-Adresse sollte „nat-address-2“ entsprechen nach dem Hinzufügen der neuen NAT-Regel.

Ein curl für einen externen IP-Reflektordienst sollte immer noch dieselbe IP-Adresse wie das Standardverhalten haben. Beispiel:

<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 vorerst die SSH-Sitzung der Instanz. Anschließend wird SSH zurückgekehrt, um den Adressausgleich zu testen.

10. Aktualisieren und Cloud NAT-Regeln löschen

Sie können vorhandene Cloud NAT-Regeln aktualisieren. Sie können beispielsweise neue IP-Adressen zuweisen und vorhandene IP-Adressen entfernen, die mit vorhandenen Regeln verknüpft sind.

Lassen Sie uns die NAT-Regeldatei wie folgt aktualisieren:

In 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

Die neue Datei hat jetzt die Aufgabe, „nat-address-2“ entladen ist. Und füge „nat-address-3“ hinzu die sich im Status „Aktiv“ befinden. Dadurch sollten bestehende Verbindungen, die nat-address-2 verwenden, ordnungsgemäß beendet werden können, während neue Verbindungen nur mit nat-address-3 erstellt werden.

Nun aktualisieren wir unser vorhandenes NAT-Gateway mit dieser Regeldatei. In Cloud Shell:

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

Die Ausgabe sollte folgendermaßen aussehen :

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

Prüfen Sie, ob die Regel erfolgreich konfiguriert wurde. In Cloud Shell:

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

Die Ausgabe sollte folgendermaßen aussehen :

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

Sie sehen, dass „nat-address-2“ in den entladenen Zustand versetzt. Wir überlassen es Ihnen als Übung, zu prüfen, ob neue Verbindungen von der Nutzer-VPC jetzt die richtigen NAT-IP-Adressen verwenden.

Zum Schluss löschen Sie NAT-Regeln aus Ihrem Cloud NAT-Gateway und kehren zum Standardverhalten zurück. Sie können den folgenden gcloud-Befehl verwenden. In Cloud Shell:

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

Die Ausgabe sollte folgendermaßen aussehen :

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

Verwenden Sie den Befehl „NAT_gateway-describe“, 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

Die Ausgabe sollte folgendermaßen aussehen :

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

Es gibt keine Regeln: in der YAML-Ausgabedatei. Es wird angegeben, dass keine NAT-Regeln konfiguriert sind.

11. Bereinigungsschritte

Löschen Sie alle mit diesem Codelab verknüpften Ressourcen, um wiederkehrende Gebühren zu vermeiden.

Löschen Sie zuerst alle Instanzen.

In 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. In Cloud Shell:

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

Die Ausgabe sollte folgendermaßen aussehen :

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

Geben Sie alle externen IP-Adressen frei. In 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

Die Ausgabe sollte folgendermaßen aussehen :

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

Löschen Sie VPC-Firewallregeln. In Cloud Shell:

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

Die Ausgabe sollte folgendermaßen aussehen :

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

Löschen Sie Subnetze. In Cloud Shell:

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

Die Ausgabe sollte folgendermaßen aussehen :

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

Zum Schluss löschen wir die VPCs. In Cloud Shell:

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

Die Ausgabe sollte folgendermaßen aussehen :

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 Cloud NAT-Regel-Lab abgeschlossen.

Behandelte Themen

  • Anleitung zum Einrichten eines Cloud NAT-Gateways zur Vorbereitung auf NAT-Regeln.
  • So entwerfen Sie NAT-Regeln mithilfe der Common Expression Language (CEL).
  • So erstellen Sie NAT-Regeln und hängen sie an ein NAT-Gateway an.
  • So testen Sie NAT-Regeln in einer Instanz.
  • So aktualisieren Sie die Regeln eines NAT-Gateways.
  • NAT-Regeln löschen und zum Standardverhalten von Cloud NAT zurückkehren.

Nächste Schritte

  • Experimentieren Sie mit der Erstellung komplexerer NAT-Regeln, wie in diesem Beispiel.
  • Erfahren Sie, wie Sie NAT-IP-Adressen per Drain beenden, und beobachten Sie die Auswirkungen der Verbindung.
  • Sie können mehr über Netzwerke auf der Google Cloud Platform erfahren.

©Google, Inc. or its affiliates. Alle Rechte vorbehalten. Do not distribute.