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.

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.

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.

Alle Cloud Run-Dienste, die mit demselben VPC-Netzwerk verbunden sind, verwenden dieselbe ausgehende IP-Adresse. Wenn verschiedene ausgehende IP-Adressen für separate Cloud Run-Dienste verwendet werden sollen, folgen Sie dieser Seite, um separate Subnetze und optional Connectors für serverlosen VPC-Zugriff zu erstellen.

Subnetz erstellen

Sie müssen ein dediziertes /28-Subnetz erstellen, um einen Connector zu hosten. Wenn Sie ausgehenden Direct VPC-Traffic nutzen, verwenden Sie ein vorhandenes Subnetz oder erstellen Sie ein anderes. Bei Verwendung eines Connectors verhindert das dedizierte Subnetz, dass andere Rechenressourcen in Ihrem VPC-Netzwerk, wie Compute Engine-VMs oder Google Kubernetes Engine-Cluster, versehentlich die statische IP-Adresse verwenden, wenn Sie Serverless VPC Access für den Zugriff auf das Internet konfiguriert haben.

gcloud

  1. Suchen Sie den Namen Ihres VPC-Netzwerks:

    gcloud compute networks list

    Die Ausgabe sollte in etwa so aussehen:

    NAME     SUBNET_MODE  BGP_ROUTING_MODE
    default  AUTO         REGIONAL

    Ermitteln Sie das Netzwerk, das Sie an Ihren Connector für serverlosen VPC-Zugriff anhängen.

  2. Erstellen Sie in der VPC ein Subnetz für den Connector für serverlosen VPC-Zugriff.

    gcloud compute networks subnets create SUBNET_NAME \
    --range=RANGE --network=NETWORK_NAME --region=REGION

    Ersetzen Sie die folgenden Werte in diesem Befehl:

    • SUBNET_NAME durch einen Namen, den Sie dem Subnetz geben möchten
    • RANGE durch den IP-Bereich im CIDR-Format, den Sie diesem Subnetz zuweisen möchten (z. B. 10.124.0.0/28).
    • NETWORK_NAME: durch den Namen des VPC-Netzwerks
    • REGION durch die Region, in der Sie einen Connector für serverlosen VPC-Zugriff erstellen möchten.

Terraform

  1. Erstellen Sie das VPC-Netzwerk, das verwendet werden soll.

    resource "google_compute_network" "default" {
      name = "cr-static-ip-network"
    }

    Ersetzen Sie cr-static-ip-network durch den Subnetznamen.

  2. Erstellen Sie in der VPC ein Subnetz für den Connector für serverlosen VPC-Zugriff.

    resource "google_compute_subnetwork" "default" {
      name          = "cr-static-ip"
      ip_cidr_range = "10.124.0.0/28"
      network       = google_compute_network.default.id
      region        = "us-central1"
    }

    Ersetzen Sie Folgendes:

    • cr-static-ip durch Ihren Subnetznamen.
    • 10.124.0.0/28 durch Ihren CIDR-Bereich.
    • us-central1 durch Ihre Google Cloud-Region.

Erstellen eines Connectors für Serverless VPC Access

Sie müssen keinen Connector erstellen, wenn Sie ausgehenden Direct VPC-Traffic verwenden. Wenn Sie keinen Direct VPC-Traffic verwenden, benötigen Sie einen Connector für serverlosen VPC-Zugriff, um ausgehenden Traffic des Cloud Run-Dienstes an ein VPC-Netzwerk weiterzuleiten.

Erstellen Sie einen Connector für serverlosen VPC-Zugriff.

gcloud

  1. Erstellen Sie einen Connector für serverlosen VPC-Zugriff mit einem vordefinierten Subnetz.

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
      --region=REGION \
      --subnet-project=PROJECT_ID \
      --subnet=SUBNET_NAME

    Ersetzen Sie die folgenden Werte in diesem Befehl:

    • CONNECTOR durch einen Namen, den Sie dieser Ressource zuweisen möchten.
    • PROJECT_ID durch einen Namen, der das Subnetz hostet.
    • SUBNET_NAME durch den Namen des von Ihnen erstellten Subnetzes.
    • REGION durch die Region, in der Sie ein Cloud NAT-Gateway erstellen möchten.

Terraform

  1. Erstellen eines Connectors für Serverless VPC Access

    resource "google_project_service" "vpc" {
      service            = "vpcaccess.googleapis.com"
      disable_on_destroy = false
    }
    
    resource "google_vpc_access_connector" "default" {
      name          = "cr-conn"
      region        = "us-central1"
      min_instances = 2
      max_instances = 3
    
      subnet {
        name = google_compute_subnetwork.default.name
      }
    
      # Wait for VPC API enablement
      # before creating this resource
      depends_on = [
        google_project_service.vpc
      ]
    }

    Ersetzen Sie cr-conn durch den Namen Ihres Connectors für serverlosen VPC-Zugriff.

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 die folgenden Werte in diesem Befehl:

    • ROUTER_NAME durch einen Namen für die Cloud Router-Ressource, die Sie erstellen möchten.
    • NETWORK_NAME durch den Namen des zuvor ermittelten VPC-Netzwerks.
    • REGION durch 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 die folgenden Werte in diesem Befehl:

    • ORIGIN_IP_NAME durch den Namen, den Sie der IP-Adressressource zuweisen möchten.
    • REGION durch 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 die folgenden Werte in diesem Befehl:

    • NAT_NAME durch einen Namen für die Cloud NAT-Gateway-Ressource, die Sie erstellen möchten.
    • ROUTER_NAME durch den Namen Ihres Cloud Routers.
    • REGION durch die Region, in der Sie ein Cloud NAT-Gateway erstellen möchten.
    • SUBNET_NAME durch den Namen Ihres Subnetzes.
    • ORIGIN_IP_NAME durch den Namen der reservierten IP‑Adressenressource, die Sie im vorherigen Schritt erstellt haben.

Terraform

  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 bereitzustellen oder zu aktualisieren, um ausgehenden Direct VPC-Traffic zu verwenden und den gesamten ausgehenden Traffic über diesen weiterzuleiten:

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

    Ersetzen Sie die folgenden Werte in diesem Befehl:

    • SERVICE_NAME durch den Namen des Cloud Run-Dienstes, den Sie bereitstellen möchten.
    • IMAGE_URL durch einen 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 die Form LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • NETWORK durch den Namen Ihres VPC-Netzwerks.
    • SUBNET durch den Namen Ihres Subnetzes.
    • REGION durch eine Region für Ihren Dienst.
  • Connector für serverlosen VPC-Zugriff

    Führen Sie den folgenden Befehl aus, um Ihren Cloud Run-Dienst für die Verwendung eines Connectors für serverlosen VPC-Zugriff bereitzustellen oder zu aktualisieren und den gesamten ausgehenden Traffic über diesen weiterzuleiten:

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

    Ersetzen Sie die folgenden Werte in diesem Befehl:

    • SERVICE_NAME durch den Namen des Cloud Run-Dienstes, den Sie bereitstellen möchten.
    • IMAGE_URL durch einen 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 die Form LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • CONNECTOR_NAME durch den Namen Ihres Connectors für serverlosen VPC-Zugriff.
    • REGION durch eine Region für Ihren Dienst.

Terraform

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.