1. Introduzione
Una strategia ibrida è una soluzione pragmatica per adattarsi alle mutevoli richieste del mercato e modernizzare gradualmente le tue applicazioni. Il supporto ibrido per i bilanciatori del carico HTTP(S) esterni e interni di Google Cloud estende il bilanciamento del carico cloud ai backend che risiedono on-premise e in altri cloud ed è un fattore chiave per la tua strategia ibrida. Potrebbe trattarsi di una soluzione temporanea per consentire la migrazione a una soluzione moderna basata sul cloud o di una funzionalità permanente dell'infrastruttura IT della tua organizzazione.

In questo lab imparerai a creare un gruppo di endpoint di rete (NEG) utilizzando due macchine virtuali accessibili da un bilanciatore del carico globale HTTP(S) esterno. Sebbene il NEG nel lab si trovi all'interno di GCP, viene utilizzata la stessa procedura per comunicare con risorse pubbliche o on-premise con raggiungibilità IP.
Cosa imparerai a fare
- Crea un VPC personalizzato
- Crea due macchine virtuali (VM) utilizzate come gruppo di endpoint di rete (NEG)
- Crea un bilanciatore del carico ibrido, un servizio di backend e controlli di integrità associati
- Crea una regola firewall che consenta l'accesso al bilanciatore del carico
- Verranno creati Cloud Router e NAT per consentire gli aggiornamenti dei pacchetti da internet
- Convalida l'accessibilità del gruppo di endpoint di rete
Che cosa ti serve
- Conoscenza dei bilanciatori del carico
Configurazione dell'ambiente autonomo
- 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.



- Il nome del progetto è il tuo identificatore personale per questo progetto. Se rispetti le convenzioni di denominazione, puoi utilizzare qualsiasi nome e aggiornarlo in qualsiasi momento.
- L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato una volta impostato). La console Cloud 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" una volta creato il progetto.
- Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse Google Cloud.
L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Assicurati di seguire le istruzioni riportate nella sezione "Pulizia", che ti consiglia come arrestare le risorse in modo da non incorrere in addebiti oltre questo tutorial. 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:

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

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.
2. Prima di iniziare
In Cloud Shell, assicurati che l'ID progetto sia configurato.
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] Perform setting your projectID: projectid=YOUR-PROJECT-ID echo $projectid
3. Crea una nuova rete VPC in modalità personalizzata
In questa attività creerai un Virtual Private Cloud (VPC), la base della rete.
Rete VPC
Da Cloud Shell
gcloud compute networks create hybrid-network-lb --subnet-mode custom
Crea subnet
Da Cloud Shell
gcloud compute networks subnets create network-endpoint-group-subnet --network hybrid-network-lb --range 192.168.10.0/24 --region us-west1
Crea l'istanza Cloud NAT
Sebbene non sia un requisito per il networking ibrido, l'istanza di calcolo richiede la connettività a internet per scaricare applicazioni e aggiornamenti.
In questa attività creerai un'istanza Cloud Router e NAT che consente la connettività internet alle istanze VM.
Crea router Cloud
Da Cloud Shell
gcloud compute routers create crnat --network hybrid-network-lb --region us-west1
Crea Cloud NAT
Da Cloud Shell
gcloud compute routers nats create cloudnat --router=crnat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west1
4. Crea due istanze VM
In questa attività creerai due istanze VM che eseguono Apache. Più avanti nel lab, queste istanze VM diventeranno un gruppo di endpoint di rete (NEG).
Da Cloud Shell crea la prima istanza on-prem, on-prem-neg-1
gcloud compute instances create on-prem-neg-1 \
--zone=us-west1-a \
--tags=allow-health-check \
--image-family=debian-9 \
--image-project=debian-cloud \
--subnet=network-endpoint-group-subnet --no-address \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
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'
Da Cloud Shell crea la prima istanza on-prem, on-prem-neg-2
gcloud compute instances create on-prem-neg-2 \
--zone=us-west1-a \
--tags=allow-health-check \
--image-family=debian-9 \
--image-project=debian-cloud \
--subnet=network-endpoint-group-subnet --no-address \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
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'
5. Crea un NEG contenente l'endpoint on-premise
Innanzitutto, crea un NEG denominato on-prem-neg-1 e on-prem-neg-2. Specificherai anche che il bilanciamento del carico deve considerare che, ai fini del routing e del bilanciamento del carico, questi endpoint si trovano nella zona GCP us-west1-a. Ti consigliamo di configurare la zona in modo che corrisponda a qualsiasi zona associata alla regione del collegamento di interconnessione/gateway VPN per le misurazioni del bilanciamento del carico basate sulla prossimità utilizzate per il bilanciamento del carico.
Da Cloud Shell crea on-prem-neg-1
gcloud compute network-endpoint-groups create on-prem-neg-1 \
--network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
--zone "us-west1-a" \
--network hybrid-network-lb
Da Cloud Shell crea on-prem-neg-2
gcloud compute network-endpoint-groups create on-prem-neg-2 \
--network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
--zone "us-west1-a" \
--network hybrid-network-lb
Nel codelab, il gruppo di endpoint di rete è un'istanza GCE che esegue Apache in GCP. In alternativa, puoi specificare un endpoint on-premise o internet come endpoint di rete.
Da Cloud Shell, identifica gli indirizzi IP GCE
gcloud compute instances list | grep -i on-prem
Associa il gruppo di endpoint di rete all'indirizzo IP dell'istanza GCE identificato in precedenza nel passaggio precedente; per ogni NEG, on-prem-neg-1 & on-prem-neg-2.
Da Cloud Shell, associa on-prem-neg-1, aggiorna x.x.x.x con l'IP identificato
gcloud compute network-endpoint-groups update on-prem-neg-1 \
--zone="us-west1-a" \
--add-endpoint="ip=x.x.x.x,port=80"
Da Cloud Shell associa on-prem-neg-2, aggiorna x.x.x.x con l'IP identificato
gcloud compute network-endpoint-groups update on-prem-neg-2 \
--zone="us-west1-a" \
--add-endpoint="ip=x.x.x.x,port=80"
6. Crea il controllo di integrità HTTP, il servizio di backend e il firewall
In questo passaggio, creerai un servizio di backend globale denominato on-prem-backend-service. Questo servizio di backend definisce in che modo il tuo piano dati invierà il traffico al NEG.
Innanzitutto, crea un controllo di integrità denominato on-prem-health-check per monitorare l'integrità di tutti gli endpoint appartenenti a questo NEG (ovvero il tuo endpoint on-premise).
Da Cloud Shell
gcloud compute health-checks create http on-prem-health-check
Crea un servizio di backend denominato on-prem-backend-service e associalo al controllo di integrità.
Da Cloud Shell
gcloud compute backend-services create on-prem-backend-service \
--global \
--load-balancing-scheme=EXTERNAL \
--health-checks on-prem-health-check
Il bilanciatore del carico HTTP(S) esterno e il backend eseguono controlli di integrità provenienti dalle subnet 35.191.0.0/16 e 130.211.0.0/22; pertanto, è necessaria una regola firewall per consentire il routing dal bilanciatore del carico al backend.
Da Cloud Shell
gcloud compute firewall-rules create fw-allow-health-check \
--network=hybrid-network-lb \
--action=allow \
--direction=ingress \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--target-tags=allow-health-check \
--rules=tcp:80
7. Associa il NEG e il servizio di backend
Aggiungi il NEG on-prem-neg-1 a questo servizio di backend
Da Cloud Shell
gcloud compute backend-services add-backend on-prem-backend-service \
--global \
--network-endpoint-group on-prem-neg-1 \
--network-endpoint-group-zone us-west1-a \
--balancing-mode RATE \
--max-rate-per-endpoint 5
Aggiungi il NEG on-prem-neg-2 a questo servizio di backend
Da Cloud Shell
gcloud compute backend-services add-backend on-prem-backend-service \
--global \
--network-endpoint-group on-prem-neg-2 \
--network-endpoint-group-zone us-west1-a \
--balancing-mode RATE \
--max-rate-per-endpoint 5
Prenota un indirizzo IP statico IPv4 utilizzato per accedere all'endpoint di rete
Da Cloud Shell
gcloud compute addresses create hybrid-lb-ip --project=$projectid --global
Abbiamo terminato la configurazione della CLI. Completiamo la configurazione dalla console Cloud.
8. Crea il bilanciatore del carico HTTP esterno e associa il servizio di backend
Nella console cloud, vai a Bilanciamento del carico e seleziona Crea bilanciatore del carico.
Identifica il bilanciamento del carico HTTP(S) e fai clic su "Avvia configurazione".

Seleziona "Da internet alle mie VM" come nello screenshot riportato di seguito, che consente l'accesso pubblico alla tua VM

Fornisci "xlb" come nome del bilanciatore del carico e seleziona il servizio di backend creato in precedenza "on-prem-backend-service", quindi fai clic su "Ok" come nello screenshot fornito.

Seleziona Configurazione frontend, aggiorna il nome "xlb-fe" e seleziona l'indirizzo IPv4 statico creato in precedenza, assicurandoti di rispecchiare lo screenshot fornito 
Seleziona "Rivedi e finalizza" assicurandoti che corrisponda allo screenshot fornito e seleziona Crea.

Convalida dell'integrità del backend
Dalla console Cloud, assicurati che il backend "xlb" sia integro e verde, come mostrato nello screenshot fornito.

9. Convalida che il NEG sia raggiungibile da internet
Ricorda che l'indirizzo IP statico esterno utilizzato durante la creazione del bilanciatore del carico è ora l'IP frontend degli endpoint di rete. Eseguiamo una convalida dell'indirizzo IP prima di eseguire il test finale.
Da Cloud Shell
gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:
Output (il tuo indirizzo IP sarà diverso)
Output di Cloud Shell
$ gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress: IPAddress: 34.96.103.132
Utilizzando l'indirizzo IP frontend del bilanciatore del carico globale, puoi accedere al backend dell'endpoint di rete. Tieni presente che nel codelab l'endpoint è un'istanza GCE, ma lo utilizzeresti ad esempio con endpoint on-premise.
Dalla workstation locale, avvia un terminale ed esegui un comando curl sull'indirizzo IP del bilanciatore del carico
Dalla workstation esegui un comando curl sull'indirizzo IP frontend. Osserva il codice 200 OK e i dettagli della pagina costituiti dal nome e dalla regione dell'istanza NEG.
myworkstation$ curl -v 34.96.103.132
* Trying 34.96.103.132...
* TCP_NODELAY set
* Connected to 34.96.103.132 (34.96.103.132) port 80 (#0)
> GET / HTTP/1.1
> Host: 34.96.103.132
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 10 Aug 2021 01:21:54 GMT
< Server: Apache/2.4.25 (Debian)
< Last-Modified: Tue, 10 Aug 2021 00:35:41 GMT
< ETag: "24-5c929ae7384f4"
< Accept-Ranges: bytes
< Content-Length: 36
< Content-Type: text/html
< Via: 1.1 google
<
Page on on-prem-neg-2 in us-west1-a
* Connection #0 to host 34.96.103.132 left intact
* Closing connection 0
Complimenti, hai eseguito correttamente il deployment di un bilanciatore del carico ibrido di livello 7 con NEG
Congratulazioni per aver completato il codelab.
Argomenti trattati
- Crea un VPC personalizzato
- Crea due macchine virtuali (VM) utilizzate come gruppo di endpoint di rete (NEG)
- Crea un bilanciatore del carico ibrido, un servizio di backend e controlli di integrità associati
- Crea una regola firewall che consenta l'accesso al bilanciatore del carico
- Convalida l'accessibilità del gruppo di endpoint di rete
10. Procedura di pulizia
Dall'interfaccia utente della console Cloud, identifica e seleziona il bilanciatore del carico "xlb" ed eliminalo tramite Servizi di rete → Bilanciamento del carico. Una volta selezionati, seleziona "Servizio di backend on-premise" e "Controllo dell'integrità on-premise", quindi seleziona Elimina.

Dalla UI della console Cloud, vai a Compute Engine → Gruppi di endpoint di rete. Una volta selezionati, seleziona "on-prem-neg-1" e "on-prem-neg-2", quindi seleziona Elimina.

Da Cloud Shell elimina i componenti del lab
gcloud compute routers nats delete cloudnat --router=crnat --region us-west1 --quiet gcloud compute routers delete crnat --region us-west1 --quiet gcloud compute instances delete on-prem-neg-1 --zone=us-west1-a --quiet gcloud compute instances delete on-prem-neg-2 --zone=us-west1-a --quiet gcloud compute firewall-rules delete fw-allow-health-check --quiet gcloud compute networks subnets delete network-endpoint-group-subnet --region=us-west1 --quiet gcloud compute networks delete hybrid-network-lb --quiet gcloud compute addresses delete hybrid-lb-ip --global --quiet