Public NAT mit GKE verwenden
Auf dieser Seite erfahren Sie, wie Sie eine öffentliche NAT-Beispielkonfiguration mit Google Kubernetes Engine (GKE) konfigurieren. Lesen Sie vor der Einrichtung von Public NAT die Public NAT-Übersicht.
Vorbereitung
Führen Sie die folgenden Schritte aus, bevor Sie Public NAT einrichten.
IAM-Berechtigungen abrufen
Die Rolle roles/compute.networkAdmin berechtigt Sie, ein NAT-Gateway in Cloud Router zu erstellen, NAT-IP-Adressen zu reservieren und zuzuweisen sowie Subnetzwerke (Subnetze) anzugeben, deren Traffic eine Netzwerkadressübersetzung vom NAT-Gateway verwenden sollte.
Google Cloud einrichten
Zuvor sollten Sie jedoch die folgenden Elemente in Google Cloud einrichten.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
GKE-Beispiel einrichten
Verwenden Sie dieses Beispiel, wenn Sie eine einfache Public NAT-Konfiguration sehen möchten, die mit GKE funktioniert.
Schritt 1: VPC-Netzwerk und Subnetz erstellen
Wenn Sie bereits ein Netzwerk und ein Subnetz haben, können Sie diesen Schritt überspringen.
Console
Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.
Klicken Sie auf VPC-Netzwerk erstellen.
Geben Sie als Namen
custom-network1
ein.Wählen Sie unter Subnetze als Modus für die Subnetzerstellung Benutzerdefiniert.
Geben Sie unter Neues Subnetz für Name den Wert
subnet-us-east-192
ein.Wählen Sie unter Region die Option us-east4 aus.
Geben Sie einen IP-Adressbereich von
192.168.1.0/24
ein.Klicken Sie auf Fertig und dann auf Erstellen.
gcloud
Erstellen Sie in Ihrem Projekt ein neues VPC-Netzwerk (Virtual Private Cloud) im benutzerdefinierten Modus:
gcloud compute networks create custom-network1 \ --subnet-mode custom
Ausgabe:
NAME MODE IPV4_RANGE GATEWAY_IPV4 custom-network1 custom
Geben Sie das Subnetzpräfix für die erste Region an. In diesem Beispiel ordnen Sie
192.168.1.0/24
der Regionus-east4
zu.gcloud compute networks subnets create subnet-us-east-192 \ --network custom-network1 \ --region us-east4 \ --range 192.168.1.0/24
Ausgabe:
NAME REGION NETWORK RANGE subnet-us-east-192 us-east4 custom-network1 192.168.1.0/24
Terraform
Sie können ein Terraform-Modul verwenden, um ein benutzerdefiniertes Virtual Private Cloud-Netzwerk und ein Subnetz zu erstellen.
Schritt : Privaten Cluster erstellen
Console
Rufen Sie in der Google Cloud Console die Seite mit den Kubernetes-Clustern auf.
Klicken Sie auf Cluster erstellen.
Geben Sie für Name
nat-test-cluster
ein.Legen Sie für Standorttyp Zonal fest.
Legen Sie für Zone den Wert us-east4-c fest.
Klicken Sie im Navigationsbereich auf Netzwerk.
Wählen Sie Privater Cluster aus.
Entfernen Sie das Häkchen aus dem Kästchen Zugriffssteuerungsebene über die externe IP-Adresse.
Geben Sie einen IP-Bereich der Steuerungsebene von
172.16.0.0/28
ein.Legen Sie für Netzwerk den Wert
custom-network1
fest.Klicken Sie zum Erstellen und Starten der VM auf Erstellen.
gcloud
gcloud container clusters create "nat-test-cluster" \ --zone "us-east4-c" \ --username "admin" \ --cluster-version "latest" \ --machine-type "e2-medium" \ --disk-type "pd-standard" \ --disk-size "100" \ --scopes "https://www.googleapis.com/auth/compute","https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" \ --num-nodes "3" \ --enable-private-nodes \ --enable-private-endpoint \ --master-ipv4-cidr "172.16.0.0/28" \ --enable-ip-alias \ --network "projects/PROJECT_ID/global/networks/custom-network1" \ --subnetwork "projects/PROJECT_ID/regions/us-east4/subnetworks/subnet-us-east-192" \ --max-nodes-per-pool "110" \ --enable-master-authorized-networks \ --addons HorizontalPodAutoscaling,HttpLoadBalancing \ --enable-autoupgrade \ --enable-autorepair
Terraform
Sie können eine Terraform-Ressource verwenden, um einen privaten Cluster zu erstellen.
Schritt 3: Firewallregel erstellen, die SSH-Verbindungen zulässt
Console
Rufen Sie in der Google Cloud Console die Seite der Firewall-Richtlinien auf.
Klicken Sie auf Firewallregel erstellen.
Geben Sie als Namen
allow-ssh
ein.Geben Sie als Netzwerk den Wert
custom-network1
ein.Legen Sie für Traffic-Richtung den Wert Ingress fest.
Legen Sie für Aktion bei Übereinstimmung den Wert Zulassen fest.
Legen Sie für Ziele den Wert Alle Instanzen im Netzwerk fest.
Legen Sie unter Quellfilter die Option IPv4-Bereiche fest.
Legen Sie für Quell-IP-Bereiche den Wert
35.235.240.0/20
fest.Legen Sie für Protokolle und Ports den Wert Angegebene Protokolle und Ports fest.
Klicken Sie das Kästchen tcp an und geben Sie Port
22
ein.Klicken Sie auf Erstellen.
gcloud
gcloud compute firewall-rules create allow-ssh \ --network custom-network1 \ --source-ranges 35.235.240.0/20 \ --allow tcp:22
Terraform
Sie können eine Terraform-Ressource verwenden, um eine Firewallregel zu erstellen.
Schritt 4: IAP-SSH-Berechtigungen für einen Ihrer Knoten erstellen
Verwenden Sie zum Herstellen einer Verbindung zu Ihrem Knoten in einem späteren Schritt IAP.
Console
Rufen Sie in der Google Cloud Console die Seite Identity-Aware Proxy auf.
Klicken Sie auf den Tab SSH- und TCP-Ressourcen.
Aktivieren Sie das Kästchen neben dem ersten Knoten in der Liste unter Alle Tunnelressourcen > us-east4-c. Der Name ähnelt
gke-nat-test-cluster-default-pool-b50db58d-075t
.Notieren Sie sich den Namen des Knotens. Sie verwenden ihn später zum Testen der Konnektivität.
Klicken Sie im rechten Bereich auf Hauptkonto hinzufügen.
Um Nutzern, Gruppen oder Dienstkonten Zugriff auf die Ressourcen zu gewähren, geben Sie im Feld Neue Hauptkonten ihre E-Mail-Adressen ein.
Wenn Sie diese Funktion lediglich testen, können Sie Ihre eigene E-Mail-Adresse eingeben.
Wählen Sie in der Drop-down-Liste Rolle die Option Cloud IAP > Nutzer IAP-gesicherter Tunnel aus, um Hauptkonten über die TCP-Weiterleitungsfunktion von Cloud IAP Zugriff auf die Ressourcen zu gewähren.
Klicken Sie auf Speichern.
gcloud
Verwenden Sie für diesen Schritt die Anleitungen der Console.
Schritt 5: Auf dem Knoten anmelden und prüfen, ob keine Internetverbindung hergestellt werden kann
Console
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Suchen Sie den Knoten, für den Sie IAP-SSH-Berechtigungen erstellt haben. Klicken Sie für in der Spalte Verbinden auf den Drop-down-Pfeil SSH und wählen Sie dann Im Browserfenster öffnen aus.
Wenn Sie zum ersten Mal eine Verbindung zur Instanz herstellen, generiert Google Cloud die SSH-Schlüssel für Sie.
Suchen Sie in der Eingabeaufforderung des Knotens nach der Prozess-ID des Containers
kube-dns
:pgrep '^kube-dns$'
Greifen Sie auf den Container zu:
sudo nsenter --target PROCESS_ID --net /bin/bash
Versuchen Sie von
kube-dns
aus, eine Internetverbindung herzustellen:curl example.com
Sie sollten kein Ergebnis erhalten. Andernfalls haben Sie den Cluster möglicherweise nicht als privaten Cluster erstellt oder es liegt ein anderes Problem vor. Informationen zur Fehlerbehebung finden Sie unter VMs können unerwartet ohne Public NAT auf das Internet zugreifen.
Zum Beenden des Befehls müssen Sie möglicherweise
Ctrl+C
eingeben.
gcloud
Suchen Sie den Namen eines Ihrer Clusterknoten:
gcloud compute instances list
Ein Knotenname sieht in etwa so aus:
gke-nat-test-cluster-default-pool-1a4cbd06-3m8v
. Notieren Sie sich den Knotennamen und verwenden Sie diesen Namen überall dort, woNODE_NAME
in den folgenden Befehlen angezeigt wird.Stellen Sie eine Verbindung zum Knoten her:
gcloud compute ssh NODE_NAME \ --zone us-east4-c \ --tunnel-through-iap
Suchen Sie in der Eingabeaufforderung des Knotens nach der Prozess-ID des Containers
kube-dns
:pgrep '^kube-dns$'
Greifen Sie auf den Container zu:
sudo nsenter --target PROCESS_ID --net /bin/bash
Versuchen Sie von
kube-dns
aus, eine Internetverbindung herzustellen:curl example.com
Sie sollten kein Ergebnis erhalten. Um den Befehl zu beenden, müssen Sie möglicherweise
Ctrl+C
eingeben.
Schritt 6: NAT-Konfiguration mit Cloud Router erstellen
Sie müssen den Cloud Router in derselben Region wie die Instanzen erstellen, die Public NAT verwenden. Public NAT wird nur zum Platzieren von NAT-Informationen auf den VMs verwendet. Es wird nicht in das eigentliche NAT-Gateway eingebunden.
Diese Konfiguration ermöglicht allen Instanzen in der Region, Public NAT für alle primären und Alias-IP-Bereiche zu verwenden. Außerdem werden die externen IP-Adressen für das NAT-Gateway automatisch zugeordnet. Weitere Informationen finden Sie in der Dokumentation zum Google Cloud CLI.
Console
Wechseln Sie in der Google Cloud Console zur Seite Cloud NAT.
Klicken Sie auf Erste Schritte oder NAT-Gateway erstellen.
Geben Sie als Name des Gateways
nat-config
ein.Legen Sie für VPC-Netzwerk den Wert
custom-network1
fest.Legen Sie für Region den Wert us-east4 fest.
Wählen Sie für Cloud Router die Option Neuen Router erstellen aus.
- Geben Sie als Namen
nat-router
ein. - Klicken Sie auf Erstellen.
- Geben Sie als Namen
Klicken Sie auf Erstellen.
gcloud
Erstellen Sie einen Cloud Router:
gcloud compute routers create nat-router \ --network custom-network1 \ --region us-east4
Fügen Sie eine Konfiguration zum Router hinzu:
gcloud compute routers nats create nat-config \ --router-region us-east4 \ --router nat-router \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
Terraform
Sie können eine Terraform-Ressource verwenden, um einen Cloud Router zu erstellen.
Sie können ein Terraform-Modul verwenden, um eine NAT-Konfiguration zu erstellen.
Schritt 7: Noch einmal versuchen, eine Verbindung zum Internet herzustellen
Es kann bis zu drei Minuten dauern, bis die NAT-Konfiguration wirksam wird. Warten Sie daher mindestens eine Minute, bevor Sie noch einmal versuchen, auf das Internet zuzugreifen.
Wenn Sie noch nicht bei kube-dns
angemeldet sind, stellen Sie die Verbindung wieder her, indem Sie die unter Schritt 5 beschriebenen Schritte ausführen. Führen Sie nach der Anmeldung den Befehl curl
noch einmal aus:
curl example.com
Die Ausgabe sollte folgenden Inhalt enthalten:
<html> <head> <title>Example Domain</title> ... ... ... </head> <body> <div> <h1>Example Domain</h1> <p>This domain is established to be used for illustrative examples in documents. You can use this domain in examples without prior coordination or asking for permission.</p> <p><a href="http://www.iana.org/domains/example">More information...</a></p> </div> </body> </html>
Nächste Schritte
- Richten Sie ein öffentliches NAT-Gateway ein.
- Eigene Beispielkonfiguration für Compute Engine erstellen