Cloud NAT-Gateway erstellen

Übersicht

In diesem Anwendungsfall erstellen wir ein Cloud NAT-Gateway mit mehreren zugewiesenen Egress-IP-Adressen. Diese Gateways leiten ausgehenden Traffic von den Pods und VMs weiter, die den im Gateway konfigurierten übereinstimmenden Labels entsprechen. Das Gateway weist jedem Endpunkt, der Traffic darüber weiterleiten kann, automatisch eine Egress-IP-Adresse zu.

Beispiel für die Gateway-Einrichtung mit mehreren IP-Adressen für ausgehenden Traffic

Vorbereitung

Bevor Sie ein Gateway einrichten, müssen Sie die entsprechenden Berechtigungen für Identity and Access Management (IAM) erhalten, dafür sorgen, dass Ihr Projekt eine geeignete Netzwerkrichtlinie hat, und den Egress aktivieren.

Weitere Informationen finden Sie unter Vorbereitung auf 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 kompatibel mit der Standardkonfiguration für den Projektausgang. 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 konfiguriert eine VMEA-Konfiguration (Virtual Machine External Access) eine VM so, dass Traffic mit der Standardkonfiguration für den Projektausgang weitergeleitet wird. Mit anderen Worten: Das Label egress.networking.gke.io/enabled:"true" wird automatisch der VM hinzugefügt. Wenn die VM auch so konfiguriert ist, dass ausgehender Traffic über ein Cloud NAT-Gateway weitergeleitet wird, führt dies zu einem Konflikt zwischen den NAT-Konfigurationen. So vermeiden Sie diesen Konflikt: Achten Sie bei jeder VMEA, die mit einer VM verknüpft ist, die so konfiguriert ist, dass ausgehender Traffic über ein Cloud NAT-Gateway weitergeleitet wird, darauf, dass die VMEA, die mit dieser VM verknüpft ist, die Annotation egress.networking.gke.io/use-cloud-nat:"true" hat. Die zugehörige VM leitet ausgehenden Traffic dann 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 der einzelnen VMs oder Pods mit den angegebenen Labels zu. Mehreren Pods oder VMs kann dieselbe Egress-IP-Adresse 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 die Konfiguration korrekt ist, sollte im Feld für den Status des Cloud NAT-Gateways die Bedingung vom Typ Ready auf true gesetzt sein und die Subnetze als OK gekennzeichnet sein, wie in der folgenden Beispielausgabe zu sehen.

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. Sie 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 wurden).
  • EgressRoutesReady: Diese Bedingung gibt an, ob die Routen für den ausgehenden Traffic von den Quellendpunkten bereits konfiguriert wurden.

Traffic testen

Wir können den Traffic testen, indem wir einen curl-Befehl von einem der Pods oder einer der VMs, die dem Gateway zugewiesen sind, an einen externen Endpunkt senden. Der empfangende Endpunkt sollte eine der Egress-IP-Adressen sehen, die mit dem Gateway verknüpft sind.