Private Service Connect: utilizzo di Private Service Connect per pubblicare e utilizzare servizi con Cloud Run

Informazioni su questo codelab
schedule61 minuti
subjectUltimo aggiornamento: 28 marzo 2025
account_circleScritto da: Lorin Price

Private Service Connect (PSC) è una funzionalità della rete Google Cloud che consente ai consumer di accedere privatamente ai servizi gestiti dall'interno della loro rete VPC. Analogamente, consente ai producer di servizi gestiti di ospitare questi servizi nelle proprie reti VPC separate e di offrire una connessione privata ai propri consumer.

Cloud Run è una piattaforma di calcolo gestita che ti consente di eseguire container direttamente sull'infrastruttura scalabile di Google.

Cloud Run può essere utilizzato come servizio PSC in due modi diversi.

  1. Tramite PSC per le API Google chiamando Cloud Run tramite l'URL run.app fornito da Cloud Run
  2. Tramite un servizio di produzione PSC personalizzato in cui Cloud Run è esposto tramite un collegamento di servizio tramite un bilanciatore del carico delle applicazioni interno con un NEG serverless.

Questo codelab illustra come configurare Cloud Run con PSC per entrambi gli scenari

Cosa imparerai a fare

  • Deployment di app di base su Cloud Run
  • Controlli di rete in entrata e in uscita di Cloud Run
  • Eseguire il deployment di Cloud Run tramite un bilanciatore del carico delle applicazioni interno con un NEG serverless
  • Configurazione di un servizio producer PSC tramite un collegamento di servizio
  • Eseguire il deployment degli endpoint PSC

Che cosa ti serve

  • Progetto Google Cloud con autorizzazioni di proprietario

2. Topologia del codelab

455a040761a8fab9.png

In questo codelab, eseguirai il deployment di due servizi Cloud Run che saranno accessibili tramite PSC: il primo come servizio pubblicato personalizzato con PSC e il secondo come PSC per le API Google. Dovrai creare due VPC, consumer-vpc e producer-vpc. Per prima cosa, esegui il deployment del servizio Cloud Run Hello World e rendilo accessibile tramite un bilanciatore del carico delle applicazioni interno regionale e un NEG serverless nel VPC del produttore. Prima di configurare il servizio Cloud Run in modo che sia accessibile come servizio di produzione PSC tramite un allegato del servizio, dovrai verificare che il servizio funzioni tramite il bilanciatore del carico tramite il client di produzione.

Passando a consumer-vpc, esegui il deployment di un endpoint PSC che rimandi al collegamento del servizio Cloud Run che abbiamo configurato in producer-vpc. Poi verificherai che il servizio sia accessibile tramite PSC da un client consumer nella VPC consumer. Successivamente, creerai un altro servizio Cloud Run che chiama l'endpoint PSC. Infine, eseguirai il deployment di un endpoint PSC per le API di Google. Dal client consumer, accederai a Cloud Run tramite l'URL fornito da Cloud Run, che utilizzerà l'endpoint PSC per le API Google.

3. Configurazione e requisiti

Configurazione dell'ambiente a tuo ritmo

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Il nome del progetto è il nome visualizzato per i partecipanti al progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
  • L'ID progetto è univoco per tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca; di solito non ti interessa quale sia. Nella maggior parte dei codelab, dovrai fare riferimento al tuo ID progetto (in genere identificato come PROJECT_ID). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare il tuo e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane invariato per tutta la durata del progetto.
  • Per tua informazione, esiste un terzo valore, un Numero progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le API/risorse Cloud. La partecipazione a questo codelab non ha costi, o quasi. Per arrestare le risorse ed evitare di incorrere in fatturazione al termine di questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud sono idonei al programma Prova senza costi di 300$.

Avvia Cloud Shell

Sebbene Google Cloud possa essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Nella console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

55efc1aaa7a4d3ad.png

Dovrebbe richiedere solo pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere qualcosa di simile a questo:

7ffe5cbb04455448.png

Questa macchina virtuale contiene tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione di rete. Tutto il lavoro in questo codelab può essere svolto in un browser. Non devi installare nulla.

4. Prima di iniziare

Abilita API

In Cloud Shell, assicurati che il progetto sia configurato e configura le variabili.

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

Attivare tutti i servizi necessari

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. Crea la rete VPC del producer

Rete VPC

Da Cloud Shell

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

Creare subnet

Da 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

La subnet del PSC verrà associata al collegamento del servizio PSC ai fini della Network Address Translation. Per i casi d'uso di produzione, le dimensioni di questa subnet devono essere adeguate per supportare il numero di endpoint collegati. Per ulteriori informazioni, consulta la documentazione relativa al dimensionamento delle sottoreti NAT PSC.

Creare la policy firewall di rete e le regole firewall del produttore

Da 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

Per consentire a IAP di connettersi alle tue istanze VM, crea una regola firewall che:

  • Si applica a tutte le istanze VM a cui vuoi accedere tramite IAP.
  • Consente il traffico in entrata dall'intervallo IP 35.235.240.0/20. Questo intervallo contiene tutti gli indirizzi IP che utilizzati da IAP per l'inoltro TCP.

Da 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. Creare Hello World Cloud Run

Segui le istruzioni riportate qui per scrivere un'applicazione di esempio in Python. Esegui questi comandi in Cloud Shell. Dopo aver completato il passaggio 3 della sezione "Scrivere l'applicazione di esempio", torna a questo Codelab e segui le istruzioni riportate di seguito per eseguire il deployment in Cloud Run dal codice sorgente.

Prima di eseguire il deployment del servizio Cloud Run, assicurati che l'account di servizio Compute predefinito disponga delle autorizzazioni appropriate eseguendo il seguente comando.

Da Cloud Shell

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

NOTA:questo codelab presuppone che nella tua organizzazione non sia attivato il criterio dell'organizzazione per la condivisione con restrizioni al dominio. Se hai attivato questo criterio, dovrai eseguire ulteriori passaggi per eseguire il deployment di Cloud Run con autenticazione, configurare una schermata di consenso OAuth e configurare l'IAP per il backend del bilanciatore del carico. È consigliabile seguire tutti questi passaggi di configurazione in un ambiente di produzione.

Da Cloud Shell

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

L'utilizzo del flag --no-default-url eseguirà il deployment del servizio Cloud Run senza l'URL run.app fornito. Non utilizzeremo l'URL per questo servizio. Al momento della pubblicazione di questo codelab, questa funzionalità è ancora in anteprima.

Prima di continuare, torna alla directory principale di Cloud Shell.

Da Cloud Shell

cd ..

7. Esponi Cloud Run Hello World tramite un bilanciatore del carico delle applicazioni interno

Prenota un indirizzo IP interno statico per la regola di inoltro del bilanciatore del carico.

In Cloud Shell

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

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

Esempio di output

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

Prendi nota dell'indirizzo IP appena creato.

Crea il bilanciatore del carico delle applicazioni interno regionale

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. Testa Hello World Cloud Run esposto tramite bilanciatore del carico

Crea VM di test

Da 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

Sostituisci <loadbalancer-ip> con l'indirizzo IP che hai creato in precedenza (ad esempio 10.0.0.2).

Eseguire il test di Hello World

In producer-vm

curl <loadbalancer-ip>

Risultato previsto

Hello World!

Esci dalla VM.

In producer-vm

exit

9. Crea collegamento al servizio

Da 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

Successivamente, recupera e prendi nota dell'URI del collegamento a un servizio per configurare l'endpoint PSC nell'ambiente consumer.

In Cloud Shell

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

Esempio di output previsto

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. Crea la rete VPC consumer

Rete VPC

Da Cloud Shell

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

Crea subnet

Da 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

Creare Cloud NAT

Da 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

Creare criteri e regole firewall per la rete di consumatori

Creeremo un'altra policy firewall di rete per consumer-vpc.

Da 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. Creare un endpoint PSC per il servizio Cloud Run Hello World

A questo punto, creeremo un endpoint PSC e lo collegheremo al servizio Cloud Run che hai esposto tramite il collegamento del servizio. Dovrai utilizzare l'URI del collegamento di servizio che hai annotato in precedenza in questa sezione. Assicurati che il formato dell'URI nel comando gcloud corrisponda al tuo URI.

Creare un endpoint PSC

Da 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

Ottieni l'indirizzo IP dell'endpoint PSC appena creato. Utilizzerai l'indirizzo IP nel passaggio successivo per testare l'endpoint.

Da Cloud Shell

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

Esempio di output previsto

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. Crea la VM client per i consumatori e testa la connettività all'endpoint

Crea la VM client per i consumatori

Da 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'

Testa la connettività

Da Cloud Shell

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

Sostituisci <cloudrun-service-ip> con l'indirizzo IP effettivo.

Dalla VM client consumer

curl <cloudrun-service-ip>

Risultato previsto

Hello World!

Dalla VM client consumer

exit

13. Creare un servizio Cloud Run Loop

Successivamente, creeremo un servizio Cloud Run che effettuerà una chiamata privata in consumer-vpc per chiamare il precedente servizio HelloWorld di Cloud Run che abbiamo esposto tramite PSC.

Segui le istruzioni "Scrivere l'applicazione di esempio" qui per scrivere un'applicazione con un ciclo in PHP. Invece di helloworld-php, assegna alla directory il nome cloudrun-loop. Esegui questi comandi in Cloud Shell. Nel secondo passaggio, utilizza il codice PHP riportato di seguito nel file index.php. Torna al codelab quando è tutto pronto per il deployment in Cloud Run. Non seguire le istruzioni riportate nella documentazione per questo passaggio.

Utilizza questo codice per il file index.php. Sostituisci <cloudrun-service-ip> con l'indirizzo IP dell'endpoint PSC che hai testato nel passaggio precedente.

Da 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;
}
?>

Stiamo specificando una rete e una subnet in questo deployment di Cloud Run perché il traffico di Cloud Run deve tornare nel VPC per accedere all'endpoint PSC. Stiamo indicando a Cloud Run di utilizzare la sottorete cloudrun-egress per il traffico in uscita VPC diretto. Stiamo indirizzando tutto il traffico in uscita tramite la subnet VPC diretto per il traffico in uscita di nuovo nel VPC.

Da 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

Al termine del deployment del servizio Cloud Run, verrà fornito un URL del servizio nel formato https://cloudrun-loop-<projectnum>.<region>.run.app. Tieni presente che verrà testato anche questo URL nel passaggio successivo.

14. Testa la connettività a CloudRun-Loop tramite l'URL Cloud Run

Da Cloud Shell

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

Sostituisci <Cloud-Run-ServiceURL> con l'URL del servizio annotato nel passaggio precedente.

Dalla VM client consumer

curl <Cloud-Run-ServiceURL>

Risultato previsto

Hello World!

Questo risultato mostra che il nostro servizio CloudRun-Loop richiama correttamente la VPC del consumatore per chiamare il nostro endpoint PSC collegato al nostro servizio Cloud Run Hello World. Tuttavia, a questo punto, la VM client consumer esce su internet tramite Cloud NAT per effettuare una chiamata al nostro URL pubblico di Cloud Run. Possiamo eseguire una ricerca sull'URL per dimostrare che risolverà in un indirizzo IP pubblico.

Dalla VM client consumer

dig <Cloud-Run-ServiceURL>

Esempio di output

; <<>> 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

Possiamo creare un PSC per l'endpoint delle API di Google per impostare questa risoluzione su privata in modo da impedire il traffico sulla rete internet pubblica.

Dalla VM client consumer

exit

15. Creare un endpoint PSC per le API di Google

Questo endpoint PSC è diverso da quello che abbiamo creato in precedenza. PSC per le API di Google punta a un bundle di API di Google (tutte le API o API compatibili con VPC-SC). L'indirizzo IP non proviene da una subnet regionale, ma viene creato come un singolo indirizzo IP /32 globale che non può sovrapporsi a subnet VPC esistenti, subnet VPC con peering o route ibride.

Da 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

Da Cloud Shell

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

16. Crea una zona privata Cloud DNS per run.app

Quando viene creato un endpoint PSC per le API di Google, viene creata una zona DNS privata di Cloud Run per tutte le API che rientrano nel dominio googleapis.com. Poiché Cloud Run utilizza run.app, dobbiamo creare un'altra zona privata per mappare run.app al nostro endpoint PSC per le API Google.

Da 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. Testare la risoluzione DNS privato

Accedi di nuovo alla VM client consumer ed esegui di nuovo il comando dig. Ora dovresti vedere che l'URL di Cloud Run risolverà nell'endpoint PSC per le API Google.

Da Cloud Shell

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

Per prima cosa, svuoteremo la cache DNS. Sostituisci <Cloud-Run-ServiceURL> con l'URL del servizio annotato in precedenza.

Dalla VM client consumer

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

Il comando curl dovrebbe funzionare come visto in precedenza.

Dalla VM client consumer

curl <CloudRun-Loop-ServiceURL>

Risultato previsto

Hello World!

Dalla VM client consumer

dig <CloudRun-Loop-ServiceURL>

Il comando dig dovrebbe mostrare che il nostro servizio Cloud Run Loop ora risolve il nostro endpoint PSC per le API Google.

Esempio di output

; <<>> 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

OPERAZIONE RIUSCITA.

18. Procedura di pulizia

Uscire dall'istanza VM

exit

Da 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

È possibile che l'esecuzione dei due comandi successivi non vada a buon fine con errori di tipo "risorsa in uso". Le documentazioni di Cloud Run indicano che a volte Cloud Run impiega 1-2 ore per rilasciare le risorse della sottorete dopo l'eliminazione del servizio Cloud Run. Se l'eliminazione non va a buon fine, salta questi due comandi e vai alla sezione successiva, quindi torna a questa sezione per eseguire l'eliminazione dopo un po' di tempo.

Da Cloud Shell

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

gcloud compute networks delete consumer-vpc -q

Da 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. Complimenti!

Complimenti per aver completato il codelab.

Argomenti trattati

  • Deployment di app di base su Cloud Run
  • Controlli di rete in entrata e in uscita di Cloud Run
  • Eseguire il deployment di Cloud Run tramite un bilanciatore del carico delle applicazioni interno con un NEG serverless
  • Configurazione di un servizio producer PSC tramite un collegamento di servizio
  • Eseguire il deployment degli endpoint PSC