Standardmäßig stellt ein Cloud Run-Dienst über einen dynamischen IP-Adresspool eine Verbindung zu externen Endpunkten im Internet her. Diese Standardeinstellung eignet sich nicht, wenn der Cloud Run-Dienst eine Verbindung zu einem externen Endpunkt herstellt, der Verbindungen von einer statischen IP-Adresse erfordert, z. B. eine Datenbank oder API mithilfe einer IP-Adressen-basierten Firewall. Für diese Verbindungen müssen Sie Ihren Cloud Run-Dienst so konfigurieren, dass Anfragen über eine statische IP-Adresse weitergeleitet werden.
In dieser Anleitung wird beschrieben, wie Sie einen Cloud Run-Dienst aktivieren, um Anfragen über eine statische IP-Adresse zu senden.
Aufgabenübersicht
Damit ein Cloud Run-Dienst Anfragen über eine statische 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 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.
Beachten Sie, dass alle Cloud Run-Dienste, die mit demselben VPC-Netzwerk verbunden sind, dieselbe IP-Adresse für ausgehenden Traffic verwenden. Um verschiedene ausgehende IP-Adressen für separate Cloud Run-Dienste zu verwenden, erstellen Sie separate Subnetze und optional Connectors für serverlosen VPC-Zugriff.
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.
Wenn Sie einen Connector verwenden, verhindert das dedizierte Subnetz, dass andere Rechenressourcen in Ihrer VPC, wie Compute Engine-VMs oder Google Kubernetes Engine-Cluster, versehentlich die statische IP verwenden, wenn Sie Serverless VPC Access für den Zugriff auf das Internet konfiguriert haben.
gcloud
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.
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öchtenRANGE
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-NetzwerksREGION
durch die Region, in der Sie einen Connector für serverlosen VPC-Zugriff erstellen möchten.
Terraform
Erstellen Sie das VPC-Netzwerk, das verwendet werden soll.
Ersetzen Sie
cr-static-ip-network
durch den Subnetznamen.Erstellen Sie in der VPC ein Subnetz für den Connector für serverlosen VPC-Zugriff.
Ersetzen
cr-static-ip
durch Ihren Subnetznamen10.124.0.0/28
durch Ihren CIDR-Bereichus-central1
durch Ihre Google Cloud-Region
Erstellen eines Connectors für Serverless VPC Access
Sie müssen keinen Connector erstellen, wenn Sie die Integration von ausgehendem 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
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
: der Name des von Ihnen erstellten Subnetzes.REGION
durch die Region, in der Sie ein NAT-Gateway erstellen möchten.
Terraform
Erstellen eines Connectors für Serverless VPC Access
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 über eine statische IP-Adresse weiterleiten möchten, konfigurieren Sie ein Cloud NAT-Gateway.
gcloud
Erstellen Sie einen neuen Cloud Router, um ein 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 NAT-Gateway erstellen möchten.
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. Idealerweise sollten Sie dieselbe Region wie der Cloud Run-Dienst verwenden, um Latenz und Netzwerkkosten zu minimieren.
Erstellen Sie eine Cloud NAT-Gateway-Konfiguration auf diesem Router, um den Traffic, der vom VPC-Netzwerk stammt, mit 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 NAT-Gateway erstellen möchten.ORIGIN_IP_NAME
durch den Namen der reservierten IP-Adressressource, die Sie im vorherigen Schritt erstellt haben.
Terraform
Erstellen Sie einen neuen Cloud Router, um ein NAT-Gateway zu programmieren:
Ersetzen Sie
cr-static-ip-router
durch Ihren Subnetznamen.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:
Ersetzen Sie
cr-static-ip-addr
durch Ihren Subnetznamen.Erstellen Sie eine Cloud NAT-Gateway-Konfiguration auf diesem Router, um den Traffic, der vom VPC-Netzwerk stammt, mit der von Ihnen erstellten statischen IP-Adresse weiterzuleiten:
Ersetzen Sie
cr-static-nat
durch den Namen des Cloud NAT-Gateways.
Cloud Run-Traffic über das VPC-Netzwerk weiterleiten
Nachdem NAT konfiguriert wurde, stellen Sie Ihren Cloud Run-Dienst mit direktem VPC-Ausgang oder dem Connector für serverlosen VPC-Zugriff bereit oder aktualisieren Sie ihn und stellen den VPC Egress 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 FormLOCATION-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 FormLOCATION-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:
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.