Statische ausgehende IP-Adresse

Standardmäßig stellt ein Cloud Run-Dienst über einen dynamischen IP-Adresspool eine Verbindung zu externen Endpunkten im Internet her. Wenn der Cloud Run-Dienst eine Verbindung zu einem externen Endpunkt herstellt, der eine statische IP-Adresse erfordert, z. B. eine Datenbank oder API mit einer IP-Adressen-basierten Firewall, müssen Sie Ihren Cloud Run-Dienst so konfigurieren, dass Anfragen über eine statische IP-Adresse weitergeleitet werden.

Auf dieser Seite wird beschrieben, wie Sie einen Cloud Run-Dienst aktivieren, um Anfragen mithilfe einer statischen IP-Adresse zu senden.

Wir empfehlen, Cloud Run so zu konfigurieren, dass Traffic über ausgehenden Direct VPC-Traffic an ein VPC-Netzwerk gesendet wird. Sie haben jedoch die Möglichkeit, einen Connector zu erstellen.

Aufgabenübersicht

Damit ein Cloud Run-Dienst Anfragen mithilfe einer statischen IP-Adresse weiterleiten kann, müssen Sie den ausgehenden VPC-Traffic des Cloud Run-Dienstes so konfigurieren, dass der gesamte ausgehende Traffic über ein VPC-Netzwerk mit einem konfigurierten Cloud NAT-Gateway mit der statischen IP-Adresse weitergeleitet wird.

In dieser Anleitung konfigurieren Sie Cloud NAT im manuellen Modus und weisen ihr eine einzelne statische IP-Adresse zu. Wenn Ihre Cloud Run-Arbeitslasten auf eine große Anzahl skaliert werden, müssen Sie Cloud NAT möglicherweise mehrere statische IP-Adressen zuweisen. Weitere Informationen

Wenn Sie den Traffic über Cloud NAT weiterleiten, wird kein zusätzlicher Hop im Netzwerk-Stack verursacht, da das Cloud NAT-Gateway und der Cloud Router nur eine Steuerungsebene bieten und die Pakete nicht durch das NAT-Gateway oder den Cloud Router weitergeleitet werden.

Network Address Translation (NAT) konfigurieren

Wenn Sie ausgehenden Direct VPC-Traffic oder einen Connector für serverlosen VPC-Zugriff verwenden, kommen Anfragen Ihres Cloud Run-Dienstes in Ihrem VPC-Netzwerk an. Wenn Sie ausgehende Anfragen an externe Endpunkte mithilfe einer statischen IP-Adresse weiterleiten möchten, konfigurieren Sie ein Cloud NAT-Gateway.

gcloud

  1. Erstellen Sie einen neuen Cloud Router, um ein Cloud NAT-Gateway zu programmieren:

    gcloud compute routers create ROUTER_NAME \
      --network=NETWORK_NAME \
      --region=REGION

    Ersetzen Sie Folgendes:

    • ROUTER_NAME: Ein Name für die Cloud Router-Ressource, die Sie erstellen möchten.
    • NETWORK_NAME: der Name des VPC-Netzwerk, das Sie zuvor ermittelt haben.
    • REGION: die Region, in der Sie ein Cloud NAT-Gateway erstellen möchten.
  2. Reservieren Sie eine statische IP-Adresse. Eine reservierte IP-Adressressource behält die zugrunde liegende IP-Adresse bei, wenn die ihr zugeordnete Ressource gelöscht und neu erstellt wird:

    gcloud compute addresses create ORIGIN_IP_NAME --region=REGION

    Ersetzen Sie Folgendes:

    • ORIGIN_IP_NAME: der Name, den Sie der IP-Adressressource zuweisen möchten.
    • REGION: die Region, in der der Cloud NAT-Router ausgeführt wird. Verwenden Sie dieselbe Region wie der Cloud Run-Dienst, um Latenz und Netzwerkkosten zu minimieren.
  3. Erstellen Sie eine Cloud NAT-Gateway-Konfiguration auf diesem Router, um den Traffic, der vom VPC-Netzwerk stammt, mithilfe der von Ihnen erstellten statischen IP-Adresse weiterzuleiten:

    gcloud compute routers nats create NAT_NAME \
      --router=ROUTER_NAME \
      --region=REGION \
      --nat-custom-subnet-ip-ranges=SUBNET_NAME \
      --nat-external-ip-pool=ORIGIN_IP_NAME

    Ersetzen Sie Folgendes:

    • NAT_NAME: Ein Name für die Cloud NAT-Gateway-Ressource, die Sie erstellen möchten.
    • ROUTER_NAME: Der Name Ihres Cloud Router.
    • REGION: die Region, in der Sie ein Cloud NAT-Gateway erstellen möchten.
    • SUBNET_NAME: Der Name Ihres Subnetzes.
    • ORIGIN_IP_NAME: der Name der reservierten IP‑Adressenressource, die Sie im vorherigen Schritt erstellt haben.

Terraform

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

  1. Erstellen Sie einen neuen Cloud Router, um ein Cloud NAT-Gateway zu programmieren:

    resource "google_compute_router" "default" {
      name    = "cr-static-ip-router"
      network = google_compute_network.default.name
      region  = google_compute_subnetwork.default.region
    }

    Ersetzen Sie cr-static-ip-router durch Ihren Subnetznamen.

  2. Reservieren Sie eine statische IP-Adresse. Eine reservierte IP-Adressressource behält die zugrunde liegende IP-Adresse bei, wenn die ihr zugeordnete Ressource gelöscht und neu erstellt wird:

    resource "google_compute_address" "default" {
      name   = "cr-static-ip-addr"
      region = google_compute_subnetwork.default.region
    }

    Ersetzen Sie cr-static-ip-addr durch Ihren Subnetznamen.

  3. Erstellen Sie eine Cloud NAT-Gateway-Konfiguration auf diesem Router, um den Traffic, der vom VPC-Netzwerk stammt, mithilfe der von Ihnen erstellten statischen IP-Adresse weiterzuleiten:

    resource "google_compute_router_nat" "default" {
      name   = "cr-static-nat"
      router = google_compute_router.default.name
      region = google_compute_subnetwork.default.region
    
      nat_ip_allocate_option = "MANUAL_ONLY"
      nat_ips                = [google_compute_address.default.self_link]
    
      source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
      subnetwork {
        name                    = google_compute_subnetwork.default.id
        source_ip_ranges_to_nat = ["ALL_IP_RANGES"]
      }
    }

    Ersetzen Sie cr-static-nat durch den Namen des Cloud NAT-Gateways.

Cloud Run-Traffic über das VPC-Netzwerk weiterleiten

Nachdem Cloud NAT konfiguriert wurde, stellen Sie Ihren Cloud Run-Dienst mit ausgehendem Direct VPC-Traffic oder dem Connector für serverlosen VPC-Zugriff bereit oder aktualisieren Sie ihn und stellen Sie den ausgehenden VPC-Traffic so ein, dass er den gesamten Traffic durch das VPC-Netzwerk leitet:

gcloud

Ausgehender Direct VPC-Traffic

Führen Sie den folgenden Befehl aus, um Ihren Cloud Run-Dienst so bereitzustellen oder zu aktualisieren, dass er ausgehenden Direct VPC-Traffic verwendet und den gesamten ausgehenden Traffic über diesen weiterleitet:

gcloud run deploy SERVICE_NAME 
--image=IMAGE_URL
--network=NETWORK
--subnet=SUBNET
--region=REGION
--vpc-egress=all-traffic

Ersetzen Sie Folgendes:

  • SERVICE_NAME: der Name des Cloud Run-Dienstes, den Sie bereitstellen möchten.
  • IMAGE_URL: ein Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat das Format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • NETWORK ist der Name des VPC-Netzwerks.
  • SUBNET: Der Name Ihres Subnetzes.
  • REGION: Eine Region für Ihren Dienst.

Connector für serverlosen VPC-Zugriff

Führen Sie den folgenden Befehl aus, um Ihren Cloud Run-Dienst bereitzustellen oder zu aktualisieren, damit er einen Connector für serverlosen VPC-Zugriff verwendet und den gesamten ausgehenden Traffic über ihn weiterleitet:

gcloud run deploy SERVICE_NAME 
--image=IMAGE_URL
--vpc-connector=CONNECTOR_NAME
--region=REGION
--vpc-egress=all-traffic

Ersetzen Sie Folgendes:

  • SERVICE_NAME: der Name des Cloud Run-Dienstes, den Sie bereitstellen möchten.
  • IMAGE_URL: ein Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat das Format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • CONNECTOR_NAME: der Name Ihres Connectors für Serverloser VPC-Zugriff.
  • REGION: Eine Region für Ihren Dienst.

YAML

Ausgehender Direct VPC-Traffic

  1. Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Nehmen Sie die erforderlichen Änderungen vor.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]'
            run.googleapis.com/vpc-access-egress: all-traffic
        spec:
          containers:
          - image: IMAGE_URL

    Ersetzen Sie Folgendes:

    • SERVICE: Der Name des Cloud Run-Dienstes.
    • NETWORK ist der Name des VPC-Netzwerks.
    • SUBNET: Der Name Ihres Subnetzes.
    • IMAGE_URL: die URL Ihres Dienstcontainer-Images.
  3. Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:

    gcloud run services replace service.yaml

Connector für serverlosen VPC-Zugriff

  1. Wenn Sie einen neuen Dienst erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Dienst aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Nehmen Sie die erforderlichen Änderungen vor.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
        spec:
          containers:
          - image: IMAGE_URL

    Ersetzen Sie Folgendes:

    • SERVICE: Der Name des Cloud Run-Dienstes.
    • CONNECTOR_NAME: der Name des Serverless VPC Access-Netzwerks.
    • IMAGE_URL: ein Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/hello:latest Wenn Sie Artifact Registry verwenden, muss das Repository REPO_NAME bereits erstellt sein. Die URL hat das Format LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  3. Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:

    gcloud run services replace service.yaml

Terraform

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

Dieser Cloud Run-Dienst verwendet einen VPC-Connector und leitet den gesamten ausgehenden Traffic über ihn weiter:

resource "google_cloud_run_v2_service" "default" {
  name     = "cr-static-ip-service"
  location = google_compute_subnetwork.default.region

  deletion_protection = false # set to "true" in production

  template {
    containers {
      # Replace with the URL of your container
      #   gcr.io/<YOUR_GCP_PROJECT_ID>/<YOUR_CONTAINER_NAME>
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    scaling {
      max_instance_count = 5
    }
    vpc_access {
      connector = google_vpc_access_connector.default.id
      egress    = "ALL_TRAFFIC"
    }
  }
  ingress = "INGRESS_TRAFFIC_ALL"

}

Ersetzen Sie us-docker.pkg.dev/cloudrun/container/hello durch einen Verweis auf Ihr Container-Image.

Statische externe IP-Adresse prüfen

Nachdem Sie die oben genannten Schritte ausgeführt haben, haben Sie Cloud NAT in Ihrem VPC-Netzwerk mit einer vordefinierten statischen IP-Adresse eingerichtet und den gesamten ausgehenden Traffic Ihres Cloud Run-Dienstes an Ihr VPC-Netzwerk weitergeleitet. Anfragen Ihres Cloud Run-Dienstes werden durch Ihr VPC-Netzwerk geleitet und erreichen externe Endpunkte über die statische IP-Adresse.

Um dieses Verhalten zu bestätigen und die ursprüngliche IP-Adresse zu prüfen, die Ihr Dienst verwendet, können Sie eine Anfrage an eine API oder eine Website wie curlmyip.org senden, die die ursprüngliche IP-Adresse anzeigt.

Statische externe IP-Adresse löschen

Wenn Sie eine statische externe IP-Adresse nicht mehr benötigen, lesen Sie den Artikel Statische externe IP-Adresse freigeben.