Utilizzo di Private Service Connect per pubblicare e utilizzare i servizi

1. Introduzione

Private Service Connect consente a un producer di servizi di offrire servizi privatamente a un consumer di servizi. Private Service Connect offre i seguenti vantaggi:

  • Una rete VPC del producer di servizi può supportare più di un consumer di servizi.
  • Ogni consumatore si connette a un indirizzo IP interno da lui definito. Private Service Connect esegue Network Address Translation (NAT) per instradare la richiesta al producer di servizi.

45b90d50690dd111.png

Figura 2. Private Service Connect utilizza endpoint e collegamenti ai servizi per consentire ai consumer di servizi di inviare traffico dalla rete VPC del consumer ai servizi nella rete VPC del producer di servizi (fai clic per ingrandire).

Cosa imparerai a fare

  • Vantaggi di Private Service Connect
  • Concetti chiave per i consumer di servizi
  • Concetti chiave per i producer di servizi
  • Crea un ambiente producer
  • Esponi il servizio (ambiente producer) tramite il collegamento a un servizio
  • Crea un ambiente consumer
  • Crea una regola di forwarding nella rete consumer
  • Convalida dell'accesso consumer TCP
  • Abilita & convalida protocollo proxy
  • Abilita il controllo dell'accesso ai criteri

Che cosa ti serve

  • Conoscenza dei bilanciatori del carico interni
  • Possibilità di creare VPC in due progetti

2. Vantaggi di Private Service Connect

Con PSC, hai diversi vantaggi rispetto all'utilizzo del peering VPC:

Migliore controllo dello spazio IP privato

  • In qualità di consumer di servizi, puoi controllare l'indirizzo IP privato utilizzato per la connessione al servizio gestito a cui vuoi accedere.
  • In qualità di consumer di servizi, non devi preoccuparti di prenotare intervalli di indirizzi IP privati per i servizi di backend utilizzati nel tuo VPC. Devi solo scegliere un indirizzo IP dalla tua subnet per connetterti ai servizi producer.
  • In qualità di producer di servizi, puoi scegliere di eseguire il deployment di un modello multi-tenant, in cui il VPC contiene servizi che gestiscono più VPC consumer. I consumatori con intervalli di subnet che si sovrappongono non sono più un problema.
  • Come fornitore di servizi, puoi scalare il tuo servizio fino a tutte le istanze VM necessarie, senza dover contattare il tuo consumer per richiedere altri indirizzi IP.

Sicurezza e isolamento migliorati

  • In qualità di consumer di servizi, solo tu puoi avviare la comunicazione con il producer di servizi. Questa connettività unidirezionale semplifica drasticamente la configurazione del firewall, ma riduce anche il rischio del traffico di routing proveniente dal producer di servizi.
  • In qualità di producer di servizi, non devi modificare le regole firewall in base agli intervalli di subnet nel VPC del consumer. Puoi semplicemente creare regole firewall per l'intervallo di indirizzi IP NAT configurato per il tuo servizio.

Maggiore scalabilità

  • PSC consente una progettazione a scalabilità elevata supportando migliaia di consumer e consente ai producer di servizi di offrire servizi multi-tenant o single-tenant altamente scalabili.
  • In qualità di consumer di servizi che utilizza Private Service Connect, puoi creare risorse secondo le necessità nel tuo VPC. La portata di questo errore non è influenzata dal numero di risorse di questo tipo create nel VPC del producer.

3. Concetti chiave per i consumer di servizi

Puoi utilizzare gli endpoint di Private Service Connect per consumare i servizi al di fuori della tua rete VPC. I consumer di servizi creano endpoint Private Service Connect che si connettono a un servizio di destinazione.

Endpoint

Puoi utilizzare gli endpoint Private Service Connect per connetterti a un servizio di destinazione. Gli endpoint hanno un indirizzo IP interno nella rete VPC e si basano sulla risorsa della regola di forwarding.

Invii il traffico all'endpoint, che lo inoltra alle destinazioni al di fuori della tua rete VPC.

Obiettivi

Gli endpoint Private Service Connect hanno una destinazione, ovvero il servizio a cui vuoi connetterti:

  • Un pacchetto API:
  • Tutte le API: la maggior parte delle API di Google
  • VPC-SC: API supportate dai Controlli di servizio VPC
  • Un servizio pubblicato in un'altra rete VPC. Questo servizio può essere gestito dalla tua organizzazione o da una terza parte.

Servizio pubblicato

Per connettere il tuo endpoint al servizio di un producer di servizi, è necessario il collegamento del servizio per il servizio. L'URI del collegamento al servizio ha questo formato: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

4. Concetti chiave per i producer di servizi

Per rendere un servizio disponibile per i consumer, puoi creare una o più subnet dedicate da utilizzare per la Network Address Translation (NAT) degli indirizzi IP consumer. Quindi creerai un collegamento del servizio che fa riferimento a queste subnet.

Subnet Private Service Connect

Per esporre un servizio, il producer di servizi crea prima una o più subnet con Private Service Connect specifiche.

Quando una richiesta viene inviata da una rete VPC consumer, l'indirizzo IP di origine del consumer viene convertito utilizzando NAT (SNAT) di origine in un indirizzo IP selezionato da una delle subnet Private Service Connect.

Se desideri conservare le informazioni sull'indirizzo IP della connessione del consumer, consulta Visualizzazione delle informazioni della connessione del consumer.

Queste subnet non possono essere utilizzate per risorse come istanze VM o regole di forwarding. Le subnet vengono utilizzate solo per fornire indirizzi IP per la SNAT delle connessioni consumer in entrata.

La subnet Private Service Connect deve contenere almeno un indirizzo IP per ogni 63 VM consumer,in modo che a ciascuna VM consumer siano allocate 1024 tuple di origine per la traduzione degli indirizzi di rete.

La dimensione minima di una subnet Private Service Connect è /24.

Collegamenti dei servizi

I producer di servizi espongono il proprio servizio tramite il collegamento a un servizio.

  • Per esporre un servizio, un producer di servizi crea un collegamento al servizio che fa riferimento alla regola di forwarding del bilanciatore del carico del servizio.
  • Per accedere a un servizio, un consumer di servizi crea un endpoint che fa riferimento al collegamento al servizio.

Preferenze di connessione

Quando crei un servizio, scegli come renderlo disponibile. Le opzioni disponibili sono due:

  • Accetta automaticamente le connessioni per tutti i progetti: qualsiasi consumer di servizi può configurare un endpoint e connettersi automaticamente al servizio.
  • Accetta connessioni per i progetti selezionati: i consumer dei servizi configurano un endpoint per la connessione al servizio e il producer di servizi accetta o rifiuta le richieste di connessione.

5. Ambiente di test

La rete consumer è costituita da un indirizzo IP statico TCP utilizzato per generare richieste al producer di servizi, oltre a target-service-attachment che mappa al collegamento al servizio del producer (servizio pubblicato).

Ora diamo un'occhiata alla rete di produttori. Nota che la rete dei producer non ha una mappatura alla rete dei consumatori. La rete del producer contiene invece un collegamento a un servizio (servizio pubblicato) utilizzato dal consumer per i servizi. Il collegamento del servizio del producer nel nostro lab è un bilanciatore del carico interno di livello 4 (regola di forwarding del producer) mappato a un servizio di backend che supporta un'applicazione TCP.

La subnet NAT e le regole firewall associate consentono la comunicazione con l'applicazione producer.

28b09284a99eb60b.png

Configurazione dell'ambiente da seguire in modo autonomo

  1. Accedi alla console Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Ricorda l'ID progetto, un nome univoco in tutti i progetti Google Cloud (il nome precedente è già stato utilizzato e non funzionerà correttamente). Verrà indicato più avanti in questo codelab come PROJECT_ID.

  1. Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.

Eseguire questo codelab non dovrebbe costare molto. Assicurati di seguire le istruzioni nella sezione "Pulizia" in cui viene spiegato come arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

Avvia Cloud Shell

Anche se Google Cloud può essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Dalla console di Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

bce75f34b2c53987.png

Dovrebbe richiedere solo qualche istante per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere una schermata simile al seguente:

f6ef2b5f13479f3a.png

Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Tutto il lavoro in questo lab può essere svolto semplicemente con un browser.

6. Prima di iniziare

Il codelab richiede due progetti, anche se non è un requisito per PSC. Prendi nota dei riferimenti per supportare progetti singoli o multipli.

Progetto singolo: aggiorna il progetto per supportare la rete di producer e consumer

All'interno di Cloud Shell, assicurati che l'ID progetto sia configurato

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
consumerproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

Più progetti - Aggiorna il progetto per supportare la rete del producer

All'interno di Cloud Shell, assicurati che l'ID progetto sia configurato

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

7. Crea rete VPC dei producer

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio Producer

Rete VPC

Da Cloud Shell

gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom

Crea subnet

Da Cloud Shell

gcloud compute networks subnets create vpc-demo-us-west2 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=us-west2

Crea un'istanza Cloud NAT

Cloud NAT non è lo stesso NAT utilizzato per PSC. Cloud NAT viene utilizzato esplicitamente per l'accesso a internet al fine di scaricare i pacchetti dell'applicazione.

Crea router Cloud

Da Cloud Shell

gcloud compute routers create crnatprod --network vpc-demo-producer --region us-west2

Crea Cloud NAT

Da Cloud Shell

gcloud compute routers nats create cloudnatprod --router=crnatprod --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2

8. Crea istanze di calcolo

Da Cloud Shell crea l'istanza www-01.

gcloud compute instances create www-01 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=vpc-demo-us-west2 --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install tcpdump -y
apt-get install apache2 -y
a2ensite default-ssl
apt-get install iperf3 -y
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2
iperf3 -s -p 5050'

Da Cloud Shell crea l'istanza www-02.

gcloud compute instances create www-02 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=vpc-demo-us-west2 --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install tcpdump -y
apt-get install apache2 -y
a2ensite default-ssl
apt-get install iperf3 -y
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2
iperf3 -s -p 5050'

9. Crea un gruppo di istanze non gestite

Crea un gruppo di istanze non gestite composto da www-01 e www-02

Da Cloud Shell

gcloud compute instance-groups unmanaged create vpc-demo-ig-www --zone=us-west2-a

gcloud compute instance-groups unmanaged add-instances vpc-demo-ig-www --zone=us-west2-a --instances=www-01,www-02

gcloud compute health-checks create http hc-http-80 --port=80

10. Creazione di servizi di backend TCP, regola di forwarding e firewall

Da Cloud Shell crea il servizio di backend

gcloud compute backend-services create vpc-demo-www-be-tcp --load-balancing-scheme=internal --protocol=tcp --region=us-west2 --health-checks=hc-http-80

gcloud compute backend-services add-backend vpc-demo-www-be-tcp --region=us-west2 --instance-group=vpc-demo-ig-www --instance-group-zone=us-west2-a

Da Cloud Shell crea la regola di forwarding

gcloud compute forwarding-rules create vpc-demo-www-ilb-tcp --region=us-west2 --load-balancing-scheme=internal --network=vpc-demo-producer --subnet=vpc-demo-us-west2 --address=10.0.2.10 --ip-protocol=TCP --ports=all --backend-service=vpc-demo-www-be-tcp --backend-service-region=us-west2

Da Cloud Shell, crea una regola firewall per abilitare i controlli di integrità del backend.

gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-producer --source-ranges 130.211.0.0/22,35.191.0.0/16 --enable-logging

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 rendere accessibile tramite IAP.
  • Consente il traffico in entrata dall'intervallo IP 35.235.240.0/20. Questo intervallo contiene tutti gli indirizzi IP utilizzati da IAP per l'inoltro TCP.

Da Cloud Shell

gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

11. Crea subnet TCP NAT

Da Cloud Shell

gcloud compute networks subnets create vpc-demo-us-west2-psc-tcp --network=vpc-demo-producer --region=us-west2 --range=192.168.0.0/24 --purpose=private-service-connect

12. Creare un collegamento al servizio TCP e regole del firewall

Da Cloud Shell crea il collegamento al servizio TCP

gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 --producer-forwarding-rule=vpc-demo-www-ilb-tcp --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=vpc-demo-us-west2-psc-tcp

convalida il collegamento al servizio TCP

gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region us-west2

Da Cloud Shell crea la regola firewall che consente l'accesso alla subnet TCP NAT al backend del bilanciatore del carico interno

gcloud compute --project=$prodproject firewall-rules create vpc-demo-allowpsc-tcp --direction=INGRESS --priority=1000 --network=vpc-demo-producer --action=ALLOW --rules=all --source-ranges=192.168.0.0/24 --enable-logging

13. Crea rete VPC dei consumer

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio consumer

Nella sezione seguente, il VPC consumer è configurato in un progetto separato. La comunicazione tra la rete del consumatore e del producer viene effettuata tramite il collegamento al servizio definito nella rete del consumatore.

Rete VPC

Il codelab richiede due progetti, anche se non è un requisito per PSC. Prendi nota dei riferimenti per supportare progetti singoli o multipli.

Progetto singolo: aggiorna il progetto per supportare la rete di producer e consumer

All'interno di Cloud Shell, assicurati che l'ID progetto sia configurato

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
consumerproject=YOUR-PROJECT-NAME
prodproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

Più progetti - Aggiorna il progetto per supportare una rete consumer

All'interno di Cloud Shell, assicurati che l'ID progetto sia configurato

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
consumerproject=YOUR-PROJECT-NAME
echo $consumerproject

Da Cloud Shell

gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom

Crea subnet per PSC

Da Cloud Shell

gcloud compute networks subnets create consumer-subnet --project=$consumerproject  --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-west2

Creare un indirizzo IP statico per le applicazioni TCP

Da Cloud Shell

gcloud compute addresses create vpc-consumer-psc-tcp --region=us-west2 --subnet=consumer-subnet --addresses 10.0.60.100

Crea regole firewall

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 rendere accessibile tramite IAP.
  • Consente il traffico in entrata dall'intervallo IP 35.235.240.0/20. Questo intervallo contiene tutti gli indirizzi IP utilizzati da IAP per l'inoltro TCP.

Da Cloud Shell

gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

Sebbene non sia necessario per PSC, è necessario creare una regola firewall in uscita per monitorare il traffico PSC consumer verso il collegamento del servizio dei producer

gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging

Crea un'istanza Cloud NAT

Cloud NAT non è lo stesso NAT utilizzato per PSC. Cloud NAT viene utilizzato esplicitamente per l'accesso a internet per scaricare i pacchetti dell'applicazione

Crea router Cloud

Da Cloud Shell

gcloud compute routers create crnatconsumer --network vpc-demo-consumer --region us-west2

Crea Cloud NAT

Da Cloud Shell

gcloud compute routers nats create cloudnatconsumer --router=crnatconsumer --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2

14. Crea VM istanza di test

Da Cloud Shell

gcloud compute instances create test-instance-1 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=consumer-subnet --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install iperf3 -y
apt-get install tcpdump -y'

15. Crea collegamento del servizio TCP

Da Cloud Shell

gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp --region=us-west2 --network=vpc-demo-consumer --address=vpc-consumer-psc-tcp --target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp

16. Convalida

Useremo CURL, TCPDUMP e log dei firewall per convalidare le comunicazioni tra consumatori e producer.

All'interno del progetto del consumatore, gli indirizzi IP statici vengono utilizzati per trasmettere le comunicazioni con il producer. Questa mappatura dell'indirizzo IP statico alla regola di forwarding del consumer viene convalidata eseguendo la sintassi seguente.

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio consumer

Dai VPC consumer, Cloud Shell identifica la regola di forwarding TCP e l'IP statico

gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region us-west2

Output:

IPAddress: 10.0.60.100
IPProtocol: TCP
creationTimestamp: '2021-07-14T13:34:23.359-07:00'
id: '2768158450402915488'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr-tcp
<snip>

17. Convalida TCP

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio Producer

In Producer Project,identifica "www-01". &amp; "www-02" e avviare una sessione SSH per istanza.

6d0bb8c5cb115876.png

Da "www-01" esegui TCPDUMP per monitorare NAT

sudo tcpdump -i any net 192.168.0.0/16 -n

Da "www-02" esegui TCPDUMP per monitorare NAT

sudo tcpdump -i any net 192.168.0.0/16 -n

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio consumer

In Consumer Project,identifica "test-instance-1" e avviare due sessioni.

Da "test-instance-1" nella prima sessione, eseguire TCPDUMP per monitorare il consumer

sudo tcpdump -i any host 10.0.60.100 -n

Da "test-instance-1" sessione due esegui convalida TCP

curl -v 10.0.60.100 

18. Osservazioni - Consumatori

Da "test-instance-1" la sessione due CURL ha successo e restituisce 200 OK.

@test-instance-1:~$ curl -v 10.0.60.100 
* Rebuilt URL to: 10.0.60.100/
*   Trying 10.0.60.100...
* TCP_NODELAY set
* Connected to 10.0.60.100 (10.0.60.100) port 80 (#0)
> GET / HTTP/1.1
> Host: 10.0.60.100
> User-Agent: curl/7.52.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Wed, 14 Jul 2021 21:20:22 GMT
< Server: Apache/2.4.25 (Debian)
< Last-Modified: Wed, 14 Jul 2021 20:09:09 GMT
< ETag: "1d-5c71aed5edabd"
< Accept-Ranges: bytes
< Content-Length: 29
< Content-Type: text/html
< 
Page on www-01 in us-west2-a
* Curl_http_done: called premature == 0
* Connection #0 to host 10.0.60.100 left intact

Da "test-instance-1" sessione uno TCPDUMP identifica istanza VM → TCP comunicazione e risposta IP statico

21:20:22.572052 IP 10.0.60.2.59432 > 10.0.60.100.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1

21:20:22.572688 IP 10.0.60.100.80 > 10.0.60.2.59432: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK

Logging dei firewall

Con Esplora log, convalida la regola firewall "vpc-consumner-psc" sta acquisendo il flusso tra l'istanza VM e l'IP statico

  1. Dalla console Cloud, Identifica il logging delle operazioni → Esplora log
  2. Nel campo Query aggiorna la voce seguente con il tuo progetto consumer e seleziona "Esegui query"

logName:(projects/yourconsumerproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")

  1. I risultati della query forniscono quanto segue per ogni screenshot fornito

b573c878a8d6d01f.png

  1. Espandi il log e identifica l'output fornito di seguito. Prendi nota di dest_ip: 10.0.60.100 è l'IP TCP STATICO e src_ip: 10.0.60.2 è l'indirizzo IP dell'istanza VM

1b4f46b3e61f6f12.png

19. Osservazioni - Produttore

Dall'istanza di backend "www-01" o "www-02" viene osservata la seguente comunicazione tra la subnet TCP NAT e il bilanciatore del carico interno TCP.

21:20:22.572186 IP 192.168.0.2.1024 > 10.0.2.10.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1

21:20:22.572679 IP 10.0.2.10.80 > 192.168.0.2.1024: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK

20. Logging dei firewall

Utilizzo della regola firewall di convalida di Esplora log "vpc-demo-allowpsc-tcp" è acquisire la comunicazione TCP NAT flusso TCP ILB eseguendo questi passaggi:

  1. Dalla console Cloud, Identifica il logging delle operazioni → Esplora log
  2. Nel campo Query aggiorna la voce seguente con yourprodproject e seleziona "Esegui query".

logName:(projects/yourprodproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-producer/firewall:vpc-demo-allowpsc-tcp")

  1. I risultati della query forniscono quanto segue per ogni screenshot fornito

8ce6b0d17d76ad6d.png

  1. Espandi il log e identifica l'output fornito di seguito. Prendere nota di TCP ILB dest_ip: 10.0.2.10 e NAT TCP source_range (192.168.0.0/24) & il rispettivo src_ip: 192.168.0.2.

e157a7af8cb667e.png

21. Abilita protocollo proxy

Per impostazione predefinita, Private Service Connect converte l'indirizzo IP di origine del consumer in un indirizzo in una delle subnet Private Service Connect nella rete VPC del producer di servizi. Se invece vuoi visualizzare l'indirizzo IP di origine originale del consumatore, puoi attivare il protocollo PROXY. Se il protocollo PROXY è abilitato, puoi ottenere l'indirizzo IP di origine del consumer e l'ID connessione PSC dall'intestazione del protocollo PROXY

e9d1c49971b10ed0.png

Riferimento alla documentazione

Elimina i servizi pubblicati dai produttori

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio Producer

Da Cloud Shell, elimina i collegamenti del servizio TCP

gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet

Da Cloud Shell convalida i collegamenti al servizio vengono eliminati (0 elementi elencati)

gcloud compute service-attachments list

Crea un collegamento al servizio TCP con protocollo proxy abilitato

gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 \
--producer-forwarding-rule=vpc-demo-www-ilb-tcp \
--connection-preference=ACCEPT_AUTOMATIC \
--nat-subnets=vpc-demo-us-west2-psc-tcp \
--enable-proxy-protocol

Da Cloud Shell è possibile convalidare i collegamenti ai servizi con il protocollo proxy abilitato (true)

gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region=us-west2 | grep -i enableProxyProtocol:

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio consumer

Da Cloud Shell, elimina le regole di forwarding TCP

gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet

Ricrea le regole di forwarding TCP da associare al collegamento del servizio (producer) creato in precedenza

Da Cloud Shell crea la regola di forwarding TCP

gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp \
--region=us-west2 --network=vpc-demo-consumer \
--address=vpc-consumer-psc-tcp \
--target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp

Convalida protocollo proxy

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio Producer

In Producer Project,identifica "www-01". &amp; "www-02" e avviare una sessione per istanza.

6d0bb8c5cb115876.png

Da "www-01" esegui TCPDUMP per monitorare NAT

sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16

Da "www-02" esegui TCPDUMP per monitorare NAT

sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio consumer

In Consumer Project,identifica "test-instance-1" e avviare una singola sessione

Da "test-instance-1" per eseguire una query curl

curl 10.0.60.100 

Osservazioni - Consumatori

Tieni presente che se il protocollo PROXY Protocol v2 è abilitato, ma l'applicazione non è configurata per il supporto, verrà visualizzato un messaggio di errore se ti connetti dal client, come nell'esempio riportato di seguito. Sono necessari aggiornamenti Apache per supportare l'intestazione e il proxy aggiuntivo v2 non trattati nel codelab.

Da "test-instance-1" sessione CURL produrrà un previsto 400 richieste non valide sebbene la query di backend abbia esito positivo.

@test-instance-1:~$ curl 10.0.60.100 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.25 (Debian) Server at www-02.c.deepakmichaelprod.internal Port 80</address>

Osservazioni - Consumatori

Dall'istanza di backend "www-01" o "www-02" vengono osservate le seguenti comunicazioni tra la subnet TCP NAT e il bilanciatore del carico interno TCP con il protocollo proxy incorporato nell'acquisizione.

Nella maggior parte dei casi, il terzo pacchetto nel file tcpdump contiene gli elementi informativi sul protocollo proxy (IE) pertinenti. Facoltativamente, identifica il pacchetto di 39 byte che contiene il protocollo proxy IE.

192.168.0.3.1025 > 10.0.2.10.80: Flags [P.], cksum 0xb617 (correct), seq 2729454396:2729454435, ack 1311105819, win 28160, length 39: HTTP
        0x0000:  4500 004f 0000 4000 4006 6df4 c0a8 0003  E..O..@.@.m.....
        0x0010:  0a00 020a 0401 0050 a2b0 2b3c 4e25 e31b  .......P..+<N%..
        0x0020:  5018 6e00 b617 0000 0d0a 0d0a 000d 0a51  P.n............Q
        0x0030:  5549 540a 2111 0017 0a00 3c02 0a00 3c64  UIT.!.....<...<d
        0x0040:  8138 0050 e000 0800 9b34 d70a 003c 64    .8.P.....4...<d

Identificare il protocollo PROXY firma: 0d0a0d0a000d0a515549540a nell'acquisizione del pacchetto

Identificando la firma del protocollo PROXY, è possibile suddividerla e decodificare i campi come segue:

Firma protocollo PROXY: 0d0a0d0a000d0a515549540a

Altri campi di protocollo PROXY: 21 11 00 17

IP e porte: 0a003c02 0a003c64 8138 0050

Tipo TLV: e0

Lunghezza TLV: 00 08

pscConnection ID: 009b34d70a003c64

Esadecimale

Decimale / IP

Firma protocollo PROXY

0d0a0d0a000d0a515549540a

Versione, Protocollo, Lunghezza

21 11 0017

IP Src

0a003c02

10.0.60.2

IP Dst

0a003c64

10.0.60.100

Porta Src

8138

33080

Porta Dst

0050

80

Tipo di TLV (PP2_TYPE_GCP)

e0

Durata TLV

0008

pscConnectionId

00004dde290a003c64

43686719580552292

pscConnectionId può essere convalidato anche descrivendo la regola di forwarding del consumatore come di seguito e assicurandosi che corrisponda:

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio consumer

Da Cloud Shell, descrivi le regole di forwarding TCP

gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2

Output che descrive pscConnectionID

$ gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2
IPAddress: 10.0.60.100
IPProtocol: TCP
creationTimestamp: '2021-07-14T16:50:31.766-07:00'
id: '4443494505307621032'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr-tcp
network: https://www.googleapis.com/compute/v1/projects/deepakmichaeldev/global/networks/vpc-demo-consumer
networkTier: PREMIUM
pscConnectionId: '43686719580552292'
pscConnectionStatus: ACCEPTED

22. Criterio di connessione

Puoi passare dall'accettazione automatica a quella esplicita del progetto per un servizio pubblicato.

Il passaggio dall'accettazione automatica all'accettazione esplicita non influisce sugli endpoint dei consumatori che si erano collegati al servizio prima di questa modifica. Gli endpoint consumer esistenti possono connettersi al servizio pubblicato finché il collegamento al servizio non viene eliminato. È necessario accettare nuovi endpoint consumer prima che possano connettersi al servizio. Per ulteriori informazioni, consulta la sezione Gestione delle richieste di accesso a un servizio pubblicato.

In questa sezione del lab modificherai il criterio di connessione del producer in modo da approvare esplicitamente il collegamento al servizio del consumatore.

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio Producer

Dal servizio producer, Cloud Shell aggiorna il criterio di preferenza di connessione da accettazione automatica ad accettazione manuale.

gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --connection-preference ACCEPT_MANUAL

Identifica lo stato dell'endpoint andando a Servizi di rete → Private Service Connect → Servizi pubblicati → vpc-demo-psc-west2-tcp → Progetti connessi

e1d90d1563e10731.png

Avviso, progetto consumer modificato in "In attesa" in Progetti connessi.

Accetta il progetto consumer eseguendo quanto segue in Cloud Shell, assicurati di aggiornarlo con il nome del progetto appropriato

gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --consumer-accept-list $consumerproject=20

Identifica lo stato dell'endpoint andando a Servizi di rete → Private Service Connect → Servizi pubblicati → vpc-demo-psc-west2-tcp → Progetti connessi

35cba9ac640594a2.png

Avviso, progetto consumatore modificato in "Accettato" in Progetti connessi.

23. Passaggi per la pulizia

Passaggi di pulizia della rete del producer

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio Producer

Elimina i componenti del lab da una singola Cloud Shell nel terminale del progetto Producer

gcloud compute routers nats delete cloudnatprod --router=crnatprod --region=us-west2 --quiet

gcloud compute routers delete crnatprod --region=us-west2 --quiet

gcloud compute instances delete www-01 --zone=us-west2-a --quiet

gcloud compute instances delete www-02 --zone=us-west2-a --quiet

gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet

gcloud compute forwarding-rules delete vpc-demo-www-ilb-tcp --region=us-west2 --quiet

gcloud compute backend-services delete vpc-demo-www-be-tcp --region=us-west2 --quiet

gcloud compute instance-groups unmanaged delete vpc-demo-ig-www --zone=us-west2-a --quiet

gcloud compute health-checks delete hc-http-80 --quiet

gcloud compute firewall-rules delete vpc-demo-allowpsc-tcp --quiet

gcloud compute firewall-rules delete vpc-demo-health-checks --quiet

gcloud compute firewall-rules delete psclab-iap-prod --quiet

gcloud compute networks subnets delete vpc-demo-us-west2 --region=us-west2 --quiet

gcloud compute networks subnets delete vpc-demo-us-west2-psc-tcp --region=us-west2 --quiet

gcloud compute networks delete vpc-demo-producer --quiet

Nota: nella sezione seguente, esegui gli aggiornamenti della configurazione nel progetto che contiene il tuo servizio consumer

Passaggi di pulizia della rete del consumatore

Elimina i componenti del lab da una singola Cloud Shell nel terminale del progetto Producer

gcloud compute routers nats delete cloudnatconsumer --router=crnatconsumer --region=us-west2 --quiet

gcloud compute routers delete crnatconsumer --region=us-west2 --quiet

gcloud compute instances delete test-instance-1 --zone=us-west2-a --quiet

gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet

gcloud compute addresses delete vpc-consumer-psc-tcp --region=us-west2 --quiet

gcloud compute firewall-rules delete psclab-iap-consumer --quiet

gcloud compute networks subnets delete consumer-subnet --region=us-west2 --quiet

gcloud compute firewall-rules delete vpc-consumer-psc --quiet

gcloud compute networks delete vpc-demo-consumer --quiet

24. Complimenti!

Complimenti per aver completato il codelab.

Argomenti trattati

  • Vantaggi di Private Service Connect
  • Concetti chiave per i consumer di servizi
  • Concetti chiave per i producer di servizi
  • Crea un ambiente producer
  • Esponi il servizio (ambiente producer) tramite il collegamento a un servizio
  • Crea un ambiente consumer
  • Crea una regola di forwarding nella rete consumer
  • Convalida dell'accesso consumer TCP
  • Abilita & convalida protocollo proxy
  • Abilita il controllo dell'accesso ai criteri