1. Introduzione
Ti diamo il benvenuto nel codelab sulle ottimizzazioni avanzate del bilanciamento del carico.
In questo codelab imparerai a configurare le opzioni avanzate di bilanciamento del carico per il bilanciatore del carico delle applicazioni esterno globale. Prima di iniziare, ti consigliamo di consultare il documento sul bilanciamento del carico cloud ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).

Figura 1. Il flusso di lavoro per la scelta di un endpoint di destinazione con il bilanciatore del carico delle applicazioni esterno globale.
Topologia e casi d'uso del codelab

Figura 2. Topologia di routing del bilanciatore del carico HTTP
Durante questo code lab configurerai due gruppi di istanze gestite. Creerai un bilanciatore del carico HTTPS esterno globale. Il bilanciatore del carico utilizzerà diverse funzionalità dell'elenco delle funzionalità avanzate supportate dal bilanciatore del carico basato su Envoy. Una volta eseguito il deployment, genera un carico simulato e verifica che le configurazioni impostate funzionino correttamente.
Cosa imparerai a fare
- Come configurare ServiceLbPolicy per ottimizzare il bilanciatore del carico.
Che cosa ti serve
- Conoscenza del bilanciamento del carico HTTPS esterno. La prima metà di questo codelab è molto simile al codelab su HTTPs LB esterno con Advanced Traffic Management (Envoy) ( https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Ti consigliamo di farlo prima di iniziare.
2. Prima di iniziare
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
Abilita le API
Attiva tutti i servizi necessari
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com gcloud services enable networkservices.googleapis.com
3. crea la rete VPC
Crea una rete VPC
Da Cloud Shell
gcloud compute networks create httplbs --subnet-mode=auto
Output
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs]. NAME SUBNET_MODE BGP_ROUTING_MODE IPV4_RANGE GATEWAY_IPV4 httplbs AUTO REGIONAL
Crea regole firewall VPC
Dopo aver creato il VPC, ora creerai una regola firewall. La regola firewall verrà utilizzata per consentire a tutti gli IP di accedere all'IP esterno del sito web dell'applicazione di test sulla porta 80 per il traffico HTTP.
Da Cloud Shell
gcloud compute firewall-rules create httplb-allow-http-rule \ --allow tcp:80 \ --network httplbs \ --source-ranges 0.0.0.0/0 \ --priority 700
Output
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED httplb-allow-http-rule httplbs INGRESS 700 tcp:80 False
In questo codelab, modificheremo l'integrità delle VM. Pertanto, creeremo anche regole firewall per consentire SSH.
Da Cloud Shell
gcloud compute firewall-rules create fw-allow-ssh \
--network=httplbs \
--action=allow \
--direction=ingress \
--target-tags=allow-ssh \
--rules=tcp:22
Output
Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/fw-allow-ssh]. Creating firewall...done. NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED fw-allow-ssh httplbs INGRESS 1000 tcp:22 False
4. Configura i gruppi di istanze gestite
Devi configurare i gruppi di istanze gestite che includono i pattern per le risorse di backend utilizzate dal bilanciatore del carico HTTP. Innanzitutto, creeremo i modelli di istanza che definiscono la configurazione delle VM da creare per ogni regione. Successivamente, per un backend in ogni regione, creeremo un gruppo di istanze gestite che fa riferimento a un modello di istanza.
I gruppi di istanze gestite possono essere di ambito zonale o regionale. Per questo esercizio di lab creeremo gruppi di istanze gestite zonali.
In questa sezione, puoi vedere uno script di avvio pre-creato a cui verrà fatto riferimento al momento della creazione dell'istanza. Questo script di avvio installa e attiva le funzionalità del server web che utilizzeremo per simulare un'applicazione web. Puoi esaminare il codice dello script.
Crea i modelli di istanza
Il primo passaggio consiste nel creare un modello di istanza.
Da Cloud Shell
gcloud compute instance-templates create test-template \
--network=httplbs \
--tags=allow-ssh,http-server \
--image-family=debian-9 \
--image-project=debian-cloud \
--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)"
echo "Page served from: $vm_hostname" | \
tee /var/www/html/index.html
systemctl restart apache2'
Output
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
Ora puoi verificare che i nostri modelli di istanza siano stati creati correttamente con il seguente comando gcloud:
Da Cloud Shell
gcloud compute instance-templates list
Output
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP test-template n1-standard-1 2021-11-09T09:24:35.275-08:00
Crea i gruppi di istanze
Ora dobbiamo creare un gruppo di istanze gestite dai modelli di istanza che abbiamo creato in precedenza.
Da Cloud Shell
gcloud compute instance-groups managed create us-east1-a-mig \ --size=1 \ --template=test-template \ --zone=us-east1-a
Output
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instanceGroupManagers/us-east1-a-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-a-mig us-east1-a zone us-east1-a-mig 0 1 test-template no
Da Cloud Shell
gcloud compute instance-groups managed create us-east1-b-mig \ --size=5 \ --template=test-template \ --zone=us-east1-b
Output
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-b-mig]. NAME LOCATION SCOPE BASE_INSTANCE_NAME SIZE TARGET_SIZE INSTANCE_TEMPLATE AUTOSCALED us-east1-b-mig us-east1-b zone us-east1-b-mig 0 5 test-template no
Possiamo verificare che i nostri gruppi di istanze siano stati creati correttamente con il seguente comando gcloud:
Da Cloud Shell
gcloud compute instance-groups list
Output
NAME LOCATION SCOPE NETWORK MANAGED INSTANCES us-east1-a-mig us-east1-a zone httplbs Yes 1 us-east1-b-mig us-east1-b zone httplbs Yes 5
Verifica della funzionalità del server web
Ogni istanza è configurata per eseguire un server web Apache con un semplice script PHP che esegue il rendering di un risultato simile al seguente:
Pagina pubblicata da: us-east1-a-mig-ww2h
Per assicurarti che i server web funzionino correttamente, vai a Compute Engine -> Istanze VM. Assicurati che le nuove istanze (ad es. us-east1-a-mig-xxx) siano state create in base alle definizioni del gruppo di istanze.
Ora, effettua una richiesta web nel browser per assicurarti che il server web sia in esecuzione (l'avvio potrebbe richiedere un minuto). Nella pagina delle istanze VM in Compute Engine, seleziona un'istanza creata dal gruppo di istanze e fai clic sul relativo IP esterno (pubblico).
In alternativa, nel browser, vai all'indirizzo http://<IP_Address>.
5. Configura il bilanciatore del carico
Crea controllo di integrità
Innanzitutto, dobbiamo creare un controllo di integrità di base per assicurarci che i nostri servizi siano attivi e funzionanti. Creeremo un controllo di integrità di base, ma sono disponibili molte altre personalizzazioni avanzate.
Da Cloud Shell
gcloud compute health-checks create http http-basic-check \
--port 80
Output
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check]. NAME PROTOCOL http-basic-check HTTP
Prenota l'indirizzo IP esterno
Per questo passaggio, devi prenotare un indirizzo IP statico disponibile a livello globale che verrà collegato in un secondo momento al bilanciatore del carico.
Da Cloud Shell
gcloud compute addresses create lb-ipv4-2 \
--ip-version=IPV4 \
--global
Output
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].
Assicurati di prendere nota dell'indirizzo IP riservato.
gcloud compute addresses describe lb-ipv4-2 \
--format="get(address)" \
--global
Crea servizi di backend
Ora dobbiamo creare un servizio di backend per i gruppi di istanze gestite che abbiamo creato in precedenza.
Da Cloud Shell
gcloud compute backend-services create east-backend-service \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTP \
--port-name=http \
--health-checks=http-basic-check \
--global
Output
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service]. NAME BACKENDS PROTOCOL east-backend-service HTTP
Aggiungi MIG ai servizi di backend
Ora che abbiamo creato i servizi di backend, dobbiamo aggiungere a ciascuno di essi i gruppi di istanze gestite che abbiamo creato in precedenza.
Da Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global
Da Cloud Shell
gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global
Puoi verificare che i backend siano stati aggiunti eseguendo il seguente comando.
Da Cloud Shell
gcloud compute backend-services list
Output
NAME BACKENDS PROTOCOL east-backend-service us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig HTTP
Crea mappa URL
Ora creeremo una mappa URL.
gcloud compute url-maps create web-map-http \
--default-service=east-backend-service \
--global
Output
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http]. NAME DEFAULT_SERVICE web-map-http backendServices/east-backend-service
Crea frontend HTTP
Il passaggio finale nella creazione del bilanciatore del carico è la creazione del frontend. In questo modo, l'indirizzo IP che hai prenotato in precedenza verrà mappato alla mappa URL del bilanciatore del carico che hai creato.
Da Cloud Shell
gcloud compute target-http-proxies create http-lb-proxy-adv \
--url-map=web-map-http
Output
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpProxies/http-lb-proxy-adv]. NAME URL_MAP http-lb-proxy-adv web-map-http
A questo punto, devi creare una regola di forwarding globale che mapperà l'indirizzo IP prenotato in precedenza al proxy HTTP.
Da Cloud Shell
gcloud compute forwarding-rules create http-content-rule \
--load-balancing-scheme EXTERNAL_MANAGED \
--address=lb-ipv4-2 \
--global \
--target-http-proxy=http-lb-proxy-adv \
--ports=80
A questo punto, puoi verificare che il bilanciatore del carico funzioni con l'indirizzo IP che hai annotato in precedenza.
6. Verifica che il bilanciatore del carico funzioni
Per verificare che la funzionalità di bilanciamento del carico funzioni, devi generare un po' di carico. A questo scopo, creeremo una nuova VM per simulare il carico.
Crea Siege-vm
Ora creerai la VM siege-vm che utilizzerai per generare il carico.
Da Cloud Shell
gcloud compute instances create siege-vm \
--network=httplbs \
--zone=us-east1-a \
--machine-type=e2-medium \
--tags=allow-ssh,http-server \
--metadata=startup-script='sudo apt-get -y install siege'
Output
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-a/instances/siege-vm]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS siege-vm us-central1-ir1 e2-medium 10.132.0.15 34.143.20.68 RUNNING
A questo punto puoi connetterti alla VM che hai creato tramite SSH. Una volta creato, fai clic su SSH per avviare un terminale e stabilire una connessione.
Una volta connesso, esegui questo comando per generare il carico. Utilizza l'indirizzo IP che hai prenotato in precedenza per il bilanciatore del carico HTTP esterno.
Da Cloud Shell
siege -c 20 http://$lb-ipv4-2
Output
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
Controlla la distribuzione del carico
Ora che Siege è in esecuzione, è il momento di verificare che il traffico venga distribuito equamente ai due gruppi di istanze gestite.
Stop the Siege
Ora che hai dimostrato che la suddivisione avanzata del traffico funziona, è il momento di interrompere l'attacco. Per farlo, torna al terminale SSH di siege-vm e premi CTRL+C per arrestare l'esecuzione di siege.
7. Configura la policy di bilanciamento del carico del servizio
Creare una policy di bilanciamento del carico del servizio
Ora che l'impostazione di base è stata completata, creeremo una policy di bilanciamento del carico del servizio e proveremo le funzionalità avanzate. Ad esempio, configureremo il servizio in modo che utilizzi alcune impostazioni avanzate di bilanciamento del carico. In questo esempio, creeremo solo una policy per utilizzare la funzionalità di esaurimento automatico della capacità. Ma non esitare a provare altre funzionalità.
Da Cloud Shell
gcloud beta network-services service-lb-policies create http-policy \
--auto-capacity-drain --location=global
Possiamo verificare che la nostra policy sia stata creata correttamente con il seguente comando gcloud:
Da Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
Output
NAME http-policy
Collega la policy di bilanciamento del carico del servizio al servizio di backend
Ora collegheremo la nuova policy al servizio di backend esistente sopra.
Da Cloud Shell
gcloud beta compute backend-services update east-backend-service \
--service-lb-policy=http-policy --global
8. Modificare lo stato di integrità del backend
A questo punto, la nuova policy di bilanciamento del carico del servizio è stata applicata al servizio di backend. Quindi, tecnicamente puoi passare direttamente alla pulizia. Nell'ambito del codelab, però, apporteremo anche alcune modifiche aggiuntive alla produzione per mostrarti come funzionano le nuove norme.
La funzionalità di riduzione automatica della capacità rimuove automaticamente un gruppo di istanze gestite di backend dal bilanciatore del carico quando il numero totale di backend integri scende al di sotto di una determinata soglia (25%). Per testare questa funzionalità, accederemo tramite SSH alle VM nel gruppo di istanze gestite us-east1-b e le renderemo non integre. Con la soglia del 25%, dovrai accedere tramite SSH a quattro VM e arrestare il server Apache.
Per farlo, scegli quattro VM e connettiti tramite SSH facendo clic su SSH per avviare un terminale e stabilire la connessione. Quindi esegui questo comando.
sudo apachectl stop
A questo punto, la funzionalità di esaurimento automatico della capacità verrà attivata e us-east1-b-mig non riceverà nuove richieste.
9. Verificare il funzionamento della funzionalità di scaricamento automatico della capacità
Riavviare l'assedio
Per verificare la nuova funzionalità, riutilizzeremo la VM di attacco. Connettiamoci alla VM creata nel passaggio precedente tramite SSH. Una volta creato, fai clic su SSH per avviare un terminale e stabilire una connessione.
Una volta connesso, esegui questo comando per generare il carico. Utilizza l'indirizzo IP che hai prenotato in precedenza per il bilanciatore del carico HTTP esterno.
Da Cloud Shell
siege -c 20 http://$lb-ipv4-2
Output
New configuration template added to /home/cloudcurriculumdeveloper/.siege Run siege -C to view the current settings in that file
A questo punto, noterai che tutte le richieste vengono inviate a us-east1-a-mig.
Stop the Siege
Ora che hai dimostrato che la suddivisione avanzata del traffico funziona, è il momento di interrompere l'attacco. Per farlo, torna al terminale SSH di siege-vm e premi CTRL+C per arrestare l'esecuzione di siege.
10. Procedura di pulizia
Ora che abbiamo terminato con l'ambiente del lab, è il momento di smantellarlo. Esegui i seguenti comandi per eliminare l'ambiente di test.
Da Cloud Shell
gcloud compute instances delete siege-vm --zone=us-east1-a gcloud compute forwarding-rules delete http-content-rule --global gcloud compute target-http-proxies delete http-lb-proxy-adv gcloud compute url-maps delete web-map-http gcloud compute backend-services delete east-backend-service --global gcloud compute addresses delete lb-ipv4-2 --global gcloud compute health-checks delete http-basic-check gcloud beta network-services service-lb-policies delete http-policy --location=global gcloud compute instance-groups managed delete us-east1-a-mig --zone=us-east1-a gcloud compute instance-groups managed delete us-east1-b-mig --zone=us-east1-b gcloud compute instance-templates delete test-template gcloud compute firewall-rules delete httplb-allow-http-rule gcloud compute firewall-rules delete fw-allow-ssh gcloud compute networks delete httplbs
11. Complimenti!
Congratulazioni per aver completato il codelab.
Argomenti trattati
- Creazione di un bilanciatore del carico delle applicazioni esterno con policy di bilanciamento del carico del servizio.
- Configura il servizio di backend con la funzionalità di svuotamento automatico della capacità.
Passaggi successivi
- Prova altre funzionalità fornite dal criterio del bilanciamento del carico del servizio.