1. Introduzione
Private Service Connect consente ai producer di servizi di esporre i servizi privatamente da una rete VPC a un'altra. I consumer possono accedere ai servizi del producer tramite endpoint PSC o backend PSC.
Questo codelab è incentrato sui backend PSC. I backend PSC vengono utilizzati insieme ai bilanciatori del carico proxy di Google Cloud (bilanciatore del carico delle applicazioni o di rete). L'utilizzo dei backend PSC offre controlli più granulari lato consumer, ad esempio:
- Osservabilità e logging più approfonditi
- Integrazione di Cloud Armor
- URL personalizzati
- Gestione avanzata del traffico
- Certificati TLS personalizzati
In questo codelab imparerai a creare un backend Private Service Connect con il bilanciatore del carico delle applicazioni esterno globale per accedere privatamente a un servizio di produzione in un'altra rete.
Obiettivi didattici
- Crea e configura un backend PSC associato al bilanciatore del carico delle applicazioni esterno globale
- Configura un servizio web gestito Apache ed esponilo come servizio PSC tramite un collegamento al servizio
- Crea certificati SSL per terminare SSL sui bilanciatori del carico delle applicazioni interni ed esterni
- Configura una zona pubblica Cloud DNS per accedere al servizio PSC
Che cosa ti serve
- Un progetto Google Cloud con autorizzazioni di proprietario
2. Ambiente di test
L'ambiente che creerai sarà composto da un VPC consumer e un VPC producer. Nella VPC del produttore, eseguirai il deployment di un gruppo di istanze gestite da un modello di istanza che crea un servizio web Apache open source. Verrà anche eseguito il deployment di una VM di test per garantire la corretta funzionalità locale del servizio. Esporrai il servizio Apache come servizio producer PSC tramite un collegamento al servizio.
Nel VPC consumer, devi eseguire il deployment di un bilanciatore del carico delle applicazioni esterno globale con un servizio di backend PSC che punta al servizio Apache. Quindi, configurerai una zona DNS pubblica per accedere al servizio PSC su internet pubblico.

3. Configurazione e requisiti
Configurazione dell'ambiente autonomo
- 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.



- Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come
PROJECT_ID). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. Completare questo codelab non costa molto, se non nulla. Per arrestare le risorse ed evitare addebiti oltre a quelli previsti in questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Avvia Cloud Shell
Sebbene Google Cloud possa essere gestito 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:

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere un risultato simile a questo:

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori 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 della rete. Tutto il lavoro in questo codelab può essere svolto all'interno di un browser. Non devi installare nulla.
4. Prima di iniziare
Abilita API
In Cloud Shell, assicurati che l'ID progetto sia configurato.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export project=YOUR-PROJECT-NAME export region=us-central1 echo $project echo $region
Attiva tutti i servizi necessari
gcloud services enable compute.googleapis.com gcloud services enable servicedirectory.googleapis.com gcloud services enable dns.googleapis.com
5. Configurazione del VPC producer
Crea rete VPC
Da Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
Crea subnet
Verranno implementate due subnet per uso generico in producer-vpc. La subnet del servizio verrà utilizzata per il deployment delle VM del servizio web Apache e della regola di forwarding del bilanciatore del carico. La subnet test-client-subnet si troverà in una regione diversa e verrà utilizzata per il deployment di una VM per testare il servizio Apache con l'accesso globale abilitato.
Da Cloud Shell
gcloud compute networks subnets create service-subnet \
--network=producer-vpc \
--range=10.0.0.0/28 \
--region=$region
Da Cloud Shell
gcloud compute networks subnets create test-client-subnet \
--network=producer-vpc \
--range=10.0.1.0/28 \
--region=us-east4
Dobbiamo anche eseguire il deployment di una subnet solo proxy da utilizzare con il bilanciatore del carico delle applicazioni interno regionale.
Da Cloud Shell
gcloud compute networks subnets create central-proxy-subnet \
--network=producer-vpc \
--range=10.100.101.0/24 \
--region=$region \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE
Quando viene implementato un servizio PSC, ogni servizio univoco deve avere una subnet NAT PSC corrispondente associata al collegamento del servizio. Le dimensioni di questa subnet devono essere adeguate in base al numero di endpoint connessi previsti.
Da Cloud Shell
gcloud compute networks subnets create psc-nat-subnet \
--network=producer-vpc \
--region=$region \
--range=10.100.100.0/24 \
--purpose=PRIVATE_SERVICE_CONNECT
Crea Cloud NAT
È necessario un Cloud NAT per installare i pacchetti appropriati per i nostri servizi di produzione.
Da Cloud Shell
gcloud compute routers create central-cr \
--network=producer-vpc \
--region=$region
Da Cloud Shell
gcloud compute routers nats create central-nat \
--router=central-cr \
--region=$region \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips
Crea policy e regole del firewall di rete
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 applichi 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
Saranno necessarie due regole firewall aggiuntive per consentire il traffico in entrata ai backend del bilanciatore del carico provenienti dalla subnet solo proxy del bilanciatore del carico (2000), nonché una regola per consentire i controlli di integrità del bilanciatore del carico sulle istanze di backend (2001).
Da Cloud Shell
gcloud compute network-firewall-policies rules create 2000 \
--action ALLOW \
--firewall-policy producer-vpc-policy \
--description "allow traffic from load balancer proxy subnet" \
--direction INGRESS \
--src-ip-ranges 10.100.101.0/24 \
--layer4-configs tcp:443 \
--global-firewall-policy
gcloud compute network-firewall-policies rules create 2001 \
--action ALLOW \
--firewall-policy producer-vpc-policy \
--description "allow load balancer health checks" \
--direction INGRESS \
--src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
--layer4-configs tcp:443 \
--global-firewall-policy
6. Crea il servizio web Apache
Creeremo un semplice servizio web Apache che visualizza "PSC Service".
Crea modello di istanza
Da Cloud Shell
gcloud compute instance-templates create apache-service-template \
--network producer-vpc \
--subnet service-subnet \
--region $region \
--no-address \
--metadata startup-script='#! /bin/bash
sudo apt-get update
apt-get install apache2 -y
a2enmod ssl
sudo a2ensite default-ssl
echo "PSC Service" | \
tee /var/www/html/index.html
systemctl restart apache2'
Crea un controllo di integrità per il MIG
Da Cloud Shell
gcloud compute health-checks create https service-mig-healthcheck \
--port=443 \
--global
Crea gruppo di istanze gestite
Da Cloud Shell
gcloud compute instance-groups managed create psc-service-mig \
--region $region \
--size=2 \
--template=apache-service-template \
--health-check=service-mig-healthcheck
gcloud compute instance-groups managed set-named-ports psc-service-mig \
--named-ports=https:443 \
--region=$region
7. Crea un certificato autofirmato
Completa il passaggio 1 delle istruzioni qui per creare un certificato autofirmato. Puoi eseguire tutti i comandi in Cloud Shell. Torna qui una volta completato il passaggio 1. IL NOME COMUNE DEVE ESSERE CONFIGURATO CON EXAMPLE.COM.
Crea una risorsa certificato da associare al bilanciatore del carico. Sostituisci i parametri del certificato e della chiave privata con i nomi dei file specifici.
Da Cloud Shell
gcloud compute ssl-certificates create producer-service-cert \
--certificate=<your-producer-certfile.cert> \
--private-key=<your-producer-keyfile.pem> \
--region=$region
8. Crea il bilanciatore del carico delle applicazioni interno regionale
Successivamente, creeremo i componenti del bilanciatore del carico per il servizio. Utilizziamo il bilanciatore del carico delle applicazioni interno regionale, ma hai la possibilità di utilizzare qualsiasi bilanciatore del carico interno di Google Cloud. Segui la documentazione del bilanciatore del carico appropriato per la gestione TLS.
Crea l'indirizzo IP interno che verrà utilizzato per la regola di forwarding del bilanciatore del carico e prendi nota dell'IP da utilizzare in un secondo momento quando effettui una chiamata di test al servizio.
Da Cloud Shell
gcloud compute addresses create apache-service-ip \ --region=$region \ --subnet=service-subnet gcloud compute addresses describe apache-service-ip \ --format="get(address)" \ --region=$region
Crea il controllo di integrità del bilanciatore del carico.
Da Cloud Shell
gcloud compute health-checks create https lb-apache-service-hc \
--region=$region \
--port-name=https
Crea il servizio di backend.
Da Cloud Shell
gcloud compute backend-services create apache-bes\ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --port-name=https \ --health-checks=lb-apache-service-hc \ --health-checks-region=$region \ --region=$region gcloud compute backend-services add-backend apache-bes \ --balancing-mode=UTILIZATION \ --instance-group=psc-service-mig \ --region=$region
Crea la mappa URL.
Da Cloud Shell
gcloud compute url-maps create producer-url-map \ --default-service=apache-bes \ --region=$region
Crea i proxy HTTPS di destinazione.
Da Cloud Shell
gcloud compute target-https-proxies create https-proxy \ --url-map=producer-url-map \ --region=$region \ --ssl-certificates=producer-service-cert
Crea la regola di forwarding.
Da Cloud Shell
gcloud compute forwarding-rules create apache-fr \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=producer-vpc \ --subnet=service-subnet \ --address=apache-service-ip \ --ports=443 \ --region=$region \ --target-https-proxy=https-proxy \ --target-https-proxy-region=$region \ --allow-global-access
9. Crea una VM di test e testa il servizio in locale
Prima di creare il collegamento del servizio, creeremo una VM client di test in una regione diversa per verificare che il bilanciatore del carico sia configurato correttamente con l'accesso globale e TLS.
Da Cloud Shell
gcloud compute instances create vm-client \
--zone=us-east4-a \
--subnet=test-client-subnet \
--no-address
Attendi circa un minuto per il completamento del provisioning, quindi connettiti all'istanza tramite SSH.
Da Cloud Shell
gcloud compute ssh \
--zone "us-east4-a" "vm-client" \
--tunnel-through-iap \
--project $project
Testa il servizio Apache connettendoti tramite la porta 443 tramite il bilanciatore del carico. L'indirizzo IP interno è quello che hai prenotato e annotato in precedenza.
curl https://example.com:443 -k --connect-to example.com:443:<YOUR-INTERNAL-IP>:443
RISULTATO PREVISTO
PSC Service
Esci dalla VM.
Da vm-client
exit
10. Crea il collegamento al servizio
Per questo esempio, configuriamo il collegamento al servizio in modo da consentire solo le connessioni PSC da questo progetto. Può essere configurato per accettare uno o più progetti o reti specifici, ma non entrambi. Abbiamo impostato il limite massimo di connessioni a 5. Per ogni progetto o rete deve essere impostato un limite.
Da Cloud Shell
gcloud compute service-attachments create apache-service-attachment \
--region=$region \
--producer-forwarding-rule=apache-fr \
--connection-preference=ACCEPT_MANUAL \
--consumer-accept-list=$project=5 \
--nat-subnets=psc-nat-subnet
Devi annotare l'URI del collegamento del servizio (selfLink), poiché ti servirà nel passaggio successivo per la configurazione del backend PSC. Puoi ottenerlo eseguendo il seguente comando in Cloud Shell.
Da Cloud Shell
gcloud compute service-attachments describe apache-service-attachment \
--region $region
Copia l'URI a partire da projects
Esempio: projects/$project/regions/$region/serviceAttachments/apache-service-attachment
11. Configurazione del VPC consumer
Crea rete VPC
Da Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
Crea subnet
È necessaria una subnet sul lato consumer in cui verrà eseguito il deployment del gruppo di endpoint di rete (NEG) Private Service Connect.
Da Cloud Shell
gcloud compute networks subnets create consumer-subnet \
--network=consumer-vpc \
--region=$region \
--range=10.0.0.0/28
12. Prenota un IP esterno e crea un certificato autofirmato lato consumer
IP esterno
Crea l'indirizzo IP statico esterno che verrà utilizzato in seguito per la regola di forwarding del bilanciatore del carico e acquisisci l'indirizzo IP in una variabile Cloud Shell.
Da Cloud Shell
gcloud compute addresses create external-psc-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
export externalip=$(gcloud compute addresses describe external-psc-ip \
--format="get(address)" \
--global)
echo $externalip
Certificato autofirmato del consumatore
Per la seconda volta, completa il passaggio 1 delle istruzioni qui per creare un certificato autofirmato. Puoi eseguire tutti i comandi in Cloud Shell. Torna qui una volta completato il passaggio 1. Utilizzeremo un servizio DNS pubblico con caratteri jolly open source chiamato nip.io anziché possedere una nostra zona DNS pubblica. L'URL pubblico del servizio PSC utilizzerà l'indirizzo IP esterno appena configurato. YOUR COMMON NAME MUST BE CONFIGURED WITH <YOUR-EXTERNAL-IP.nip.io>
Crea una risorsa certificato da associare al bilanciatore del carico esterno. Sostituisci i parametri del certificato e della chiave privata con i nomi dei file specifici.
Da Cloud Shell
gcloud compute ssl-certificates create consumer-service-cert \
--certificate=<your-consumer-certfile.cert> \
--private-key=<your-consumer-keyfile.pem> \
--global
13. Crea i componenti del bilanciatore del carico
Creeremo un bilanciatore del carico delle applicazioni esterno globale con un NEG PSC che punta al collegamento del servizio appena creato come servizio di backend.
Tieni a portata di mano l'URI del collegamento al servizio che abbiamo annotato nell'ultimo passaggio. Sostituisci psc-target-service di seguito con il tuo URI.
Da Cloud Shell
gcloud compute network-endpoint-groups create apache-psc-neg \ --network-endpoint-type=private-service-connect \ --psc-target-service=projects/$project/regions/$region/serviceAttachments/apache-service-attachment \ --region=$region \ --network=consumer-vpc \ --subnet=consumer-subnet
Crea il servizio di backend.
Da Cloud Shell
gcloud compute backend-services create apache-pscneg-bes \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTPS \
--global
gcloud compute backend-services add-backend apache-pscneg-bes \
--network-endpoint-group=apache-psc-neg \
--network-endpoint-group-region=$region \
--global
Crea la mappa URL
Da Cloud Shell
gcloud compute url-maps create consumer-url-map \
--default-service=apache-pscneg-bes \
--global
Crea i proxy HTTPS di destinazione.
Da Cloud Shell
gcloud compute target-https-proxies create psc-https-proxy \
--url-map=consumer-url-map \
--ssl-certificates=consumer-service-cert
Crea la regola di forwarding
Da Cloud Shell
gcloud compute forwarding-rules create external-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=external-psc-ip \ --global \ --target-https-proxy=psc-https-proxy \ --ports=443
14. Crea zona DNS pubblica
Da Cloud Shell
gcloud dns managed-zones create "psc-service" \
--dns-name=$externalip.nip.io. \
--description="public dns for psc service" \
--visibility=public
Da Cloud Shell
gcloud dns record-sets transaction start \ --zone="psc-service" gcloud dns record-sets transaction add $externalip \ --name=$externalip.nip.io \ --ttl=300 \ --type=A \ --zone="psc-service" gcloud dns record-sets transaction execute \ --zone="psc-service"
15. Testa la connessione PSC consumer
Attendi 7-10 minuti prima di eseguire il test per consentire la propagazione del DNS pubblico.
Da Cloud Shell
curl https://$externalip.nip.io -k
Puoi anche eseguire il test dal browser inserendo https://<YOUR-EXTERNAL-IP>.nip.io nel browser o nel terminale desktop.
RISULTATO PREVISTO
PSC Service
16. Procedura di pulizia
Elimina i componenti del lab da un singolo terminale Cloud Shell
gcloud dns record-sets delete $externalip.nip.io --zone="psc-service" --type=A -q gcloud dns managed-zones delete "psc-service" -q gcloud compute forwarding-rules delete external-fr --global -q gcloud compute target-https-proxies delete psc-https-proxy -q gcloud compute url-maps delete consumer-url-map --global -q gcloud compute backend-services delete apache-pscneg-bes --global -q gcloud compute network-endpoint-groups delete apache-psc-neg --region=$region -q gcloud compute ssl-certificates delete consumer-service-cert --global -q gcloud compute addresses delete external-psc-ip --global -q gcloud compute networks subnets delete consumer-subnet --region $region -q gcloud compute networks delete consumer-vpc -q gcloud compute instances delete vm-client --zone=us-east4-a -q gcloud compute service-attachments delete apache-service-attachment --region $region -q gcloud compute forwarding-rules delete apache-fr --region $region -q gcloud compute target-https-proxies delete https-proxy --region $region -q gcloud compute url-maps delete producer-url-map --region $region -q gcloud compute backend-services delete apache-bes --region $region -q gcloud compute health-checks delete lb-apache-service-hc --region $region -q gcloud compute addresses delete apache-service-ip --region $region -q gcloud compute ssl-certificates delete producer-service-cert --region $region -q gcloud compute instance-groups managed delete psc-service-mig --region $region -q gcloud compute health-checks delete service-mig-healthcheck --global -q gcloud compute instance-templates delete apache-service-template -q gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -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 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 psc-nat-subnet --region $region -q gcloud compute networks subnets delete service-subnet --region $region -q gcloud compute networks subnets delete test-client-subnet --region us-east4 -q gcloud compute networks subnets delete central-proxy-subnet --region $region -q gcloud compute networks delete producer-vpc -q
17. Complimenti!
Congratulazioni per aver completato il codelab.
Argomenti trattati
- Crea e configura un backend PSC associato al bilanciatore del carico delle applicazioni esterno globale
- Configura un servizio web gestito Apache ed esponilo come servizio PSC tramite un collegamento al servizio
- Crea certificati SSL per terminare SSL sui bilanciatori del carico delle applicazioni interni ed esterni
- Configura una zona pubblica Cloud DNS per accedere al servizio PSC