1. Introduzione
Con Private Service Connect, i producer di servizi possono esporre i servizi in un ambiente VPC tramite un collegamento di servizio e consentire ai consumer in un altro ambiente VPC di accedere a questi servizi tramite un endpoint Private Service Connect. A volte questi servizi di produzione sono progettati come cluster di VM, con ogni VM che espone gli stessi servizi su numeri di porta identici. In precedenza, questi design dei servizi richiedevano il deployment di più endpoint Private Service Connect lato consumer o l'utilizzo del forwarding IP lato producer per assicurarsi che la VM producer corretta fosse scelta come target.
Private Service Connect ora può scegliere come target la destinazione corretta in modo nativo utilizzando la mappatura delle porte. In questo lab scoprirai i casi d'uso in cui è richiesta questa funzionalità e come eseguire il deployment di un NEG di mappatura delle porte in un carico di lavoro Private Service Connect.
Cosa imparerai a fare
- Casi d'uso della mappatura delle porte Private Service Connect
- Vantaggi principali della mappatura delle porte PSC
- Requisiti di rete
- Crea un servizio producer Private Service Connect utilizzando la mappatura delle porte.
- Creare un endpoint Private Service Connect
- Effettuare chiamate tramite un endpoint Private Service Connect a un servizio producer
Che cosa ti serve
- Progetto Google Cloud con autorizzazioni di proprietario
2. Casi d'uso della mappatura delle porte Private Service Connect
La funzionalità di mappatura delle porte utilizza un gruppo di endpoint di rete (NEG) di mappatura delle porte specifico per i casi d'uso PSC.
I tipi più comuni di produttori che possono trarre vantaggio dall'utilizzo della mappatura delle porte sono i produttori di database NoSQL e i produttori Kafka. Tuttavia, qualsiasi produttore che richieda un cluster di VM che esponga gli stessi servizi su porte identiche con requisiti di mappatura delle VM specifici può utilizzare questa funzionalità.
Il producer definisce la mappatura tra una porta client e una VM producer + porta di destinazione. Il produttore deve quindi condividere queste informazioni con il consumatore. Il consumatore utilizza le porte predefinite per identificare in modo univoco la VM del produttore + la porta di destinazione che deve raggiungere. La porta utilizzata dal consumatore è diversa da quella utilizzata dal produttore.
Vantaggi principali della mappatura delle porte PSC
- Semplice: i producer eseguono il deployment dei componenti PSC con una mappatura delle porte e i consumer eseguono il deployment di un endpoint PSC. PSC gestisce automaticamente la Network Address Translation.
- Economico: non richiede risorse PSC aggiuntive o cicli della CPU della VM del produttore. I prezzi sono gli stessi di altri tipi di implementazioni di PSC
- Elevate prestazioni:la mappatura delle porte offre lo stesso throughput in linea e la stessa latenza ridotta delle altre modalità PSC
- Scalabilità ed efficienza in termini di IP: un indirizzo IP della VPC del consumatore può accedere a un massimo di 1000 VM del produttore e 1000 mappature delle porte
3. Requisiti di rete
- La mappatura delle porte richiede l'utilizzo di un bilanciatore del carico di rete passthrough interno come bilanciatore del carico del produttore.
- Solo gli endpoint PSC possono essere utilizzati con il mapping delle porte (non i backend o l'interfaccia PSC).
- I NEG di mappatura delle porte sono costrutti regionali.
- I NEG di mappatura delle porte possono essere utilizzati solo tramite una connessione PSC. Non funzioneranno se la VM client chiama direttamente la regola di inoltro del bilanciatore del carico del produttore. Questo si riflette nel modo in cui il servizio di produzione viene testato in questo codelab.
- L'endpoint PSC e lo stack di servizi del producer devono trovarsi in VPC diversi.
4. Topologia del codelab
Nella VPC producer verranno create due VM che eseguiranno ciascuna due server web, uno sulla porta 1000 e uno sulla porta 2000. Testeremo ogni servizio prima di configurare il NEG di mappatura delle porte, il bilanciatore del carico di rete passthrough interno e l'attacco del servizio.
Nel VPC consumer, configureremo un endpoint PSC e testeremo la connettività al servizio producer da una VM client.
5. 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.
6. 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-ID] project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone
Attivare tutti i servizi necessari
gcloud services enable compute.googleapis.com
7. 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-service-subnet --network producer-vpc --range 10.0.0.0/24 --region $region --enable-private-ip-google-access gcloud compute networks subnets create psc-nat-subnet --network producer-vpc --range 10.100.100.0/24 --region $region --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 la quantità di traffico in entrata da tutti gli endpoint PSC collegati. Per ulteriori informazioni, consulta la documentazione relativa al dimensionamento delle sottoreti NAT PSC.
Creare criteri firewall di rete e regole firewall
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
La seguente regola firewall consente il traffico sulle porte TCP 1000-2000 dalla subnet PSC a tutte le istanze della rete. In un ambiente di produzione, questa regola firewall deve essere limitata solo alle istanze associate al servizio del produttore specifico.
Da Cloud Shell
gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 10.100.100.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
La seguente regola firewall consente tutto il traffico all'interno della subnet dei servizi sulle porte TCP 1000-2000. Questa regola verrà utilizzata per verificare il corretto funzionamento del nostro servizio per i produttori.
Da Cloud Shell
gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic within the service subnet" --direction INGRESS --src-ip-ranges 10.0.0.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
Crea e configura le VM di produzione
Creare VM
Da Cloud Shell
gcloud compute instances create portmap-vm1 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create portmap-vm2 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create test-client-vm --zone=$zone --subnet=producer-service-subnet --no-address
Nella sezione seguente, avvia il server HTTP sulle porte 1000 e 2000 su ogni VM Producer.
Configurare le VM
Da Cloud Shell
gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project
In Cloud Shell dalla sessione portmap-vm1
mkdir 1000 cd 1000 echo "portmap-vm1 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm1 2000">index.html sudo python3 -m http.server 2000 &
Aprire una nuova finestra Cloud Shell
Inizia reimpostando le variabili. In Cloud Shell
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute ssh --zone $zone "portmap-vm2" --tunnel-through-iap --project $project
In Cloud Shell dalla sessione portmap-vm2
mkdir 1000 cd 1000 echo "portmap-vm2 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm2 2000">index.html sudo python3 -m http.server 2000 &
8. Test Producer Service
Per prima cosa, dobbiamo ottenere gli indirizzi IP delle istanze di portmap. Prendi nota di entrambi gli indirizzi IP.
Aprire una nuova finestra Cloud Shell
Inizia reimpostando le variabili. In Cloud Shell
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute instances describe portmap-vm1 \ --format='get(networkInterfaces[0].networkIP)' --zone $zone gcloud compute instances describe portmap-vm2\ --format='get(networkInterfaces[0].networkIP)' --zone $zone
Accedi all'istanza di test. In Cloud Shell
gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project curl [portmap-vm1 IP]:1000
Risultato previsto
portmap-vm1 1000
In Cloud Shell
curl [portmap-vm1 IP]:2000
Risultato previsto
portmap-vm1 2000
In Cloud Shell
curl [portmap-vm2 IP]:1000
Risultato previsto
portmap-vm2 1000
In Cloud Shell
curl [portmap-vm2 IP]:2000
Risultato previsto
portmap-vm2 2000
Esci da test-client-vm
9. Creare un servizio di produzione con NEG Portmap
Creare componenti del bilanciatore del carico
Da Cloud Shell
gcloud compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP
Aggiungi endpoint al NEG Portmap per creare il mapping dalla porta client alla porta del produttore. Il produttore crea questa mappatura e avrà il proprio metodo per comunicare queste informazioni ai consumatori. La mappatura delle porte specifiche non viene condivisa tramite PSC.
In Cloud Shell
gcloud compute network-endpoint-groups update portmap-neg --region=$region --add-endpoint=client-destination-port=1001,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=1000 --add-endpoint=client-destination-port=1002,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=2000 --add-endpoint=client-destination-port=1003,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=1000 --add-endpoint=client-destination-port=1004,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=2000
Completa la configurazione del bilanciatore del carico.
In Cloud Shell
gcloud compute backend-services create portmap-bes --load-balancing-scheme=internal --region=$region --network=producer-vpc gcloud compute backend-services add-backend portmap-bes --network-endpoint-group=portmap-neg --network-endpoint-group-region=$region gcloud compute forwarding-rules create portmap-fr --load-balancing-scheme=INTERNAL --network=producer-vpc --subnet=producer-service-subnet --ports=ALL --region=$region --backend-service=portmap-bes
Creare un collegamento al servizio
Da Cloud Shell
gcloud compute service-attachments create portmap-service-attachment --region=$region --producer-forwarding-rule=portmap-fr --connection-preference=ACCEPT_AUTOMATIC --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 portmap-service-attachment --region=$region
Esempio di output previsto
connectionPreference: ACCEPT_AUTOMATIC creationTimestamp: '2024-07-19T10:02:29.432-07:00' description: '' enableProxyProtocol: false fingerprint: LI8D6JNQsLA= id: '6207474793859982026' kind: compute#serviceAttachment name: portmap-service-attachment natSubnets: - https://www.googleapis.com/compute/v1/projects/$project/regions/$zone/subnetworks/psc-nat-subnet pscServiceAttachmentId: high: '94288091358954472' low: '6207474793859982026' reconcileConnections: false region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/portmap-service-attachment targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/portmap-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-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access
Creare criteri firewall di rete e regole firewall
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
Per la rete del consumatore è necessario solo l'accesso SSH da IAP.
11. Crea VM, endpoint PSC e verifica la connettività
A questo punto, dovrebbero essere aperte tre finestre di Cloud Shell. Dovresti avere una sessione aperta con portmap-vm1. Una deve avere una sessione aperta con portmap-vm2 e l'altra deve essere la sessione di lavoro.
Crea VM di test
Da Cloud Shell
gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address
Crea endpoint PSC
Da Cloud Shell
gcloud compute addresses create psc-endpoint-ip --region=$region --subnet=consumer-client-subnet --addresses 10.0.0.10 gcloud compute forwarding-rules create psc-portmap-endpoint --region=$region --network=consumer-vpc --address=psc-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]
Testa la connettività
Da Cloud Shell
gcloud compute ssh --zone $zone "consumer-client-vm" --tunnel-through-iap --project $project curl 10.0.0.10:1001
Risultato previsto
portmap-vm1 1000
Da Cloud Shell
curl 10.0.0.10:1002
Risultato previsto
portmap-vm1 2000
Da Cloud Shell
curl 10.0.0.10:1003
Risultato previsto
portmap-vm2 1000
Da Cloud Shell
curl 10.0.0.10:1004
Risultato previsto
portmap-vm2 2000
12. Procedura di pulizia
Esci dall'istanza VM (tutte le finestre)
exit
Eliminare i componenti del lab da un singolo terminale Cloud Shell
gcloud compute forwarding-rules delete psc-portmap-endpoint --region=$region -q gcloud compute addresses delete psc-endpoint-ip --region=$region -q gcloud compute instances delete consumer-client-vm --zone=$zone -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 networks subnets delete consumer-client-subnet --region=$region -q gcloud compute networks delete consumer-vpc -q gcloud compute service-attachments delete portmap-service-attachment --region=$region -q gcloud compute forwarding-rules delete portmap-fr --region=$region -q gcloud compute backend-services delete portmap-bes --region=$region -q gcloud compute network-endpoint-groups delete portmap-neg --region=$region -q gcloud compute instances delete test-client-vm --zone=$zone -q gcloud compute instances delete portmap-vm2 --zone=$zone -q gcloud compute instances delete portmap-vm1 --zone=$zone -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 networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete producer-service-subnet --region $region -q gcloud compute networks delete producer-vpc -q
13. Complimenti!
Complimenti per aver completato il codelab.
Argomenti trattati
- Casi d'uso della mappatura delle porte Private Service Connect
- Vantaggi principali della mappatura delle porte PSC
- Requisiti di rete
- Crea un servizio producer Private Service Connect utilizzando la mappatura delle porte.
- Creare un endpoint Private Service Connect
- Effettuare chiamate tramite un endpoint Private Service Connect a un servizio producer