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 dei producer tramite endpoint PSC o backend PSC.

L'obiettivo di questo codelab è i backend PSC. I backend PSC vengono utilizzati in combinazione con i bilanciatori del carico proxy (di rete o di applicazioni) di Google Cloud. L'utilizzo di backend PSC offre controlli più granulari lato consumatore, ad esempio:

  • Osservabilità e logging più approfonditi
  • Integrazione di Cloud Armor
  • URL personalizzati
  • Gestione avanzata del traffico
  • Certificati TLS personalizzati

In questo codelab, scoprirai come creare un backend Private Service Connect con l'Application Load Balancer 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 allegato del servizio
  • Creare 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à costituito da un VPC consumer e da un VPC producer. Nella VPC del producer, eseguirai il deployment di un gruppo di istanze gestite da un modello di istanza che crea un servizio web Apache open source. Implementerai anche una VM di test per garantire il corretto funzionamento locale del servizio. Dovrai esporre il servizio Apache come servizio di produzione PSC tramite un collegamento al servizio.

Nella VPC del consumatore, eseguirai il deployment di un bilanciatore del carico delle applicazioni esterno globale con un servizio di backend PSC che rimanda al servizio Apache. Dovrai quindi configurare una zona DNS pubblica per accedere al servizio PSC sulla rete internet pubblica.

31e7497bf3d9035c.png

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

Attivare tutti i servizi necessari

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com

5. Configurazione VPC del producer

Crea rete VPC

Da Cloud Shell

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

Crea subnet

In producer-vpc verranno implementate due subnet per uso generico. La sottorete di servizio verrà utilizzata per implementare le VM del servizio web Apache e la regola di inoltro del bilanciatore del carico. La sottorete test-client si troverà in una regione diversa e verrà utilizzata per eseguire 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 richiede una sottorete NAT PSC corrispondente da associare al collegamento del servizio. Le dimensioni di questa sottorete devono essere adeguate a seconda del 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 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 criteri e regole per il 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 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

Saranno necessarie altre due regole firewall 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. Creare un servizio web Apache

Creeremo un semplice servizio web Apache che mostra "Servizio PSC".

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'

Creare un controllo di integrità per il gruppo di istanze gestite

Da Cloud Shell

gcloud compute health-checks create https service-mig-healthcheck \
    --port=443 \
    --global

Creare un 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. Creare 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 al termine del passaggio 1. IL NOME COMUNE DEVE ESSERE CONFEZIONATO CON EXAMPLE.COM.

Crea una risorsa del certificato da associare al bilanciatore del carico. Sostituisci i parametri del certificato e della chiave privata con i nomi 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

Ora creeremo i componenti del bilanciatore del carico per il servizio. Utilizziamo il bilanciatore del carico delle applicazioni interno regionale, ma puoi utilizzare qualsiasi bilanciatore del carico interno di Google Cloud. Segui la documentazione del bilanciatore del carico appropriata per la gestione del protocollo TLS.

Crea l'indirizzo IP interno che verrà utilizzato per la regola di inoltro del bilanciatore del carico e prendi nota dell'IP da utilizzare in un secondo momento quando effettui una chiamata di prova 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 inoltro.

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 localmente

Prima di creare l'attacco al 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. Creare il collegamento al servizio

Per questo esempio, stiamo configurando il collegamento al servizio in modo da consentire solo le connessioni PSC da questo progetto. Questo può essere configurato per accettare uno o più progetti o reti specifici, ma non entrambi. Abbiamo impostato il limite massimo di connessioni su 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

Prendi nota dell'URI dell'attacco del servizio (selfLink), poiché ti servirà nel passaggio successivo per la configurazione del backend PSC. Puoi ottenerlo eseguendo quanto segue 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 VPC consumer

Crea rete VPC

Da Cloud Shell

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

Crea subnet

È necessaria una subnet lato consumer in cui verrà implementato il gruppo di endpoint di rete Private Service Connect (NEG).

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 consumatore

IP esterno

Crea l'indirizzo IP statico esterno che verrà utilizzato in seguito per la regola di inoltro 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 al termine del passaggio 1. Utilizzeremo un servizio DNS pubblico 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. IL TUO NOME COMUNE DEVE ESSERE CONFEZIONATO CON <YOUR-EXTERNAL-IP.nip.io>

Crea una risorsa del certificato da associare al bilanciatore del carico esterno. Sostituisci i parametri del certificato e della chiave privata con i nomi 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 rimanda al collegamento a un 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 inoltro

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 una 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. Testare la connessione PSC del consumatore

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 del computer.

RISULTATO PREVISTO

PSC Service

16. Procedura di pulizia

Eliminare 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!

Complimenti per aver completato il codelab.

Argomenti trattati

  • Crea un backend PSC configurato associato al bilanciatore del carico delle applicazioni esterno globale
  • Configura un servizio web gestito Apache ed esponilo come servizio PSC tramite un allegato del servizio
  • Creare 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