Statische ausgehende IP-Adresse

Standardmäßig stellen Cloud Run-Arbeitslasten über einen regionalen Pool dynamischer IP-Adressen, der von allen serverlosen Arbeitslasten gemeinsam genutzt wird, eine Verbindung zu externen Endpunkten im Internet her. Da andere Arbeitslasten diesen Pool gemeinsam nutzen, sollten Sie sich nicht darauf verlassen, wenn Sie eine vorhersehbare Ursprungs-IP-Adresse oder eine isolierte IP-Reputation benötigen.

In den folgenden Situationen sollten Sie Ihre Cloud Run-Arbeitslasten so konfigurieren, dass ausgehende Anfragen über eine dedizierte statische IP-Adresse weitergeleitet werden:

  • Sie stellen eine Verbindung zu einer externen Datenbank oder API her, die eine Zulassungsliste für IP-Adressen oder eine Firewall verwendet.
  • Sie stellen eine Verbindung zu reputationssensitiven externen Endpunkten her, z. B. Zahlungs-Gateways, gehosteten Datenbanken oder Partner-APIs, die durch Web Application Firewalls (WAFs) von Drittanbietern geschützt sind. Störender Traffic von einem anderen Mandanten im standardmäßigen freigegebenen IP-Pool kann die IP-Reputation beeinträchtigen und dazu führen, dass externe WAFs Ihre Anfragen blockieren oder drosseln.
  • Sie führen autorisierte Netzwerkscans, Portaufzählungen, Host-Fingerprinting, Sicherheitslückenprüfungen, Web-Scraping oder Lasttests aus.

Wenn Sie ausgehende Anfragen von einer dedizierten statischen IP-Adresse senden möchten, konfigurieren Sie Ihren Cloud Run-Dienst für die Verwendung von Direct VPC Egress. Sie haben auch die Möglichkeit, einen Connector zu erstellen.

Aufgabenübersicht

Wenn Sie Anfragen über eine statische IP-Adresse weiterleiten möchten, konfigurieren Sie den ausgehenden VPC-Traffic des Dienstes so, dass der gesamte ausgehende Traffic (--vpc-egress=all-traffic) über ein VPC-Netzwerk gesendet wird. Hängen Sie ein Cloud NAT-Gateway mit Ihrer reservierten statischen IP-Adresse an dieses Netzwerk an.

In dieser Anleitung konfigurieren Sie Cloud NAT im manuellen Modus und weisen ihm eine einzelne statische IP-Adresse zu. Wenn Ihre Arbeitslasten auf viele Containerinstanzen skaliert werden oder viele gleichzeitige Verbindungen öffnen, z. B. während eines autorisierten Netzwerkscans, weisen Sie Cloud NAT mehrere statische IP-Adressen zu. Sie können auch die Mindestanzahl von Ports pro Containerinstanz erhöhen oder die dynamische Portzuweisung aktivieren, um eine Port-Erschöpfung zu verhindern. Weitere Informationen zur Verwendung von IP-Adressen und Ports durch Cloud NAT-Gateways

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 Serverloser VPC-Zugriff-Zugriffverwenden, 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 zuvor ermittelten VPC-Netzwerk.
    • 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-Adressressource, 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-Trafficoder dem Connector für serverlosen VPC-Zugriffbereit 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, damit er Direct VPC für ausgehenden Traffic verwendet und den gesamten ausgehenden Traffic darüber 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: 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 so bereitzustellen oder zu aktualisieren, dass er einen Connector für Serverloser VPC-Zugriff verwendet und den gesamten ausgehenden Traffic über diesen 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: der Name des VPC-Netzwerks
    • SUBNET: Der Name Ihres Subnetzes.
    • IMAGE_URL: die URL Ihres Dienst-Container-Images.
  3. Erstellen oder aktualisieren Sie den Dienst mit dem folgenden Befehl:

    gcloud run services replace service.yaml

    Der Befehl gcloud run services replace verwendet standardmäßig die Datei service.yaml, falls vorhanden.

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 Ihres Netzwerks für Serverloser VPC-Zugriff.
    • 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

    Der Befehl gcloud run services replace verwendet standardmäßig die Datei service.yaml, falls vorhanden.

Terraform

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

Ausgehender Direct VPC-Traffic

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

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    vpc_access {
      network_interfaces {
        network    = "default"
        subnetwork = "default"
        tags       = ["tag1", "tag2", "tag3"]
      }
    }
  }
}

Connector für serverlosen VPC-Zugriff

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.