Private Service Connect - Utilizzo dei backend PSC per accedere a un servizio producer

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.

31e7497bf3d9035c.png

3. Configurazione e requisiti

Configurazione dell'ambiente autonomo

  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 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.
  1. 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:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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