Utilizzo di Private Service Connect per pubblicare e utilizzare servizi con GKE

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 produttore di servizi può supportare più di un consumer di servizi.
  • Ogni consumer si connette a un indirizzo IP interno che definisce. Private Service Connect esegue la conversione degli indirizzi di rete (NAT) per instradare la richiesta al producer di servizi.

45b90d50690dd111.png

Figura 2. Private Service Connect utilizza endpoint e collegamenti di servizio 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 consumatori di servizi
  • Concetti chiave per i producer di servizi
  • Crea un ambiente di produzione
  • Esporre il servizio (ambiente producer) tramite un collegamento del servizio
  • Creare un ambiente consumer
  • Crea una regola di forwarding nella rete consumer
  • Convalida l'accesso dei consumatori
  • Abilita il controllo dell'accesso ai criteri
  • Utilizza una regola firewall in uscita per bloccare l'accesso a una regola di inoltro consumer

Che cosa ti serve

  • Conoscenza del deployment di cluster e servizi GKE
  • Conoscenza dei bilanciatori del carico interni
  • Possibilità di creare VPC in due progetti
  • Possibilità di creare un cluster GKE

2. Vantaggi di Private Service Connect

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

Maggiore controllo dello spazio IP privato

  • In qualità di consumer di servizi, puoi controllare l'indirizzo IP privato utilizzato per connetterti al servizio gestito a cui vuoi accedere.
  • In qualità di consumer di servizi, non devi preoccuparti di riservare intervalli di indirizzi IP privati per i servizi di backend utilizzati nel tuo VPC. Per connetterti ai servizi del producer, devi solo scegliere un indirizzo IP dalla tua subnet.
  • In qualità di produttore di servizi, puoi scegliere di implementare un modello multi-tenant, in cui il tuo VPC contiene servizi che gestiscono più VPC consumer. I consumatori con intervalli di subnet sovrapposti non sono più un problema.
  • In qualità di fornitore di servizi, puoi scalare il tuo servizio al numero di istanze VM necessario, senza dover contattare il tuo consumatore per ottenere altri indirizzi IP.

Maggiore sicurezza e isolamento

  • In qualità di consumatore di servizi, solo tu puoi avviare la comunicazione con il produttore di servizi. Questa connettività unidirezionale semplifica notevolmente la configurazione del firewall, ma riduce anche il rischio di traffico non autorizzato proveniente dal service producer.
  • In qualità di produttore 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.

Migliore scalabilità

  • PSC consente una progettazione altamente scalabile supportando migliaia di consumer e consente ai produttori 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 le risorse necessarie nel tuo VPC. La scalabilità non è influenzata dal numero di queste risorse create nel VPC producer.

3. Concetti chiave per i consumatori di servizi

Puoi utilizzare gli endpoint Private Service Connect per utilizzare servizi esterni alla tua rete VPC. I consumer di servizi creano endpoint Private Service Connect che si connettono a un servizio di destinazione.

Endpoint

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

Invii traffico all'endpoint, che lo inoltra a destinazioni esterne alla tua rete VPC.

Obiettivi

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

  • Un bundle di 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 l'endpoint al servizio di un produttore di servizi, devi disporre del collegamento al 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 disponibile un servizio ai consumer, crei una o più subnet dedicate da utilizzare per la conversione degli indirizzi di rete (NAT) degli indirizzi IP dei consumer. Poi crei 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 lo scopo Private Service Connect.

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

Se vuoi conservare le informazioni sull'indirizzo IP della connessione consumer, consulta Visualizzare le informazioni sulla connessione 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 SNAT delle connessioni in entrata dei consumatori.

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

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

Allegati di servizio

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

  • Per esporre un servizio, un produttore 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 del 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 di servizi configurano un endpoint per connettersi al servizio e il producer di servizi accetta o rifiuta le richieste di connessione.

Requisiti e limitazioni

  • Si applicano le limitazioni per Private Service Connect.
  • Puoi creare un collegamento del servizio in GKE versione 1.21.4-gke.300 e successive.
  • Non puoi utilizzare la stessa subnet in più configurazioni di collegamento del servizio.
  • Devi creare un servizio GKE che utilizzi un bilanciatore del carico TCP/UDP interno.

5. Ambiente di test

La rete consumer è costituita da un indirizzo IP statico utilizzato per generare richieste al producer di servizi, oltre al collegamento di servizio di destinazione che esegue il mapping al collegamento di servizio del producer (servizio pubblicato).

1ce5607c0c56d77d.jpeg

Ora diamo un'occhiata alla rete dei produttori. Nota come la rete del producer non abbia un mapping alla rete dei consumer. Al contrario, la rete del producer contiene un collegamento del servizio (servizio pubblicato) utilizzato dal consumer per i servizi. Il collegamento di servizio del producer è esposto da un bilanciamento del carico interno L4 di GKE Ingress (servizio pubblicato) che consente la comunicazione con i pod GKE e le applicazioni associate.

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

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 SNAT delle connessioni in entrata dei consumatori.

Per scoprire di più su L4ILB per GKE Private Service Connect e ottenere l'accesso diretto ai contenuti utilizzati per creare questo lab, consulta quanto segue.

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.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google e puoi aggiornarla in qualsiasi momento.
  • L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). Cloud Console genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che in genere è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro casuale oppure puoi provare il tuo e vedere se è disponibile. Viene "congelato" dopo la creazione del progetto.
  • 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. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione al termine di questo tutorial, segui le istruzioni di "pulizia" riportate alla fine del codelab. 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 GCP, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

bce75f34b2c53987.png

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere un risultato simile a questo:

f6ef2b5f13479f3a.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 di 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 uno o più progetti.

Singolo progetto: aggiorna il progetto per supportare la rete di produttori e consumatori

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

In 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

Tieni presente la seguente convenzione del codice di colorazione:

f251ebb137e37136.png

7. Crea la rete VPC producer

afe738fc869f0d6e.png

Rete VPC

Da Cloud Shell

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

Crea la subnet del cluster GKE

Da Cloud Shell

gcloud compute networks subnets create node-subnet1 --project=$prodproject --range=192.168.10.0/24 --network=gke-producer-l4-vpc --region=us-central1 --secondary-range=pod=10.10.10.0/24,service=10.10.20.0/24 --enable-private-ip-google-access

Crea un cluster GKE

Da Cloud Shell

gcloud container clusters create gke-psc-l4 \
    --release-channel=rapid \
    --enable-ip-alias \
    --zone=us-central1-a \
    --network gke-producer-l4-vpc \
    --num-nodes 1 \
    --subnetwork node-subnet1 \
    --cluster-secondary-range-name pod \
    --services-secondary-range-name service

Crea una subnet per Private Service Connect (subnet NAT)

Devi creare una o più subnet dedicate da utilizzare con Private Service Connect. Se utilizzi la console Google Cloud per pubblicare un servizio, puoi creare le subnet durante questa procedura.

Per informazioni sulle subnet Private Service Connect, consulta Subnet Private Service Connect.

Da Cloud Shell

gcloud beta compute networks subnets create gke-nat-subnet \
    --project $prodproject \
    --network gke-producer-l4-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

8. Esegui il deployment di un workload e di servizi

Il seguente manifest descrive un deployment che esegue un'immagine container di esempio dell'applicazione web. Salva il manifest come my-deployment.yaml da Cloud Shell

apiVersion: apps/v1
kind: Deployment
metadata:
  name: psc-ilb
spec:
  replicas: 3
  selector:
    matchLabels:
      app: psc-ilb
  template:
    metadata:
      labels:
        app: psc-ilb
    spec:
      containers:
      - name: whereami
        image: gcr.io/google-samples/whereami:v1.2.1
        ports:
          - name: http
            containerPort: 8080
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 5
          timeoutSeconds: 1

Applica il manifest al cluster da Cloud Shell

kubectl apply -f my-deployment.yaml

Creare un servizio

Il seguente manifest descrive un servizio che crea un bilanciatore del carico TCP/UDP interno sulla porta TCP 8080. Salva il manifest come my-service.yaml da Cloud Shell.

apiVersion: v1
kind: Service
metadata:
  name: gke-l4-psc
  annotations:
    networking.gke.io/load-balancer-type: "Internal"
spec:
  type: LoadBalancer
  selector:
    app: psc-ilb
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

Applica il manifest al cluster da Cloud Shell

kubectl apply -f my-service.yaml

Create ServiceAttachment

Il seguente manifest descrive un ServiceAttachment che espone il servizio che hai creato ai consumer di servizi. Salva il manifest come my-psc.yaml da Cloud Shell.

apiVersion: networking.gke.io/v1beta1
kind: ServiceAttachment
metadata:
 name: emoji-sa
 namespace: default
spec:
 connectionPreference: ACCEPT_AUTOMATIC
 natSubnets:
 - gke-nat-subnet
 proxyProtocol: false
 resourceRef:
   kind: Service
   name: gke-l4-psc

Applica il manifest al cluster da Cloud Shell

kubectl apply -f my-psc.yaml

ServiceAttachment ha i seguenti campi:

  • connectionPreference:la preferenza di connessione che determina la modalità di connessione dei clienti al servizio. Puoi utilizzare l'approvazione automatica del progetto utilizzando ACCEPT_AUTOMATIC o l'approvazione esplicita del progetto utilizzando ACCEPT_MANUAL. Per saperne di più, consulta Pubblicazione di servizi tramite Private Service Connect.
  • natSubnets: un elenco di nomi di risorse di subnet da utilizzare per l'allegato di servizio.
  • proxyProtocol: se impostato su true, l'IP di origine del consumer e l'ID connessione Private Service Connect sono disponibili nelle richieste. Questo campo è facoltativo e viene impostato su false come valore predefinito se non viene fornito.
  • consumerAllowList:l'elenco dei progetti consumer autorizzati a connettersi a ServiceAttachment. Questo campo può essere utilizzato solo quando connectionPreference è ACCEPT_MANUAL. Per ulteriori informazioni su questo campo e altre opzioni, consulta Pubblicazione di servizi tramite Private Service Connect.

Convalida del produttore

Visualizzare i dettagli del service attachment

Puoi visualizzare i dettagli di un ServiceAttachment utilizzando il seguente comando da Cloud Shell

kubectl describe serviceattachment emoji-sa

Visualizza il bilanciamento del carico interno L4 di GKE

Nella console Google Cloud, vai a Servizi di rete → Bilanciamento del carico → Frontend.

Identifica l'indirizzo IP frontend che rientra nella subnet del nodo definita in precedenza 192.168.10.0/24. Tieni presente lo screenshot riportato di seguito. Il tuo indirizzo IP potrebbe essere diverso.

ed7a25ed4774977b.png

Visualizzare il servizio pubblicato

Nella console Google Cloud, vai a Servizi di rete → Private Service Connect → Servizi pubblicati.

Identifica il servizio con la rete utilizzata nel lab, gke-producer-l4-vpc,,nota lo screenshot di seguito, anche se i valori di Servizio e Destinazione potrebbero differire

5a00836ee514b918.png

Fai clic sul nome del servizio che ti porta alla schermata seguente, prendi nota dei dettagli dell'allegato di servizio compilati in Informazioni di base. Tieni presente anche che "Progetti collegati" è vuoto perché il consumer non si è ancora registrato al servizio. ACCETTA e RIFIUTA rimarranno disattivati poiché Preferenza di connessione è impostata su "ACCEPT_AUTOMATICALLY". Questa opzione può essere modificata in qualsiasi momento in "ACCEPT_MANUAL" modificando il file YAML del collegamento di servizio (my-psc.yaml).

497f5f43920018c0.png

e246063a23771273.png

9. Crea la rete VPC consumer

1f3c90f1e139e906.png

Nella sezione seguente, il VPC consumer è configurato in un progetto separato. La comunicazione tra la rete consumer e quella producer viene eseguita tramite il collegamento di servizio definito nella rete consumer.

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

Singolo progetto: aggiorna il progetto per supportare la rete di produttori e consumatori

In 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

In 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

Rete VPC

Da Cloud Shell

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

Crea una 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-central1

Crea una subnet per le istanze VM

Da Cloud Shell

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

Crea un indirizzo IP statico per accedere al servizio pubblicato

Da Cloud Shell

gcloud compute addresses create vpc-consumer-psc --region=us-central1 --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 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 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 obbligatorio per PSC, crea una regola firewall in uscita per monitorare il traffico PSC dei consumer verso il collegamento del servizio dei produttori

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

10. Crea l'istanza di test consumer 1

Da Cloud Shell

gcloud compute instances create consumer-instance-1 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.10 --no-address --subnet=consumer-subnet-vm --tags=google1 --image-family=debian-10 --image-project=debian-cloud

11. Crea l'istanza di test consumer 2

Da Cloud Shell

gcloud compute instances create consumer-instance-2 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.20 --no-address --subnet=consumer-subnet-vm --tags=google2 --image-family=debian-10 --image-project=debian-cloud

12. Crea un collegamento al servizio

In un passaggio precedente, hai copiato la stringa Producer Service Attachment in un luogo sicuro. Inserisci il valore memorizzato nel campo "target-service-attachment".

7abaccc4e24f1ef7.png

Da Cloud Shell

gcloud compute forwarding-rules create vpc-consumer-psc-fr --region=us-central1 --network=vpc-demo-consumer --address=vpc-consumer-psc --target-service-attachment=yoursavedproducerserviceattachment

13. Convalida - Consumatore

Utilizzeremo i log CURL e firewall per convalidare la comunicazione tra consumatore e produttore.

All'interno del progetto del consumer, gli indirizzi IP statici vengono utilizzati per originare la comunicazione con il producer. Questo mapping dell'indirizzo IP statico alla regola di forwarding del consumer viene convalidato eseguendo la seguente sintassi.

1f3c90f1e139e906.png

Dalla shell di utilizzo di Cloud VPC consumer, identifica la regola di forwarding e l'IP statico.

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

Nell'output riportato di seguito, utilizzeremo 10.0.60.100 per raggiungere il produttore in un passaggio successivo

IPAddress: 10.0.60.100
creationTimestamp: '2021-09-30T21:13:54.124-07:00'
id: '3564572805904938477'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr
network: https://www.googleapis.com/compute/v1/projects/deepakmichaelstage/global/networks/vpc-demo-consumer
networkTier: PREMIUM
pscConnectionId: '36583161500548196'
pscConnectionStatus: ACCEPTED

Visualizzare il servizio collegato

Nella console cloud, vai a Servizi di rete → Private Service Connect → Endpoint connessi e visualizza l'endpoint appena creato.

206bc00297aaa260.png

Accediamo a consumer-instance-1 e testiamo l'accesso al servizio pubblicato dal producer

Da Cloud Shell, apri una nuova scheda facendo clic su +

81f3210b29faebd3.png

Da Cloud Shell, esegui le seguenti operazioni:

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

gcloud compute ssh --zone "us-central1-a" "consumer-instance-1" --project "$projectname"

Una volta eseguito l'accesso all'istanza consumer-instance-1, esegui un comando curl sull'indirizzo IP della regola di forwarding 10.0.60.100

Da Cloud Shell, esegui le seguenti operazioni:

user@consumer-instance-1:~$ curl 10.0.60.100

Output di esempio

user@consumer-instance-1:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodprojectid.internal",
  "pod_name": "psc-ilb-588887dfdb-w7tbr",
  "pod_name_emoji": "🤷",
  "project_id": "prodorijectid",
  "timestamp": "2021-10-01T17:43:37",
  "zone": "us-central1-a"

Accediamo a consumer-instance-2 e testiamo l'accesso al servizio pubblicato dal producer

Da Cloud Shell, apri una nuova scheda facendo clic su +

81f3210b29faebd3.png

Da Cloud Shell, esegui le seguenti operazioni:

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

gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"

Da Cloud Shell, esegui le seguenti operazioni:

user@consumer-instance-2:~$ curl 10.0.60.100

Output di esempio

deepakmichael@consumer-instance-2:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodproject.internal",
  "pod_name": "psc-ilb-588887dfdb-4jdql",
  "pod_name_emoji": "🧑🏿",
  "project_id": "prodproject",
  "timestamp": "2021-10-01T17:49:51",
  "zone": "us-central1-a"

14. Logging dei firewall - Convalida allocata

Utilizza Esplora log per verificare che la regola firewall "vpc-consumner-psc" acquisisca il flusso tra l'istanza VM e l'IP statico

  1. Dalla console Cloud, identifica Logging operazioni → Esplora log
  2. Nel campo Query, aggiorna la voce riportata di seguito con yourconsumerproject e seleziona "Esegui query".

logName:(projects/yourconsumerprojectID/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 screenshot fornito

23e427b3060473.png

  1. Espandi il log (jsonPayload → Connection) e identifica l'output fornito di seguito. Prendi nota di dest_ip: 10.0.60.100 è l'IP TCP statico utilizzato per accedere al servizio Producer e src_ip: 10.0.70.10 o 10.0.70.20 sono gli indirizzi IP delle istanze VM. La disposizione è consentita.

2669743fd1f1cb0d.png

15. Convalida - Produttore

afe738fc869f0d6e.png

Nel progetto Producers verifica che il collegamento del servizio sia stato eseguito correttamente. Vai a Servizi di rete → Private Service Connect → Servizi pubblicati

89ded87a63888f60.png

Se fai clic sul servizio, vengono visualizzati il progetto consumer connesso e lo stato, come illustrato di seguito.

15966d47423ebc5f.png

16. Limitare l'accesso a un servizio pubblicato

1f3c90f1e139e906.png

Finora abbiamo confermato che entrambe le istanze hanno accesso ai servizi pubblicati. Creiamo una regola firewall in uscita per negare all'istanza consumer 2 l'accesso al servizio pubblicato.

Per impostazione predefinita, GCP consente tutto il traffico in uscita, ma nega tutto il traffico in entrata. Nei passaggi seguenti creeremo una regola firewall basata su un tag di rete definito in precedenza, "google2", utilizzato durante la creazione di consumer-instance-2 per negare l'accesso al servizio pubblicato.

7fa2cda1dfec33a.png

Apri una nuova scheda di Cloud Shell facendo clic su + esegui la seguente regola firewall in Cloud Shell

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

gcloud compute --project=$projectname firewall-rules create psc-endpoint-deny-egress --direction=EGRESS --priority=999 --network=vpc-demo-consumer --action=DENY --rules=all --destination-ranges=10.0.60.100/32 --target-tags=google2 --enable-logging

Ora verifichiamo se consumer-instance-2 è in grado di accedere al servizio pubblicato. Se la sessione è scaduta, devi aprire una nuova Cloud Shell e accedere alla VM come descritto di seguito.

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

gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"

Da Cloud Shell, esegui le seguenti operazioni:

user@consumer-instance-2:~$ curl 10.0.60.100

Output di esempio

user@consumer-instance-2:~$ curl 10.0.60.100
curl: (7) Failed to connect to 10.0.60.100 port 80: Connection timed out

Logging del firewall - Convalida negata

Utilizza Esplora log per verificare che la regola firewall "psc-endpoint-deny-egress" acquisisca il flusso tra l'istanza VM e l'IP statico

  1. Dalla console Cloud, identifica Logging operazioni → Esplora log
  2. Nel campo Query, aggiorna la voce riportata di seguito con il tuo consumerproject e seleziona "Esegui query".

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

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

83b4fc7348ac93cd.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.70.10 o 10.0.70.20 sono gli indirizzi IP dell'istanza VM. La disposizione è negata.

a344f75f67590655.png

17. Procedura di pulizia

Procedura per la pulizia della rete del produttore

afe738fc869f0d6e.png

Da una singola shell cloud nel terminale del progetto Producer, elimina i componenti del lab

gcloud container clusters delete gke-psc-l4 --region us-central1-a --quiet

gcloud compute networks subnets delete gke-nat-subnet --region=us-central1 --quiet

gcloud compute networks subnets delete node-subnet1 --region=us-central1 --quiet

gcloud compute networks delete gke-producer-l4-vpc --quiet

1f3c90f1e139e906.png

Procedura di pulizia della rete di consumatori

Da una singola shell cloud nel terminale del progetto consumer, elimina i componenti del lab

gcloud compute instances delete consumer-instance-1 --zone=us-central1-a --quiet

gcloud compute instances delete consumer-instance-2 --zone=us-central1-a --quiet

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

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

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

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

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

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

gcloud compute firewall-rules delete psc-endpoint-deny-egress --quiet

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

18. Complimenti!

Congratulazioni per aver completato il codelab.

Argomenti trattati

  • Vantaggi di Private Service Connect
  • Concetti chiave per i consumatori di servizi
  • Concetti chiave per i producer di servizi
  • Crea un ambiente di produzione
  • Esporre il servizio (ambiente producer) tramite un collegamento del servizio
  • Creare un ambiente consumer
  • Crea una regola di forwarding nella rete consumer
  • Convalida l'accesso dei consumatori
  • Abilita il controllo dell'accesso ai criteri
  • Utilizzo di una regola firewall in uscita per bloccare l'accesso a una regola di forwarding consumer