Cloud NAT-NAT-Regeln verwenden

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.

75eef5f6fd6d7e41.png

Umgebung zum selbstbestimmten 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 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_ID angegeben 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“.
  1. 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:

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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:

815147de3de0bd19.png

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.