Mappatura delle porte di Private Service Connect per i producer di servizi

1. Introduzione

Con Private Service Connect, i producer di servizi possono esporre i servizi in un ambiente VPC tramite un collegamento al 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 progetti di servizio richiedevano la deployment di più endpoint Private Service Connect sul lato consumer o l'utilizzo dell'inoltro IP sul lato producer per assicurarsi che la VM producer corretta fosse presa di mira.

Private Service Connect ora può scegliere come target in modo nativo la destinazione corretta utilizzando il mapping 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 del mapping delle porte Private Service Connect
  • Vantaggi principali del mapping delle porte PSC
  • Requisiti di rete
  • Crea un servizio producer Private Service Connect utilizzando il mapping delle porte.
  • Crea un endpoint Private Service Connect
  • Effettua 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 del mapping 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 del mapping delle porte sono i produttori di database NoSQL e i produttori Kafka. Tuttavia, qualsiasi produttore che richieda un cluster di VM che espongono gli stessi servizi su porte identiche con requisiti specifici di mapping delle VM può utilizzare questa funzionalità.

Il producer definisce il mapping tra una porta client e una VM producer + porta di destinazione. Il produttore deve quindi condividere queste informazioni con il consumatore. Il consumer utilizza le porte predefinite per identificare in modo univoco la VM del produttore e la porta di destinazione da raggiungere. La porta utilizzata dal consumer è diversa da quella utilizzata dal producer.

Vantaggi principali del mapping 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 traduzione degli indirizzi di rete.
  • Conveniente:non richiede risorse PSC aggiuntive o cicli di CPU della VM del produttore. Il prezzo è lo stesso degli altri tipi di implementazioni di PSC
  • Prestazioni elevate:il mapping delle porte offre la stessa velocità effettiva della linea e la stessa bassa latenza delle altre modalità PSC
  • Scalabile ed efficiente in termini di IP:un indirizzo IP del VPC consumer può accedere a un massimo di 1000 VM producer e 1000 mapping delle porte

3. Requisiti di rete

  • Il mapping 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 la mappatura delle porte (non i backend PSC o l'interfaccia PSC).
  • I NEG mappatura porte sono costrutti regionali.
  • I NEG di mappatura delle porte possono essere utilizzati solo in una connessione PSC. Non funzioneranno se la VM client chiama direttamente la regola di forwarding del bilanciatore del carico del producer. Ciò si riflette nel modo in cui viene testato il servizio di produzione in questo codelab.
  • L'endpoint PSC e lo stack di servizi del producer devono trovarsi in VPC diversi.

4. Topologia del codelab

ad37cfc003475b7c.png

Nel VPC del producer verranno create due VM che eseguiranno due server web ciascuna, uno in esecuzione sulla porta 1000 e l'altro sulla porta 2000. Testeremo ogni servizio prima di configurare il NEG Portmap, il bilanciatore del carico di rete passthrough interno e il collegamento del servizio.

Nella rete VPC consumer, configureremo un endpoint PSC e testeremo la connettività al servizio producer da una VM client.

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

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

Attiva tutti i servizi necessari

gcloud services enable compute.googleapis.com

7. Crea rete VPC producer

Rete VPC

Da Cloud Shell

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

Crea 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 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 saperne di più, consulta la documentazione sul dimensionamento della subnet NAT PSC.

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

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 producer 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 che il nostro servizio di produzione funzioni correttamente.

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

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

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

Apri una nuova finestra di 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 portmap. Prendi nota di entrambi gli indirizzi IP.

Apri una nuova finestra di 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

Output previsto:

portmap-vm1 1000

In Cloud Shell

curl [portmap-vm1 IP]:2000

Output previsto:

portmap-vm1 2000

In Cloud Shell

curl [portmap-vm2 IP]:1000

Output previsto:

portmap-vm2 1000

In Cloud Shell

curl [portmap-vm2 IP]:2000

Output previsto:

portmap-vm2 2000

Esci da test-client-vm

9. Crea il servizio di produzione con il NEG Portmap

Crea i 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 specifica 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 creazione 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

Crea 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 annota l'URI del collegamento al servizio per configurare l'endpoint PSC nell'ambiente consumer.

In Cloud Shell

gcloud compute service-attachments describe portmap-service-attachment --region=$region

Output previsto di esempio

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

Crea policy 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. Una deve 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 una VM di test

Da Cloud Shell

gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address

Crea un 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]

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

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

Congratulazioni per aver completato il codelab.

Argomenti trattati

  • Casi d'uso del mapping delle porte Private Service Connect
  • Vantaggi principali del mapping delle porte PSC
  • Requisiti di rete
  • Crea un servizio producer Private Service Connect utilizzando il mapping delle porte.
  • Crea un endpoint Private Service Connect
  • Effettua chiamate tramite un endpoint Private Service Connect a un servizio producer