Private Service Connect: Dienste mit Cloud Run veröffentlichen und nutzen

1. Einführung

Private Service Connect (PSC) ist eine Funktion des Google Cloud-Netzwerks, mit der Nutzer privat aus ihrem VPC-Netzwerk auf verwaltete Dienste zugreifen können. Ebenso können Ersteller verwalteter Dienste diese Dienste in ihren eigenen separaten VPC-Netzwerken hosten und ihren Nutzern eine private Verbindung bieten.

Cloud Run ist eine verwaltete Computing-Plattform, mit der Sie Container direkt auf der skalierbaren Infrastruktur von Google ausführen können.

Cloud Run kann auf zwei verschiedene Arten als PSC-Dienst genutzt werden.

  1. Über PSC für Google APIs durch Aufrufen von Cloud Run über die von Cloud Run bereitgestellte run.app-URL
  2. Über einen benutzerdefinierten PSC-Erstellerdienst, bei dem Cloud Run über einen Dienstanhang über einen internen Application Load Balancer mit einer serverlosen NEG verfügbar gemacht wird.

In diesem Codelab erfahren Sie, wie Sie Cloud Run mit PSC für beide Szenarien einrichten.

Lerninhalte

  • Einfache Apps in Cloud Run bereitstellen
  • Steuerelemente für ein- und ausgehenden Traffic in Cloud Run
  • Cloud Run über einen internen Application Load Balancer mit einer serverlosen NEG bereitstellen
  • PSC-Diensterstellerdienst über einen Dienstanhang einrichten
  • PSC-Endpunkte bereitstellen

Voraussetzungen

  • Google Cloud-Projekt mit Inhaberberechtigungen

2. Codelab-Topologie

455a040761a8fab9.png

In diesem Codelab stellen Sie zwei Cloud Run-Dienste bereit, auf die über PSC zugegriffen werden kann – zuerst als benutzerdefinierter Dienst mit PSC und dann als PSC für Google-APIs. Sie erstellen zwei VPCs: eine „consumer-vpc“ und eine „producer-vpc“. Zuerst stellen Sie den Hello World Cloud Run-Dienst bereit und machen ihn über einen regionalen internen Application Load Balancer und eine serverlose NEG in der Producer-VPC zugänglich. Sie prüfen, ob der Dienst über den Load Balancer über den Producer-Client funktioniert, bevor Sie den Cloud Run-Dienst so einrichten, dass er über einen Dienstanhang als PSC-Producerdienst zugänglich ist.

In der Nutzer-VPC stellen Sie einen PSC-Endpunkt bereit, der auf den Cloud Run-Dienstanhang verweist, den wir in der Producer-VPC eingerichtet haben. Anschließend prüfen Sie, ob der Dienst über PSC von einem Client im Nutzer-VPC aus erreichbar ist. Als Nächstes erstellen Sie einen weiteren Cloud Run-Dienst, der Ihren PSC-Endpunkt aufruft. Zum Schluss stellen Sie einen PSC-Endpunkt für Google APIs bereit. Über den Consumer-Client greifen Sie über die von Cloud Run bereitgestellte URL auf Cloud Run zu. Dabei wird der PSC-Endpunkt für Google APIs verwendet.

3. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen Namen versuchen und sehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testzeitraum mit einem Guthaben von 300$ teilnehmen.

Cloud Shell starten

Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Klicken Sie in der Google Cloud Console rechts oben in der Symbolleiste auf das Cloud Shell-Symbol:

55efc1aaa7a4d3ad.png

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

7ffe5cbb04455448.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Alle Aufgaben in diesem Codelab können in einem Browser ausgeführt werden. Sie müssen nichts installieren.

4. Hinweis

APIs aktivieren

Prüfen Sie in Cloud Shell, ob Ihr Projekt eingerichtet ist, und konfigurieren Sie Variablen.

gcloud auth login
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
export projectid=[YOUR-PROJECT-ID]
export projectnum=[YOUR-PROJECT-NUM]
export region=us-central1
export zone=us-central1-a
echo $projectid
echo $projectnum
echo $region
echo $zone

Alle erforderlichen Dienste aktivieren

gcloud services enable compute.googleapis.com
gcloud services enable run.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com

5. Ersteller-VPC-Netzwerk erstellen

VPC-Netzwerk

Über Cloud Shell

gcloud compute networks create producer-vpc --subnet-mode custom

Subnetze erstellen

Über Cloud Shell

gcloud compute networks subnets create producer-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

gcloud compute networks subnets create lb-proxy-subnet \
    --network=producer-vpc \
    --range=10.100.100.0/24 \
    --region=$region \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --region=$region \
    --range=10.100.101.0/24 \
    --purpose=PRIVATE_SERVICE_CONNECT

Das PSC-Subnetz wird zum Zweck der Network Address Translation dem PSC-Dienstanhang zugeordnet. Für Produktionsanwendungsfälle muss dieses Subnetzwerk so dimensioniert sein, dass die Anzahl der angehängten Endpunkte unterstützt wird. Weitere Informationen finden Sie in der Dokumentation zur Größenanpassung von PSC-NAT-Subnetzen.

Firewallrichtlinie und Firewallregeln für das Produzentennetzwerk erstellen

Über Cloud Shell

gcloud compute network-firewall-policies create producer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy producer-vpc-policy \
    --network producer-vpc \
    --name network-producer-vpc \
    --global-firewall-policy

Damit IAP eine Verbindung zu Ihren VM-Instanzen herstellen kann, erstellen Sie eine Firewallregel, die:

  • Gilt für alle VM-Instanzen, die über IAP zugänglich sein sollen.
  • Lässt eingehenden Traffic aus dem IP-Bereich 35.235.240.0/20 zu. Dieser Bereich enthält alle IP-Adressen, die IAP für die TCP-Weiterleitung verwendet.

Über Cloud Shell

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

6. „Hello World“-Cloud-Run-Dienst erstellen

Folgen Sie dieser Anleitung, um eine Beispielanwendung in Python zu schreiben. Führen Sie diese Befehle in Cloud Shell aus. Nachdem Sie Schritt 3 unter „Beispielanwendung schreiben“ abgeschlossen haben, kehren Sie zu diesem Codelab zurück und folgen Sie der Anleitung unten, um die Anwendung aus der Quelle in Cloud Run bereitzustellen.

Bevor Sie Ihren Cloud Run-Dienst bereitstellen, müssen Sie dafür sorgen, dass Ihr Compute-Standarddienstkonto die erforderlichen Berechtigungen hat. Führen Sie dazu den folgenden Befehl aus.

Über Cloud Shell

gcloud projects add-iam-policy-binding $projectid --member=serviceAccount:$projectnum-compute@developer.gserviceaccount.com --role=roles/run.builder

HINWEIS:In diesem Codelab wird davon ausgegangen, dass in Ihrer Organisation die Organisationsrichtlinie für die domaineingeschränkte Freigabe nicht aktiviert ist. Wenn diese Richtlinie aktiviert ist, müssen Sie zusätzliche Schritte ausführen, um Cloud Run mit Authentifizierung bereitzustellen. Dazu müssen Sie einen OAuth-Zustimmungsbildschirm konfigurieren und IAP für das Load-Balancer-Backend einrichten. Es wird empfohlen, alle diese Konfigurationsschritte in einer Produktionsumgebung auszuführen.

Über Cloud Shell

gcloud beta run deploy helloworld \
    --source . \
    --platform=managed \
    --ingress=internal \
    --allow-unauthenticated \
    --no-default-url \
    --region=$region

Wenn Sie das Flag --no-default-url verwenden, wird Ihr Cloud Run-Dienst ohne die angegebene run.app-URL bereitgestellt. Wir werden die URL nicht für diesen Dienst verwenden. Zum Zeitpunkt der Veröffentlichung dieses Codelabs befindet sich diese Funktion noch in der Vorabversion.

Wechseln Sie zurück zum Hauptverzeichnis Ihrer Cloud Shell, bevor Sie fortfahren.

Über Cloud Shell

cd ..

7. Hello World Cloud Run über einen internen Application Load Balancer bereitstellen

Statische interne IP-Adresse für die Weiterleitungsregel des Load-Balancers reservieren

In Cloud Shell

gcloud compute addresses create cloudrun-ip \
 --region=$region \
 --subnet=producer-subnet

gcloud compute addresses describe cloudrun-ip --region=$region

Beispielausgabe

address: 10.0.1.31
addressType: INTERNAL
creationTimestamp: '2025-03-17T09:04:06.620-07:00'
description: ''
id: 'xxxx'
kind: compute#address
labelFingerprint: xxxx
name: cloudrun-ip
networkTier: PREMIUM
purpose: GCE_ENDPOINT
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/addresses/cloudrun-ip
status: RESERVED
subnetwork: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/producer-subnet

Notieren Sie sich die IP-Adresse, die Sie gerade erstellt haben.

Regionalen internen Application Load Balancer erstellen

In Cloud Shell

gcloud compute network-endpoint-groups create cloudrun-producer-neg \
    --region=$region \
    --network-endpoint-type=serverless \
    --cloud-run-service=helloworld

gcloud compute backend-services create cloudrun-producer-bes \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTP \
    --region=$region

gcloud compute backend-services add-backend cloudrun-producer-bes \
        --region=$region \
        --network-endpoint-group=cloudrun-producer-neg \
        --network-endpoint-group-region=$region

gcloud compute url-maps create producer-urlmap \
        --default-service=cloudrun-producer-bes \
        --region=$region

gcloud compute target-http-proxies create producer-http-proxy \
        --url-map=producer-urlmap \
        --region=$region

In Cloud Shell

gcloud compute forwarding-rules create cloudrun-fr \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=producer-vpc \
        --subnet=producer-subnet \
        --address=cloudrun-ip \
        --target-http-proxy=producer-http-proxy \
        --target-http-proxy-region=$region \
        --region=$region \
        --ports=80 \
        --allow-global-access

8. „Hello World“-Cloud-Run-Dienst testen, der über einen Load-Balancer bereitgestellt wird

Test-VM erstellen

Über Cloud Shell

gcloud compute instances create producer-client \
    --zone=$zone \
    --subnet=producer-subnet \
    --no-address \
    --scopes=cloud-platform

In Cloud Shell

gcloud compute ssh \
    --zone "$zone" "producer-client" \
    --tunnel-through-iap \
    --project $projectid

Ersetzen Sie <loadbalancer-ip> durch die zuvor erstellte IP-Adresse (z. B. 10.0.0.2).

„Hello World“ testen

In producer-vm

curl <loadbalancer-ip>

Erwartete Ausgabe

Hello World!

Beenden Sie die VM.

In producer-vm

exit

9. Dienstanhang erstellen

Über Cloud Shell

gcloud compute service-attachments create cloudrun-attachment \
    --region=$region \
    --producer-forwarding-rule=cloudrun-fr \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$projectid=5 \
    --nat-subnets=psc-nat-subnet

Rufen Sie als Nächstes den URI des Dienstanhangs ab und notieren Sie ihn, um den PSC-Endpunkt in der Consumer-Umgebung zu konfigurieren.

In Cloud Shell

gcloud compute service-attachments describe cloudrun-attachment --region=$region

Beispiel für erwartete Ausgabe

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-03-10T08:49:08.134-07:00'
description: ''
enableProxyProtocol: false
fingerprint: -F0Kpe3Fi8o=
id: '2679595584727463707'
kind: compute#serviceAttachment
name: cloudrun-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxxxx'
  low: 'xxxx'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/serviceAttachments/cloudrun-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$projectid/forwardingRules/cloudrun-fr

10. Nutzer-VPC-Netzwerk erstellen

VPC-Netzwerk

Über Cloud Shell

gcloud compute networks create consumer-vpc --subnet-mode custom

Subnetz erstellen

Über Cloud Shell

gcloud compute networks subnets create consumer-subnet \
    --network=consumer-vpc \
    --range=10.0.0.0/24 \
    --region=$region \
    --enable-private-ip-google-access

gcloud compute networks subnets create cloudrun-egress \
    --network=consumer-vpc \
    --range=10.0.1.0/24 \
    --region=$region \
    --enable-private-ip-google-access

Cloud NAT erstellen

Über Cloud Shell

gcloud compute routers create central-cr \
    --network=consumer-vpc \
    --region=$region

gcloud compute routers nats create central-nat \
    --router=central-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

Consumer-Netzwerk-Firewallrichtlinie und Firewallregeln erstellen

Wir erstellen eine weitere Netzwerk-Firewallrichtlinie für die Consumer-VPC.

Über Cloud Shell

gcloud compute network-firewall-policies create consumer-vpc-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy consumer-vpc-policy --network consumer-vpc --name network-consumer-vpc --global-firewall-policy

gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy consumer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22  --global-firewall-policy

11. PSC-Endpunkt für den „Hello World“-Cloud-Run-Dienst erstellen

An dieser Stelle erstellen wir einen PSC-Endpunkt und verbinden ihn mit dem Cloud Run-Dienst, den Sie über den Dienstanhang bereitgestellt haben. Sie verwenden den URI des Dienstanhangs, den Sie sich zuvor in diesem Abschnitt notiert haben. Achten Sie darauf, dass das Format des URI im gcloud-Befehl mit Ihrem URI übereinstimmt.

PSC-Endpunkt erstellen

Über Cloud Shell

gcloud compute addresses create cloudrun-service-ip --region=$region --subnet=consumer-subnet --ip-version=IPV4


gcloud compute forwarding-rules create cloudrun-ep --region=$region --network=consumer-vpc --address=cloudrun-service-ip --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/cloudrun-attachment

Rufen Sie die IP-Adresse des PSC-Endpunkts ab, den Sie gerade erstellt haben. Sie verwenden die IP-Adresse im nächsten Schritt, um den Endpunkt zu testen.

Über Cloud Shell

gcloud compute addresses list --filter="name=cloudrun-service-ip"

Beispiel für erwartete Ausgabe

NAME: cloudrun-service-ip
ADDRESS/RANGE: 10.0.0.2
TYPE: INTERNAL
PURPOSE: GCE_ENDPOINT
NETWORK: 
REGION: us-central1
SUBNET: consumer-subnet
STATUS: IN_USE

12. Nutzerclient-VM erstellen und Konnektivität zum Endpunkt testen

VM für Consumer-Client erstellen

Über Cloud Shell

gcloud compute instances create consumer-client \
    --zone=$zone \
    --subnet=consumer-subnet \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install dnsutils -y'

Konnektivität testen

Über Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

Ersetzen Sie <cloudrun-service-ip> durch die tatsächliche IP-Adresse.

Von der Consumer-Client-VM

curl <cloudrun-service-ip>

Erwartete Ausgabe

Hello World!

Von der Consumer-Client-VM

exit

13. Cloud Run Loop-Dienst erstellen

Als Nächstes erstellen wir einen Cloud Run-Dienst, der einen privaten Rückruf in die VPC des Nutzers ausführt, um den vorherigen Cloud Run-HelloWorld-Dienst aufzurufen, den wir über PSC bereitgestellt haben.

Folgen Sie der Anleitung unter Beispielanwendung schreiben, um eine Loop-Anwendung in PHP zu schreiben. Nennen Sie das Verzeichnis cloudrun-loop anstelle von helloworld-php. Führen Sie diese Befehle in Cloud Shell aus. Verwenden Sie in Schritt 2 den folgenden PHP-Code in Ihrer Datei „index.php“. Kehren Sie zum Codelab zurück, wenn Sie bereit sind, die Anwendung in Cloud Run bereitzustellen. Folgen Sie für diesen Schritt nicht der Anleitung in der Dokumentation.

Verwenden Sie diesen Code für Ihre Datei „index.php“. Ersetzen Sie <cloudrun-service-ip> durch die IP-Adresse Ihres PSC-Endpunkts, die Sie im vorherigen Schritt getestet haben.

Über Cloud Shell

<?php 

if(!function_exists('curl_init')) {
    die('cURL not available!');
}

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://<cloudrun-service-ip>/');
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$output = curl_exec($curl);
if ($output === FALSE) {
    echo 'An error has occurred: ' . curl_error($curl) . PHP_EOL;
}
else {
    echo $output;
}
?>

Wir geben in dieser Cloud Run-Bereitstellung ein Netzwerk und ein Subnetz an, da der Cloud Run-Traffic zurück in die VPC geleitet werden muss, um auf den PSC-Endpunkt zuzugreifen. Wir weisen Cloud Run an, das cloudrun-egress-Subnetz für ausgehenden Direct VPC-Traffic zu verwenden. Wir leiten den gesamten Traffic über das Direct VPC Egress-Subnetz zurück in die VPC.

Über Cloud Shell

gcloud run deploy cloudrun-loop \
    --source . \
    --platform=managed \
    --ingress=internal \
    --allow-unauthenticated  \
    --vpc-egress=all-traffic \
    --network=consumer-vpc \
    --subnet=cloudrun-egress \
    --region=$region

Wenn der Cloud Run-Dienst bereitgestellt wurde, wird eine Dienst-URL im Format https://cloudrun-loop-<projectnum>.<region>.run.app bereitgestellt. Notieren Sie sich diese URL, da Sie sie im nächsten Schritt testen werden.

14. Verbindung zu Cloud Run testen – Loop über Cloud Run-URL

Über Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

Ersetzen Sie <Cloud-Run-ServiceURL> durch die Dienst-URL, die Sie im vorherigen Schritt notiert haben.

Von der Consumer-Client-VM

curl <Cloud-Run-ServiceURL>

Erwartete Ausgabe

Hello World!

Dieses Ergebnis zeigt, dass unser CloudRun-Loop-Dienst erfolgreich in die Consumer-VPC zurückruft, um unseren PSC-Endpunkt aufzurufen, der mit unserem Hello World Cloud Run-Dienst verbunden ist. An diesem Punkt verlässt unsere Consumer-Client-VM das Netzwerk über unser Cloud NAT, um unsere öffentliche Cloud Run-URL aufzurufen. Wir können einen „dig“-Befehl für die URL ausführen, um zu zeigen, dass sie in eine öffentliche IP-Adresse aufgelöst wird.

Von der Consumer-Client-VM

dig <Cloud-Run-ServiceURL>

Beispielausgabe

; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1938
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;https://cloudrun-loop-<projectnum>.<region>.run.app.        IN A

;; ANSWER SECTION:
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.38.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.36.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.32.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.34.53

;; Query time: 4 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Tue Mar 11 19:05:36 UTC 2025
;; MSG SIZE  rcvd: 147

Wir können einen PSC-Endpunkt für Google APIs erstellen, um diese Auflösung in „privat“ zu ändern und den Traffic vom öffentlichen Internet fernzuhalten.

Von der Consumer-Client-VM

exit

15. PSC-Endpunkt für Google APIs erstellen

Dieser PSC-Endpunkt unterscheidet sich von dem, den wir zuvor erstellt haben. PSC für Google APIs verweist auf ein Bundle von Google APIs (entweder alle APIs oder VPC-SC-kompatible APIs). Die IP-Adresse stammt nicht aus einem regionalen Subnetz, sondern wird als einzelne globale /32-IP-Adresse erstellt, die sich nicht mit vorhandenen VPC-Subnetzen, verbundenen VPC-Subnetzen oder Hybridrouten überschneiden darf.

Über Cloud Shell

export pscgoogip=100.100.100.100

echo $pscgoogip

gcloud compute addresses create psc-goog-ep-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=$pscgoogip \
    --network=consumer-vpc

Über Cloud Shell

gcloud compute forwarding-rules create psc4googapi \
    --global \
    --network=consumer-vpc \
    --address=psc-goog-ep-ip \
    --target-google-apis-bundle=all-apis

16. Private Cloud DNS-Zone für run.app erstellen

Wenn ein PSC-Endpunkt für Google APIs erstellt wird, wird eine private Cloud Run-DNS-Zone für alle APIs erstellt, die unter die Domain googleapis.com fallen. Da Cloud Run run.app verwendet, müssen wir eine weitere private Zone erstellen, um run.app unserem PSC-Endpunkt für Google APIs zuzuordnen.

Über Cloud Shell

gcloud dns managed-zones create "cloudrun" \
    --dns-name=run.app \
    --description="run.app psc resolution" \
    --visibility=private \
    --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="cloudrun"

gcloud dns record-sets transaction add $pscgoogip \
   --name=*.run.app \
   --ttl=300 \
   --type=A \
   --zone="cloudrun"

gcloud dns record-sets transaction execute \
   --zone="cloudrun"

17. Private DNS-Auflösung testen

Wir melden uns wieder in unserer Consumer-Client-VM an und führen den Dig-Befehl noch einmal aus. Jetzt sollte unsere Cloud Run-URL in unserem PSC-Endpunkt für Google APIs aufgelöst werden.

Über Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

Zuerst leeren wir den DNS-Cache. Ersetzen Sie <Cloud-Run-ServiceURL> durch die zuvor notierte Dienst-URL.

Von der Consumer-Client-VM

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

Der curl-Befehl sollte weiterhin wie zuvor funktionieren.

Von der Consumer-Client-VM

curl <CloudRun-Loop-ServiceURL>

Erwartete Ausgabe

Hello World!

Von der Consumer-Client-VM

dig <CloudRun-Loop-ServiceURL>

Der Dig-Befehl sollte zeigen, dass unser Cloud Run Loop-Dienst jetzt in unserem PSC für Google APIs-Endpunkt aufgelöst wird.

Beispielausgabe

; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30179
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;https://cloudrun-loop-<projectnum>.<region>.run.app.        IN A

;; ANSWER SECTION:
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 100.100.100.100

;; Query time: 8 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Tue Mar 11 20:04:05 UTC 2025
;; MSG SIZE  rcvd: 99

Erfolgreich!

18. Bereinigungsschritte

VM-Instanz verlassen

exit

Über Cloud Shell

gcloud dns record-sets delete *.run.app --zone="cloudrun" --type=A -q

gcloud dns managed-zones delete "cloudrun" -q

gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q

gcloud compute forwarding-rules delete psc4googapi --global -q

gcloud compute addresses delete psc-goog-ep-ip --global -q

gcloud run services delete cloudrun-loop --region=$region -q 

gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/cloudrun-loop -q

gcloud compute forwarding-rules delete cloudrun-ep --region=$region -q

gcloud compute addresses delete cloudrun-service-ip --region=$region -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy consumer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy  --name=network-consumer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q

gcloud compute routers nats delete central-nat --router=central-cr --region=$region -q

gcloud compute routers delete central-cr --region=$region -q

gcloud compute networks subnets delete consumer-subnet --region $region -q

Es ist möglich, dass beim Ausführen der nächsten beiden Befehle Fehler vom Typ „resource in use“ auftreten. In der Cloud Run-Dokumentation wird beschrieben, dass es manchmal ein bis zwei Stunden dauert, bis Cloud Run Subnetzressourcen freigibt, nachdem der Cloud Run-Dienst gelöscht wurde. Wenn das Löschen fehlschlägt, überspringen Sie diese beiden Befehle und fahren Sie mit dem nächsten Abschnitt fort. Kehren Sie dann nach einiger Zeit zu diesem Abschnitt zurück, um die Dateien zu löschen.

Über Cloud Shell

gcloud compute networks subnets delete cloudrun-egress --region $region -q

gcloud compute networks delete consumer-vpc -q

Über Cloud Shell

gcloud compute service-attachments delete cloudrun-attachment --region=$region -q

gcloud compute instances delete producer-client --zone=$zone --project=$projectid -q

gcloud compute forwarding-rules delete cloudrun-fr --region=$region -q

gcloud compute target-http-proxies delete producer-http-proxy --region=$region -q

gcloud compute url-maps delete producer-urlmap --region=$region -q

gcloud compute backend-services delete cloudrun-producer-bes --region=$region -q

gcloud compute network-endpoint-groups delete cloudrun-producer-neg --region=$region -q

gcloud compute addresses delete cloudrun-ip --region=$region -q

gcloud run services delete helloworld --region=$region -q 

gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/helloworld -q

gcloud artifacts repositories delete cloud-run-source-deploy --location=$region -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy  --name=network-producer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete producer-vpc-policy --global -q

gcloud compute networks subnets delete lb-proxy-subnet --region $region -q

gcloud compute networks subnets delete psc-nat-subnet --region $region -q

gcloud compute networks subnets delete producer-subnet --region $region -q

gcloud compute networks delete producer-vpc -q

19. Glückwunsch!

Herzlichen Glückwunsch zum Abschluss des Codelabs.

Behandelte Themen

  • Einfache Apps in Cloud Run bereitstellen
  • Steuerelemente für ein- und ausgehenden Traffic in Cloud Run
  • Cloud Run über einen internen Application Load Balancer mit einer serverlosen NEG bereitstellen
  • PSC-Diensterstellerdienst über einen Dienstanhang einrichten
  • PSC-Endpunkte bereitstellen