Utilizzo del bilanciatore del carico ibrido HTTP(s) esterno per raggiungere un gruppo di endpoint di rete

1. Introduzione

Una strategia ibrida è una soluzione pragmatica per adattarsi alle mutevoli richieste del mercato e modernizzare in modo incrementale le applicazioni. Il supporto ibrido per i bilanciatori del carico HTTP(s) esterni e interni di Google Cloud estende il bilanciamento del carico del cloud ai backend che risiedono on-prem e in altri cloud ed è un abilitatore chiave per la tua strategia ibrida. Potrebbe trattarsi di una situazione temporanea per consentire la migrazione a una soluzione moderna basata su cloud o a un impianto permanente dell'infrastruttura IT della tua organizzazione.

3312e69c63b02f73.png

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. Anche se il NEG nel lab si trova all'interno di Google Cloud, viene utilizzata la stessa procedura per comunicare con risorse pubbliche o on-premise con connettività IP.

Cosa imparerai a fare

  • Crea un VPC personalizzato
  • Creare due macchine virtuali (VM) utilizzate come gruppo di endpoint di rete (NEG)
  • Crea un bilanciatore del carico ibrido, un servizio di backend e i controlli di integrità associati
  • Crea una regola firewall che consenta l'accesso al bilanciatore del carico
  • Il router Cloud e NAT verranno creati per consentire gli aggiornamenti dei pacchetti da internet
  • Convalida della connettività del gruppo di endpoint di rete

Che cosa ti serve

  • Conoscenza dei bilanciatori del carico

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

  • Il Nome progetto è il tuo identificatore personale per questo progetto. Se segui le convenzioni di denominazione, puoi utilizzare tutto ciò che desideri 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 importa cosa sia. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che solitamente è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro a caso oppure puoi fare un tentativo personalizzato e controllare se è disponibile. Poi c'è "congelato" una volta creato il progetto.
  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.

2. Prima di iniziare

All'interno di 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 un'istanza Cloud NAT

Sebbene non sia un requisito per il networking ibrido, l'istanza Compute richiede una connettività a internet per scaricare applicazioni e aggiornamenti.

In questa attività creerai un router Cloud e un'istanza NAT che consentirà 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 il tuo endpoint on-premise

Innanzitutto, crea un NEG denominato on-prem-neg-1 e on-prem-neg-2. È inoltre possibile specificare che il bilanciatore del carico deve considerare che, ai fini del routing e del bilanciamento del carico, questi endpoint si trovano nella zona Google Cloud us-west1-a. Consigliamo che la zona configurata corrisponda a qualsiasi zona associata alla regione del collegamento di interconnessione/gateway VPN per le misurazioni del bilanciamento del carico basato 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 Google Cloud. 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

Associare il gruppo di endpoint di rete all'indirizzo IP dell'istanza GCE precedentemente identificato nel passaggio precedente. per ogni negativo, 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 firewall

In questo passaggio creerai un servizio di backend globale denominato on-prem-backend-service. Questo servizio di backend definisce il modo in cui il 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 che appartengono a questo NEG (ovvero il tuo endpoint on-premise).

Da Cloud Shell

gcloud compute health-checks create http on-prem-health-check

Creare un servizio di backend chiamato on-prem-backend-service e associarlo 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 e il backend HTTP(S) esterni 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 al bilanciatore del carico di eseguire il routing del 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

Prenotare un indirizzo IP statico IPv4 usato per accedere al tuo endpoint di rete

Da Cloud Shell

gcloud compute addresses create hybrid-lb-ip --project=$projectid --global

Abbiamo terminato la configurazione dell'interfaccia a riga di comando. Completiamo la configurazione dalla console Cloud.

8. crea il bilanciatore del carico HTTP esterno e associare il servizio di backend

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

70ccd168957e89d9.png

Seleziona "Da internet alle mie VM". nello screenshot seguente che consente l'accesso pubblico alla VM

a55cd31dbeadfecc.png

Fornisci "xlb" come nome del bilanciatore del carico e seleziona il servizio di backend creato in precedenza "on-prem-backend-service" poi "ok" secondo lo screenshot fornito

f1589df43bf9e3e8.png

Seleziona Configurazione frontend e aggiorna il nome "xlb-fe" e seleziona l'indirizzo IPv4 statico creato in precedenza, assicurati di eseguire il mirroring dello screenshot fornito b47cd48c7c1ccfc3.png

Seleziona "Esamina e finalizza" successivamente per abbinare lo screenshot fornito e selezionare Crea

bfa39f7dc3ad91e1.png

Convalida dell'integrità del backend

Dalla console Cloud, assicurati che il backend "xlb" sia integro, verde come nello screenshot fornito

131bbfc955d6166c.png

9. Verifica 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 da Cloudshell

$ 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 useresti, ad esempio, con gli endpoint on-premise.

Dalla tua workstation locale, avvia un terminale ed esegui un comando curl verso l'indirizzo IP del bilanciatore del carico

Dalla tua workstation esegui un comando curl sull'indirizzo IP del frontend. Osserva 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 L7 con NEG

Complimenti per aver completato il codelab.

Argomenti trattati

  • Crea un VPC personalizzato
  • Creare due macchine virtuali (VM) utilizzate come gruppo di endpoint di rete (NEG)
  • Crea un bilanciatore del carico ibrido, un servizio di backend e i controlli di integrità associati
  • Crea una regola firewall che consenta l'accesso al bilanciatore del carico
  • Convalida della connettività del gruppo di endpoint di rete

10. Passaggi per la pulizia

Dall'interfaccia utente della console Cloud, identifica e seleziona "xlb" bilanciatore del carico e seleziona Elimina tramite Servizi di rete → Bilanciamento del carico. Una volta selezionato, seleziona "On-premise-backend service" &amp; ‘on-premise-health-check&#39; quindi seleziona Elimina

53d7463fe354fe66.png

Dall'interfaccia utente della console Cloud, vai a Compute Engine → Gruppi di endpoint di rete. Una volta selezionato, seleziona "on-prem-neg-1". &amp; ‘on-prem-neg-2&#39; quindi seleziona Elimina

4d8f04264b44d03c.png

Elimina i componenti del lab di Cloud Shell

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