Übersicht
In diesem Anwendungsfall erstellen wir ein Cloud NAT-Gateway mit mehreren zugewiesenen Egress-IPs. Über diese Gateways wird der ausgehende Traffic von den Pods und VMs weitergeleitet, die den im Gateway konfigurierten übereinstimmenden Labels entsprechen. Das Gateway weist jedem Endpunkt, über den Traffic ausgehen kann, automatisch eine Egress-IP zu.

Vorbereitung
Bevor Sie ein Gateway einrichten, müssen Sie die entsprechenden IAM-Berechtigungen (Identity and Access Management) abrufen, dafür sorgen, dass Ihr Projekt eine geeignete Netzwerkrichtlinie hat, und den Egress aktivieren.
Weitere Informationen finden Sie unter Vorbereitung für Cloud NAT.
Das Cloud NAT-Gateway verwendet externe leaf-Subnetze als Eingaben. Weitere Informationen zum Konfigurieren externer Subnetze für Cloud NAT finden Sie unter Externe Subnetze für Cloud NAT erstellen.
Kompatible Pod- oder VM-Konfiguration sicherstellen
Wie in der NAT-Übersicht erwähnt, ist Cloud NAT nicht mit der Standardkonfiguration für ausgehenden Traffic von Projekten kompatibel. Achten Sie darauf, dass kein Pod oder keine VM, die Sie mit Cloud NAT verwenden möchten, das Label egress.networking.gke.io/enabled:true hat.
Standardmäßig wird mit einer VMEA-Konfiguration (Virtual Machine External Access) eine VM so konfiguriert, dass ausgehender Traffic über die Standardkonfiguration für ausgehenden Traffic des Projekts erfolgt. Das Label egress.networking.gke.io/enabled:"true" wird der VM also automatisch hinzugefügt. Wenn die VM auch so konfiguriert ist, dass ausgehender Traffic über ein Cloud NAT-Gateway weitergeleitet wird, kommt es zu einem Konflikt zwischen den NAT-Konfigurationen. Um diese Kollision zu vermeiden, müssen Sie für jede VMEA, die einer VM zugeordnet ist, die so konfiguriert ist, dass ausgehender Traffic über ein Cloud NAT-Gateway erfolgt, dafür sorgen, dass die VMEA, die dieser VM zugeordnet ist, die Annotation egress.networking.gke.io/use-cloud-nat:"true" hat.
Die zugehörige VM leitet dann ausgehenden Traffic ausschließlich über das Cloud NAT-Gateway weiter.
Cloud NAT-Gateways erstellen
Im folgenden Beispiel wird ein Cloud NAT-Gateway mit zwei externen Leaf-Subnetzen (subnet-1 und subnet-2) definiert. Das Gateway verwendet alle IP-Adressen in diesen Subnetzen, eine aus subnet-1 und vier aus subnet-2, und weist sie automatisch den Endpunkten jeder VM oder jedes Pods mit den angegebenen Labels zu. Mehreren Pods oder VMs kann dieselbe Egress-IP zugewiesen werden.
apiVersion: networking.gdc.goog/v1
kind: CloudNATGateway
metadata:
namespace: project-1
name: gateway-1
spec:
workloadSelector: # Immutable
labelSelector:
workloads:
matchLabels:
app: aa
subnetRefs: # Mutable
- subnet-1
- subnet-2
Status der Gateways prüfen
Prüfen Sie den Status der Gateways mit dem folgenden kubectl-Befehl.
export MGMT_KUBECONFIG=<path_to_management_kubeconfig>
kubectl get cloudnatgateways gateway-1 -n project-1 --kubeconfig "${MGMT_KUBECONFIG:?}"
Wenn das Cloud NAT-Gateway richtig konfiguriert ist, sollte im Feld „Statusbedingung“ die Bedingung vom Typ Ready mit dem Wert true und die Subnetze mit dem Wert OK angezeigt werden, wie in der folgenden Beispielausgabe zu sehen ist.
apiVersion: networking.gdc.goog/v1
kind: CloudNATGateway
metadata:
namespace: project-1
name: gateway-1
spec:
workloadSelector:
labelSelector:
workloads:
matchLabels:
app: aa
subnetRefs:
- subnet-1
- subnet-2
status:
conditions:
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: Ready
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: SubnetsReady
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: PerimeterConfigurationReady
- lastTransitionTime: "2025-08-20T21:31:36Z"
message: ""
observedGeneration: 1
reason: Ready
status: "True"
type: EgressRoutesReady
subnets:
- name: subnet-1
status: OK
- name: subnet-2
status: OK
Der Status des Cloud NAT-Gateways enthält vier Bedingungen der folgenden Typen:
Ready: Diese Bedingung fasst den Status des Cloud NAT-Gateways zusammen. Diese Bedingung wird auf „true“ gesetzt, wenn das Gateway vollständig eingerichtet ist.SubnetsReady: Diese Bedingung gibt an, ob die dem Gateway zugewiesenen Subnetze gültig sind.PerimeterConfigurationReady: Diese Bedingung gibt an, ob die Perimeterkonfiguration bereits konfiguriert wurde (z.B. externe IP-Adressen, die externen Knoten zugewiesen sind).EgressRoutesReady: Diese Bedingung gibt an, ob die Routen für ausgehenden Traffic von den Quellendpunkten bereits konfiguriert wurden.
Test-Traffic
Wir können den Traffic testen, indem wir einen curl-Befehl von einem der Pods oder VMs, die dem Gateway zugewiesen sind, an einen externen Endpunkt senden. Der empfangende Endpunkt sollte eine der mit dem Gateway verknüpften Egress-IPs sehen.