1. Introduzione
Private Service Connect con configurazione DNS automatica utilizza Service Directory e Cloud DNS per creare automaticamente record DNS programmati con gli indirizzi IP dell'endpoint Private Service Connect del consumatore.
Cosa creerai
In questo codelab, creerai un'architettura completa di Private Service Connect che illustra l'utilizzo del DNS automatico, come mostrato nella Figura 1.
Il DNS automatico è reso possibile da quanto segue:
- Il collegamento di servizio del producer genera il DNS automatico fornendo un dominio pubblico di proprietà con il flag "– domain-names" durante la creazione del collegamento di servizio Private Service Connect.
- Il consumatore definisce un nome di endpoint.
- Il DNS automatico crea sia una zona DNS goog-psc-default-us-central1 sia un nome DNS cosmopup.net, oltre a una voce di Service Directory costituita dal nome dell'endpoint del consumer.
Il vantaggio del DNS automatico è illustrato in (4), dove un utente finale può comunicare con l'endpoint consumer tramite DNS, FQDN stargazer.cosmopup.net.
Figura 1
Cosa imparerai a fare
- Come creare un bilanciatore del carico HTTP(S) interno
- Come creare un collegamento al servizio con DNS automatico
- Come stabilire un servizio producer di Private Service Connect
- Come accedere a un endpoint consumer utilizzando il DNS automatico
Che cosa ti serve
- Progetto Google Cloud
- Un dominio pubblico di tua proprietà
2. Prima di iniziare
Aggiornare il progetto per supportare il codelab
Questo Codelab utilizza le variabili $per facilitare l'implementazione della configurazione di gcloud in Cloud Shell.
In Cloud Shell, svolgi i seguenti passaggi:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname
3. Configurazione del produttore
Crea il VPC del produttore
In Cloud Shell, svolgi i seguenti passaggi:
gcloud compute networks create producer-vpc --project=$projectname --subnet-mode=custom
Crea le subnet dei produttori
In Cloud Shell, svolgi i seguenti passaggi:
gcloud compute networks subnets create gce-subnet --project=$projectname --range=172.16.20.0/28 --network=producer-vpc --region=us-central1
In Cloud Shell, svolgi i seguenti passaggi:
gcloud compute networks subnets create load-balancer-subnet --project=$projectname --range=172.16.10.0/28 --network=producer-vpc --region=us-central1
Prenota un indirizzo IP per il bilanciatore del carico interno
In Cloud Shell, svolgi i seguenti passaggi:
gcloud compute addresses create lb-ip \
--region=us-central1 \
--subnet=load-balancer-subnet \
--purpose=GCE_ENDPOINT
Visualizza l'indirizzo IP assegnato
Utilizza il comando compute addresses describe per visualizzare l'indirizzo IP allocato
gcloud compute addresses describe lb-ip --region=us-central1 | grep address:
Crea le subnet proxy regionali
L'allocazione dei proxy avviene a livello di rete VPC, non a livello di bilanciatore del carico. Devi creare una subnet solo proxy in ogni regione di una rete virtuale (VPC) in cui utilizzi i bilanciatori del carico basati su Envoy. Se esegui il deployment di più bilanciatori del carico nella stessa regione e nella stessa rete VPC, questi condividono la stessa subnet solo proxy per il bilanciamento del carico.
- Un client effettua una connessione all'indirizzo IP e alla porta della regola di inoltro del bilanciatore del carico.
- Ogni proxy ascolta l'indirizzo IP e la porta specificati dalla regola di inoltro del bilanciatore del carico corrispondente. Uno dei proxy riceve e termina la connessione di rete del client.
- Il proxy stabilisce una connessione alla VM di backend appropriata determinata dalla mappa URL e dai servizi di backend del bilanciatore del carico.
Devi creare subnet solo proxy indipendentemente dal fatto che la rete VPC sia in modalità automatica o personalizzata. Una subnet solo proxy deve fornire almeno 64 indirizzi IP. Questo requisito corrisponde a una lunghezza del prefisso pari o inferiore a /26. La dimensione della subnet consigliata è /23 (512 indirizzi solo proxy).
In Cloud Shell, svolgi i seguenti passaggi:
gcloud compute networks subnets create proxy-subnet-us-central \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=us-central1 \
--network=producer-vpc \
--range=172.16.0.0/23
Crea le subnet NAT di Private Service Connect
Crea una o più subnet dedicate da utilizzare con Private Service Connect. Se utilizzi la console Google Cloud per pubblicare un servizio, puoi creare le sottoreti durante questa procedura. Crea la subnet nella stessa regione del bilanciatore del carico del servizio. Non puoi convertire una subnet normale in una subnet Private Service Connect.
In Cloud Shell, svolgi i seguenti passaggi:
gcloud compute networks subnets create psc-nat-subnet \
--project $projectname \
--network producer-vpc \
--region us-central1 \
--range 100.100.10.0/24 \
--purpose PRIVATE_SERVICE_CONNECT
Crea le regole firewall del produttore
Configura le regole del firewall per consentire il traffico tra la subnet NAT di Private Service Connect e la subnet solo proxy ILB.
In Cloud Shell, svolgi i seguenti passaggi:
gcloud compute --project=$projectname firewall-rules create allow-to-ingress-nat-subnet --direction=INGRESS --priority=1000 --network=producer-vpc --action=ALLOW --rules=all --source-ranges=100.100.10.0/24
In Cloud Shell, crea la regola firewall fw-allow-health-check per consentire ai controlli di integrità di Google Cloud di raggiungere il servizio di produzione (servizio di backend) sulla porta TCP 80.
gcloud compute firewall-rules create fw-allow-health-check \
--network=producer-vpc \
--action=allow \
--direction=ingress \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--rules=tcp:80
Crea una regola firewall di autorizzazione in entrata per la subnet solo proxy per consentire al bilanciatore del carico di comunicare con le istanze di backend sulla porta TCP 80.
gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
--network=producer-vpc \
--action=allow \
--direction=ingress \
--source-ranges=172.16.0.0/23 \
--rules=tcp:80
Configurazione di Cloud Router e NAT
Cloud NAT viene utilizzato nel codelab per l'installazione del pacchetto software poiché l'istanza VM non ha un indirizzo IP esterno.
In Cloud Shell, crea il router Cloud.
gcloud compute routers create cloud-router-for-nat --network producer-vpc --region us-central1
In Cloud Shell, crea il gateway NAT.
gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
Configurazione del gruppo di istanze
Nella sezione seguente, creerai l'istanza Compute Engine e il gruppo di istanze non gestite. Nei passaggi successivi, il gruppo di istanze verrà utilizzato come servizio di backend del bilanciatore del carico.
In Cloud Shell, crea il controllo di integrità a livello di regione passato al servizio di produzione.
gcloud compute instances create app-server-1 \
--project=$projectname \
--machine-type=e2-micro \
--image-family debian-10 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=gce-subnet \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to App-Server-1 !!' | tee /var/www/html/index.html
EOF"
In Cloud Shell, crea il gruppo di istanze non gestito.
gcloud compute instance-groups unmanaged create psc-instance-group --zone=us-central1-a
gcloud compute instance-groups unmanaged set-named-ports psc-instance-group --project=$projectname --zone=us-central1-a --named-ports=http:80
gcloud compute instance-groups unmanaged add-instances psc-instance-group --zone=us-central1-a --instances=app-server-1
Configura il bilanciatore del carico
Nei passaggi seguenti configurerai il bilanciatore del carico HTTP interno che verrà pubblicato come collegamento a un servizio in un passaggio successivo
In Cloud Shell, crea il controllo di integrità a livello di regione.
gcloud compute health-checks create http http-health-check \
--region=us-central1 \
--use-serving-port
In Cloud Shell, crea il servizio di backend.
gcloud compute backend-services create l7-ilb-backend-service \
--load-balancing-scheme=INTERNAL_MANAGED \
--protocol=HTTP \
--health-checks=http-health-check \
--health-checks-region=us-central1 \
--region=us-central1
In Cloud Shell, aggiungi i backend al servizio di backend.
gcloud compute backend-services add-backend l7-ilb-backend-service \
--balancing-mode=UTILIZATION \
--instance-group=psc-instance-group \
--instance-group-zone=us-central1-a \
--region=us-central1
In Cloud Shell, crea la mappa URL per instradare le richieste in entrata al servizio di backend.
gcloud compute url-maps create l7-ilb-map \
--default-service l7-ilb-backend-service \
--region=us-central1
Crea il proxy di destinazione HTTP.
gcloud compute target-http-proxies create l7-ilb-proxy\
--url-map=l7-ilb-map \
--url-map-region=us-central1 \
--region=us-central1
Crea una regola di forwarding per instradare le richieste in entrata al proxy. Non utilizzare la subnet solo proxy per creare la regola di inoltro.
gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=producer-vpc \
--subnet=load-balancer-subnet \
--address=lb-ip \
--ports=80 \
--region=us-central1 \
--target-http-proxy=l7-ilb-proxy \
--target-http-proxy-region=us-central1
4. Convalida il bilanciatore del carico
In Cloud Console, vai a Servizi di rete → Bilanciamento del carico → Bilanciatori del carico. Nota il controllo di integrità riuscito del servizio di backend
La selezione di 'l7-ilb-map' restituisce l'indirizzo IP del frontend, che deve corrispondere all'indirizzo IP che hai cercato in un passaggio precedente, e identifica il servizio di backend.
5. Crea il collegamento del servizio Private Service Connect
Crea il collegamento al servizio
In Cloud Shell, crea l'allegato del servizio. Assicurati di aggiungere il punto alla fine del nome di dominio.
gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet --domain-names=cosmopup.net.
Facoltativo:se utilizzi un VPC condiviso, crea il collegamento del servizio nel progetto di servizio.
gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=projects/<hostproject>/regions/us-central1/subnetworks/psc-nat-subnet --domain-names=cosmopup.net.
Vai a Servizi di rete → Private Service Connect per visualizzare il collegamento di servizio appena stabilito
La selezione di published-service fornisce maggiori dettagli, tra cui l'URI del collegamento al servizio utilizzato dal consumer per stabilire una connessione Private Service Connect e il nome di dominio.
Dettagli dell'allegato del servizio:
projects/<project name>/regions/us-central1/serviceAttachments/published-service
6. Configurazione del consumatore
Abilita le API per i consumatori
In Cloud Shell, esegui quanto segue:
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
Crea la rete VPC consumer
In Cloud Shell, svolgi i seguenti passaggi:
gcloud compute networks create consumer-vpc --project=$projectname --subnet-mode=custom
Crea le subnet dei consumatori
In Cloud Shell, crea la subnet per l'istanza di test.
gcloud compute networks subnets create db1-subnet --project=$projectname --range=10.20.0.0/28 --network=consumer-vpc --region=us-central1
In Cloud Shell, crea una subnet per l'endpoint consumer.
gcloud compute networks subnets create consumer-ep-subnet --project=$projectname --range=10.10.0.0/28 --network=consumer-vpc --region=us-central1
Crea l'endpoint consumer (regola di inoltro)
In Cloud Shell, crea l'indirizzo IP statico che verrà utilizzato per l'endpoint consumer.
gcloud compute addresses create psc-consumer-ip-1 --region=us-central1 --subnet=consumer-ep-subnet --addresses 10.10.0.10
Utilizziamo l'URI dell'attacco del servizio generato in precedenza per creare l'endpoint del consumatore.
In Cloud Shell, crea l'endpoint consumer.
gcloud compute forwarding-rules create stargazer --region=us-central1 --network=consumer-vpc --address=psc-consumer-ip-1 --target-service-attachment=projects/$projectname/regions/us-central1/serviceAttachments/published-service
7. Convalida la connessione nella rete VPC del consumatore
Dalla rete VPC consumer, verifica che la connessione Private Service sia andata a buon fine andando a Servizi di rete → Private Service Connect → Endpoint collegati. Prendi nota della connessione di Stargazer stabilita e dell'indirizzo IP corrispondente che abbiamo creato in precedenza.
Quando selezioni psc-consumer-1, vengono forniti i dettagli, incluso l'URI del collegamento al servizio
8. Convalida la connessione nella rete VPC del produttore
Dalla rete VPC del producer, verifica che la connessione Private Service Connect sia andata a buon fine andando a Network Services → Private Service Connect→Published Service. Tieni presente che la connessione del servizio pubblicata ora indica 1 regola di inoltro (endpoint di connessione).
9. Convalida la configurazione DNS automatica
Valutiamo la configurazione del DNS e di Service Directory.
Configurazione di Cloud DNS
Vai a Servizi di rete → Cloud DNS → Zone. La zona goog-psc-default-us-central e il nome DNS cosmopup.net vengono generati automaticamente.
Visualizzare la configurazione di DNS e Service Directory
La selezione del nome della zona ci consente di vedere come Service Directory è integrato con Cloud DNS.
Configurazione di Service Directory
Vai a Servizi di rete → Directory dei servizi.
Ricordi il nome dell'endpoint consumer "stargazer"? Viene programmato automaticamente in Service Directory, il che ci consente di raggiungere l'endpoint del consumatore utilizzando l'FQDN stargazer.goog-psc-default–us-central1
10. Convalida l'accesso dei consumatori al servizio dei produttori
Dalla rete VPC del consumer, creeremo una VM per testare la connettività del servizio pubblicato accedendo all'endpoint consumer stargazer.cosmopup.net
In Cloud Shell, crea l'istanza di test nel VPC del consumatore.
gcloud compute instances create db1 \
--zone=us-central1-a \
--image-family=debian-10 \
--image-project=debian-cloud \
--subnet=db1-subnet \
--no-address
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.
In Cloud Shell, crea la regola firewall IAP.
gcloud compute firewall-rules create ssh-iap-consumer \
--network consumer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
Accedi a consumer-vm utilizzando IAP in Cloud Shell per convalidare la connettività al servizio di produzione eseguendo un comando curl. Riprova se si verifica un timeout.
gcloud compute ssh db1 --project=$projectname --zone=us-central1-a --tunnel-through-iap
Esegui un comando curl per convalidare la connettività al servizio del produttore. Una volta convalidato, esci dalla VM per tornare al prompt di Cloud Shell
In Cloud Shell, esegui un comando curl contro il tuo dominio personalizzato, ad esempio stargazer.[custom-domain.com]. Nell'output riportato di seguito, viene eseguito un comando curl su stargazer.cosmopup.net
user@db1:~$ curl -v stargazer.cosmopup.net
* Trying 10.10.0.10...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55d3aa8190f0)
* Connected to stargazer.cosmopup.net (10.10.0.10) port 80 (#0)
> GET / HTTP/1.1
> Host: stargazer.cosmopup.net
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 200 OK
< date: Thu, 22 Dec 2022 00:16:25 GMT
< server: Apache/2.4.38 (Debian)
< last-modified: Wed, 21 Dec 2022 20:26:32 GMT
< etag: "1b-5f05c5e43a083"
< accept-ranges: bytes
< content-length: 27
< content-type: text/html
< via: 1.1 google
<
Welcome to App-Server-1 !!
Esci dalla VM tornando al prompt di Cloud Shell per avviare le attività di pulizia
11. Esegui la pulizia
Da Cloud Shell, elimina i componenti del codelab.
gcloud compute forwarding-rules delete stargazer --region=us-central1 --quiet
gcloud compute instances delete db1 --zone=us-central1-a --quiet
gcloud compute addresses delete psc-consumer-ip-1 --region=us-central1 --quiet
gcloud compute networks subnets delete consumer-ep-subnet db1-subnet --region=us-central1 --quiet
gcloud compute firewall-rules delete ssh-iap-consumer --quiet
gcloud compute networks delete consumer-vpc --quiet
gcloud compute service-attachments delete published-service --region=us-central1 --quiet
gcloud compute forwarding-rules delete l7-ilb-forwarding-rule --region=us-central1 --quiet
gcloud compute target-http-proxies delete l7-ilb-proxy --region=us-central1 --quiet
gcloud compute url-maps delete l7-ilb-map --region=us-central1 --quiet
gcloud compute backend-services delete l7-ilb-backend-service --region=us-central1 --quiet
gcloud compute instance-groups unmanaged delete psc-instance-group --zone=us-central1-a --quiet
gcloud compute instances delete app-server-1 --zone=us-central1-a --quiet
gcloud compute firewall-rules delete allow-to-ingress-nat-subnet fw-allow-health-check fw-allow-proxy-only-subnet --quiet
gcloud compute addresses delete lb-ip --region=us-central1 --quiet
gcloud compute networks subnets delete gce-subnet load-balancer-subnet psc-nat-subnet proxy-subnet-us-central --region=us-central1 --quiet
gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet
gcloud compute networks delete producer-vpc --quiet
12. Complimenti
Congratulazioni, hai configurato e convalidato correttamente un endpoint Private Service Connect con configurazione DNS automatica.
Hai creato l'infrastruttura del produttore e hai aggiunto un allegato del servizio con la registrazione del dominio pubblico. Hai imparato a creare un endpoint consumer nella rete VPC del consumer che consenta la connettività al servizio on-premise utilizzando il DNS generato automaticamente.
Cosmopup pensa che i codelab siano fantastici.
Passaggi successivi
Dai un'occhiata ad alcuni di questi codelab…
- Utilizzare Private Service Connect per pubblicare e utilizzare servizi con GKE
- Utilizzare Private Service Connect per pubblicare e utilizzare i servizi
- Connettersi ai servizi on-premise tramite Hybrid Networking utilizzando Private Service Connect e un bilanciatore del carico proxy TCP interno
Letture e video di approfondimento
- Panoramica di Private Service Connect
- Che cos'è Private Service Connect?
- Tipi di bilanciatori del carico supportati