Questo tutorial spiega come utilizzare il bilanciamento del carico con un gruppo di istanze gestite a livello di regione per reindirizzare il traffico lontano dalle istanze VM occupate o non disponibili, in modo da garantire un'alta affidabilità anche durante un'interruzione del servizio a livello di zona.
Un gruppo di istanze gestite a livello di regione distribuisce un'applicazione su più istanze in più zone. Un bilanciatore del carico globale indirizza il traffico in più regioni tramite un singolo indirizzo IP. Utilizzando entrambi i servizi per distribuire l'applicazione in più zone, puoi contribuire ad assicurarti che sia disponibile anche in casi estremi, come un'interruzione a livello di zona.
I bilanciatori del carico possono essere utilizzati per indirizzare diversi tipi di traffico. Questo tutorial mostra come creare un bilanciatore del carico globale che indirizzi il traffico HTTP esterno, ma gran parte dei contenuti di questo tutorial è comunque pertinente per altri tipi di bilanciatori del carico. Per scoprire di più su altri tipi di traffico che possono essere indirizzati con un bilanciatore del carico, consulta Tipi di Cloud Load Balancing.
Questo tutorial include i passaggi dettagliati per lanciare un'applicazione web su un gruppo di istanze gestite a livello di regione, configurare l'accesso alla rete, creare un bilanciatore del carico per indirizzare il traffico all'applicazione del servizio a livello di zona. A seconda della tua esperienza con queste funzionalità, il completamento di questo tutorial richiede circa 45 minuti.
Architettura dell'applicazione
L'applicazione include i seguenti componenti di Compute Engine:
- Rete VPC: una rete virtuale all'interno di Google Cloud in grado di fornire connettività globale utilizzando le proprie route e regole firewall.
- Regola firewall: un firewall di Google Cloudti permette di consentire o negare il traffico verso le tue istanze.
- Modello di istanza: un modello utilizzato per creare ogni istanza VM nel gruppo di istanze gestite.
- Gruppo di istanze gestite a livello di regione: un gruppo di istanze VM che eseguono la stessa applicazione in più zone.
- Indirizzo IP esterno statico globale: un indirizzo IP statico accessibile su reti esterne e che può essere collegato a una risorsa globale.
- Bilanciatore del carico globale: un bilanciatore del carico che consente di distribuire le istanze di backend in più regioni. Utilizza un bilanciatore del carico globale quando gli utenti devono accedere agli stessi contenuti e applicazioni e vuoi garantire l'accesso utilizzando un singolo indirizzo IP anycast.
- Controllo di integrità: una policy utilizzata dal bilanciatore del carico per valutare la reattività dell'applicazione su ogni istanza VM.
Avvio dell'applicazione web
Questo tutorial utilizza un'applicazione web archiviata su GitHub. Per scoprire di più sulle modalità di implementazione dell'applicazione, vedi il repository GoogleCloudPlatform/python-docs-samples su GitHub.
Avvia l'applicazione web su ogni VM di un gruppo di istanze includendo uno script di avvio in un modello di istanza. Inoltre, esegui il gruppo di istanze in una rete VPC dedicata per impedire alle regole firewall di questo tutorial di interferire con le risorse esistenti in esecuzione nel tuo progetto.
Crea una rete VPC
L'utilizzo di una rete VPC protegge le risorse esistenti nel progetto dall'essere influenzate dalle risorse che creerai per questo tutorial. Una rete VPC serve anche a limitare il traffico in entrata in modo che debba transitare per il bilanciatore del carico.
Crea una rete VPC per incapsulare le regole firewall per l'applicazione web dimostrativa:
Nella console Google Cloud , vai alla pagina Reti VPC.
Fai clic su Crea rete VPC.
In Nome, inserisci
web-app-vpc
.Imposta Modalità di creazione subnet su Personalizzata.
Crea una nuova subnet nel seguente modo:
- Nella sezione Subnet, imposta il campo Nome, inserisci
web-app-vpc-subnet
. - Nel menu a discesa Regione, seleziona us-central1.
- Assicurati che l'opzione Tipo di stack IP sia impostata su IPv4.
- Nella sezione Intervallo IPv4 principale, inserisci l'intervallo IPv4
10.2.0.0/24
.
- Nella sezione Subnet, imposta il campo Nome, inserisci
Nella parte inferiore della pagina, fai clic su Crea.
Attendi la creazione della rete VPC prima di continuare.
Crea una regola firewall
Dopo aver creato la rete VPC, configura una regola firewall per consentire il traffico HTTP alla rete VPC:
Nella console Google Cloud , vai alla pagina Firewall.
Fai clic su Crea regola firewall.
Nel campo Nome, inserisci
allow-web-app-http
.Imposta Rete su
web-app-vpc
.Assicurati che le seguenti opzioni siano impostate come indicato:
- L'opzione Direzione del traffico è impostata su In entrata.
- L'opzione Azione in caso di corrispondenza è impostata su Consenti.
Nel menu a discesa Destinazioni, seleziona Tutte le istanze nella rete.
Imposta Filtro di origine su
IPv4 ranges
.Nel campo Intervalli IP di origine, inserisci
130.211.0.0/22, 35.191.0.0/16
per consentire i controlli di integrità del bilanciatore del carico.In Protocolli e porte, segui questi passaggi:
- Seleziona Protocolli e porte specificati.
- Seleziona TCP.
- Nel campo Porte, inserisci
80
per consentire l'accesso per il traffico HTTP.
Fai clic su Crea.
Crea un modello di istanza
Crea un modello da utilizzare per creare un gruppo di istanze VM. Ogni istanza creata dal modello avvia un'applicazione web dimostrativa utilizzando uno script di avvio.
Nella console Google Cloud , vai alla pagina Template di istanza.
Fai clic su Crea modello istanza.
In Nome, inserisci
load-balancing-web-app-template
.In Configurazione macchina, imposta Tipo di macchina su
e2-medium
.Fai clic sulla sezione Opzioni avanzate per espanderla.
Fai clic sulla sezione Networking e segui questi passaggi:
- Nella sezione Interfacce di rete, elimina le interfacce di rete esistenti facendo clic sull'icona accanto a ciascuna.
- Fai clic su Aggiungi un'interfaccia di rete e poi seleziona la rete
web-app-vpc
. In questo modo, ogni istanza creata con questo modello verrà eseguita sulla rete creata in precedenza. - Nel menu a discesa Subnet, seleziona
web-app-vpc-subnet
. - Fai clic su Fine.
Fai clic sulla sezione Gestione e segui questi passaggi:
Nella sezione Automazione, inserisci il seguente script di avvio:
apt-get update apt-get -y install git python3-pip python3-venv git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git python3 -m venv venv ./venv/bin/pip3 install -Ur ./python-docs-samples/compute/managed-instances/demo/requirements.txt ./venv/bin/pip3 install gunicorn ./venv/bin/gunicorn --bind 0.0.0.0:80 app:app --daemon --chdir ./python-docs-samples/compute/managed-instances/demo
Lo script recupera, installa e avvia l'applicazione web all'avvio di un'istanza VM.
Lascia i valori predefiniti per le altre opzioni.
Fai clic su Crea.
Attendi il completamento della creazione del modello prima di continuare.
Crea un gruppo di istanze gestite a livello di regione
Per eseguire l'applicazione web, utilizza il modello di istanza per creare un gruppo di istanze gestite a livello di regione:
Nella console Google Cloud , vai alla pagina Gruppi di istanze.
Fai clic su Crea gruppo di istanze.
In Nome, inserisci
load-balancing-web-app-group
.In Modello di istanza, seleziona
load-balancing-web-app-template
.Imposta Numero di istanze su
6
. Se questo campo è disabilitato, disattiva prima la scalabilità automatica.Per disattivare la scalabilità automatica, vai alla sezione Scalabilità automatica. Nel menu a discesa Modalità di scalabilità automatica, seleziona Off: non scalare automaticamente.
In Località, seleziona Più zone.
In Regione, seleziona us-central1.
Per Zone, seleziona le seguenti zone dall'elenco a discesa:
- us-central1-b
- us-central1-c
- us-central1-f
Lascia i valori predefiniti per le altre opzioni.
Fai clic su Crea. Verrà visualizzata nuovamente la pagina Gruppi di istanze.
Potresti dover attendere alcuni minuti affinché tutte le istanze del gruppo siano in esecuzione.
Configurazione del bilanciatore del carico
Per utilizzare un bilanciatore del carico per indirizzare il traffico alla tua applicazione web, devi prenotare un indirizzo IP esterno per ricevere tutto il traffico in entrata. Quindi, crea un bilanciatore del carico che accetti il traffico da quell'indirizzo IP e reindirizzi il traffico al gruppo di istanze.
Prenota un indirizzo IP statico
Utilizza un indirizzo IP esterno statico globale per fornire al bilanciatore del carico un unico punto di accesso per la ricezione di tutto il traffico utente. Compute Engine conserva gli indirizzi IP statici anche se modifichi o elimini le risorse Google Cloud affiliate. In questo modo, l'applicazione web avrà sempre lo stesso punto di accesso, anche se altre parti della stessa possono cambiare.
Nella console Google Cloud , vai alla pagina Indirizzi IP.
Fai clic su Prenota indirizzo IP statico esterno.
Nel campo Nome, inserisci
web-app-ipv4
.Imposta Versione IP su IPv4.
Imposta Tipo su Globale.
Fai clic su Prenota.
Crea un bilanciatore del carico
Questa sezione illustra i passaggi necessari per creare un bilanciatore del carico globale che indirizzi il traffico HTTP.
Questo bilanciatore del carico utilizza un frontend per ricevere il traffico in entrata e un backend per distribuire questo traffico alle istanze integre. Poiché il bilanciatore del carico è costituito da più componenti, questa attività è suddivisa in cinque parti:
- Seleziona il tipo di bilanciatore del carico
- Assegna un nome al bilanciatore del carico
- Configura il frontend
- Configura il backend
- Esamina e finalizza
Completa tutte le parti per creare il bilanciatore del carico.
Seleziona il tipo di bilanciatore del carico
Nella console Google Cloud , vai alla pagina Bilanciamento del carico.
- Fai clic su Crea bilanciatore del carico.
- In Tipo di bilanciatore del carico, seleziona Bilanciatore del carico delle applicazioni (HTTP/HTTPS) e fai clic su Avanti.
- In Pubblico o interno, seleziona Pubblico (esterno) e fai clic su Avanti.
- In Deployment globale o in una regione singola, seleziona Ideale per workload globali e fai clic su Avanti.
- In Generazione del bilanciatore del carico, seleziona Bilanciatore del carico delle applicazioni esterno globale e fai clic su Avanti.
- Fai clic su Configura.
Assegna un nome al bilanciatore del carico
- Nel riquadro a sinistra, in Nome bilanciatore del carico, inserisci
web-app-load-balancer
.
Configura il frontend
- Nella pagina Configurazione frontend, in Nome, inserisci
web-app-ipv4-frontend
. - Imposta Protocollo su
HTTP
. - Imposta Versione IP su
IPv4
. - Imposta Indirizzo IP su
web-app-ipv4
. - Imposta Porta su
80
. - Fai clic su Fine per creare il frontend.
Configura il backend
- Nel riquadro a sinistra, fai clic su Configurazione backend.
- Fai clic sul menu a discesa Servizi e bucket di backend per aprire un menu, quindi fai clic su Crea un servizio di backend.
- Nella nuova finestra, come Nome del servizio di backend inserisci
web-app-backend
. - Nella sezione Backend, segui questi passaggi:
- Imposta Gruppo di istanze su
load-balancing-web-app-group
. - Imposta Numeri di porta su
80
. In questo modo, consenti il traffico HTTP tra il bilanciatore del carico e il gruppo di istanze. - In Modalità di bilanciamento, seleziona Utilizzo.
- Fai clic su Fine.
- Imposta Gruppo di istanze su
Crea il controllo di integrità per il backend del bilanciatore del carico nel seguente modo:
- Fai clic sul menu a discesa Controllo di integrità, quindi fai clic su Crea un controllo di integrità. Nella nuova finestra visualizzata,
- Nella nuova finestra, in Nome, inserisci
web-app-load-balancer-check
. - Imposta Protocollo su HTTP.
- In Porta, inserisci
80
. - Per questo tutorial, imposta Percorso richiesta su
/health
, un percorso a cui l'applicazione web dimostrativa è configurata per rispondere. Imposta i seguenti Criteri integrità:
- Imposta Intervallo di controllo su
3
secondi. Questa impostazione definisce l'intervallo di tempo dall'inizio di un probe all'inizio di quello successivo. - Imposta Timeout su
3
secondi. Questa impostazione definisce il tempo di attesa da parte di Google Cloud per una risposta a un probe. Il valore deve essere inferiore o uguale all'intervallo di controllo. - Imposta Soglia stato integro su
2
operazioni riuscite consecutive. Questa impostazione definisce il numero di probe sequenziali che devono riuscire affinché l'istanza sia considerata integra. - Imposta Soglia stato non integro su
2
errori consecutivi. Questa impostazione definisce il numero di probe sequenziali che non devono riuscire affinché l'istanza sia considerata non integra.
- Imposta Intervallo di controllo su
Fai clic su Crea per creare il controllo di integrità.
Lascia i valori predefiniti per le altre opzioni.
Fai clic su Crea per creare il servizio di backend.
Esamina e finalizza
Verifica le impostazioni di bilanciamento del carico prima di creare il bilanciatore del carico:
- Nel riquadro a sinistra della pagina Crea bilanciatore del carico delle applicazioni esterno globale, fai clic su Esamina e finalizza.
Nella pagina Esamina e finalizza, verifica che Frontend utilizzi un indirizzo IP con Protocollo
HTTP
.Nella stessa pagina, verifica le seguenti impostazioni di Backend:
- Servizio di backend =
web-app-backend
. - Protocollo endpoint =
HTTP
. - Controllo di integrità =
web-app-load-balancer-check
. - Gruppo di istanze =
load-balancing-web-app-group
.
- Servizio di backend =
Fai clic su Crea per completare la creazione del bilanciatore del carico.
Potrebbe essere necessario attendere alcuni minuti per il completamento della creazione del bilanciatore del carico.
testa il bilanciatore del carico
Verifica di essere in grado di connetterti all'applicazione web utilizzando il bilanciatore del carico nel seguente modo:
Nella console Google Cloud , vai alla pagina Bilanciamento del carico.
Nella colonna Nome, fai clic su
web-app-load-balancer
per espandere il bilanciatore del carico appena creato.Per connetterti all'app web utilizzando gli indirizzi IP statici esterni, segui questi passaggi:
- Nella sezione Frontend, copia l'indirizzo IP mostrato nella colonna IP:Porta.
Apri una nuova scheda del browser e incolla l'indirizzo IP nella barra degli indirizzi. Dovresti visualizzare l'applicazione web dimostrativa:
Tieni presente che ogni volta che aggiorni la pagina, il bilanciatore del carico si connette a istanze diverse in zone diverse. Questo accade perché non ti colleghi direttamente a un'istanza, ma al bilanciatore del carico, che seleziona l'istanza a cui ti reindirizza.
Al termine, chiudi la scheda del browser per l'applicazione web dimostrativa.
Simulazione di un'interruzione del servizio a livello di zona
Puoi osservare la funzionalità del bilanciatore del carico simulando la non disponibilità diffusa di un'interruzione del servizio a livello di zona. Questa simulazione forza tutte le istanze situate in una zona specificata a segnalare uno stato non integro nel percorso della richiesta /health
. Quando queste istanze segnalano uno stato non integro, non superano il controllo di integrità del bilanciamento del carico, il che fa sì che il bilanciatore del carico smetta di indirizzare il traffico a queste istanze.
Monitora le zone a cui il bilanciatore del carico indirizza il traffico.
Nella console Google Cloud , vai a Cloud Shell.
Cloud Shell si apre in un riquadro della consoleGoogle Cloud . L'inizializzazione della sessione può richiedere alcuni secondi.
Salva l'indirizzo IP esterno statico del bilanciatore del carico nel seguente modo:
Recupera l'indirizzo IP esterno dalla regola di forwarding frontend del bilanciatore del carico inserendo il seguente comando nel terminale:
gcloud compute forwarding-rules describe web-app-ipv4-frontend --global
L'output è simile al seguente. Copia
EXTERNAl_IP_ADDRESS
dall'output.IPAddress: EXTERNAl_IP_ADDRESS ...
Crea una variabile bash locale:
export LOAD_BALANCER_IP=EXTERNAl_IP_ADDRESS
Sostituisci
EXTERNAl_IP_ADDRESS
con l'indirizzo IP esterno che hai copiato.
Per monitorare le zone a cui il bilanciatore del carico indirizza il traffico, esegui lo script bash seguente:
while true do BODY=$(curl -s "$LOAD_BALANCER_IP") NAME=$(echo -n "$BODY" | grep "load-balancing-web-app-group" | perl -pe 's/.+?load-balancing-web-app-group-(.+?)<.+/\1/') ZONE=$(echo -n "$BODY" | grep "us-" | perl -pe 's/.+?(us-.+?)<.+/\1/') echo $ZONE sleep 2 # Wait for 2 seconds done
Questo script tenta continuamente di connettersi all'applicazione web utilizzando l'indirizzo IP per il frontend del bilanciatore del carico e offre come output la zona in cui è in esecuzione l'applicazione web per ogni connessione.
L'output risultante deve includere le zone
us-central1-b
,us-central1-c
eus-central1-f
:us-central1-f us-central1-b us-central1-c us-central1-f us-central1-f us-central1-c us-central1-f us-central1-c us-central1-c
Tieni aperto questo terminale.
Mentre il monitoraggio è in esecuzione, inizia a simulare l'interruzione di servizio a livello di zona.
- In Cloud Shell, apri una seconda sessione del terminale facendo clic sul pulsante Aggiungi.
Crea una variabile bash locale per l'ID progetto:
export PROJECT_ID=PROJECT_ID
dove
PROJECT_ID
è l'ID del progetto attuale, visualizzato su ogni nuova riga in Cloud Shell:user@cloudshell:~ (PROJECT_ID)$
Crea una variabile bash locale per la zona che vuoi disabilitare. Per simulare un errore della zona
us-central1-f
, utilizza il seguente comando:export DISABLE_ZONE=us-central1-f
Quindi, esegui lo script bash seguente. Questo script fa in modo che le istanze dell'applicazione web dimostrativa nella zona disabilitata generino risposte di non integrità al controllo di integrità del bilanciatore del carico. Le risposte di non integrità inducono il bilanciatore del carico a indirizzare il traffico lontano da queste istanze.
export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --filter="zone:($DISABLE_ZONE)" --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "load-balancing-web-app-group") for i in $MACHINES; do NAME=$(echo "$i" | cut -f1 -d,) IP=$(echo "$i" | cut -f2 -d,) echo "Simulating zonal failure for zone $DISABLE_ZONE, instance $NAME" curl -q -s "http://$IP/makeUnhealthy" >/dev/null --retry 2 done
Dopo un breve ritardo, il bilanciatore del carico smette di indirizzare il traffico alle zone non integre, quindi l'output della prima finestra del terminale smette di elencare la zona
us-central1-f
:us-central1-c us-central1-c us-central1-c us-central1-b us-central1-b us-central1-c us-central1-b us-central1-c us-central1-c
Ciò indica che il bilanciatore del carico indirizza il traffico solo alle istanze integre e attive.
Tieni aperti entrambi i terminali.
Nel secondo terminale, crea una variabile bash locale per la zona che vuoi ripristinare. Per ripristinare il traffico nella zona
us-central1-f
, utilizza il seguente comando:export ENABLE_ZONE=us-central1-f
Quindi, esegui lo script bash seguente. Questo script fa in modo che le istanze dell'applicazione web dimostrativa nella zona abilitata generino risposte di integrità al controllo di integrità del bilanciatore del carico. Le risposte di integrità inducono il bilanciatore del carico a iniziare a distribuire nuovamente il traffico verso queste istanze.
export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --filter="zone:($ENABLE_ZONE)" --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "load-balancing-web-app-group") for i in $MACHINES; do NAME=$(echo "$i" | cut -f1 -d,) IP=$(echo "$i" | cut -f2 -d,) echo "Simulating zonal restoration for zone $ENABLE_ZONE, instance $NAME" curl -q -s "http://$IP/makeHealthy" >/dev/null --retry 2 done
Dopo alcuni minuti, l'output della prima finestra del terminale elenca gradualmente di nuovo la zona
us-central1-f
:us-central1-b us-central1-b us-central1-c us-central1-f us-central1-c us-central1-c us-central1-b us-central1-c us-central1-f
Ciò indica che il bilanciatore del carico indirizza nuovamente il traffico in entrata a tutte le zone.
Al termine, chiudi entrambi i terminali.