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.
3. Configurazione e requisiti
Configurazione dell'ambiente a tuo ritmo
- 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 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.
- 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:
Dovrebbe richiedere solo pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere qualcosa di simile a questo:
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