1. Introduzione
Ti diamo il benvenuto nel codelab sulle ottimizzazioni del bilanciamento del carico avanzate.
In questo codelab imparerai a configurare opzioni avanzate di bilanciamento del carico per il bilanciatore del carico delle applicazioni esterno globale. Prima di iniziare, ti consigliamo di consultare la documentazione relativa al bilanciamento del carico su 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 codelab e casi d'uso
Figura 2. Topologia di routing del bilanciatore del carico HTTP
Durante questo lab di codice configurerai due gruppi di istanze gestite. Creerai un bilanciatore del carico https esterno globale. Il bilanciatore del carico utilizzerà diverse funzionalità dall'elenco delle funzionalità avanzate supportate dal bilanciatore del carico basato su Envoy. Una volta eseguito il deployment, genererai un carico simulato e verificherai 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 bilanciatore del carico HTTPs esterno con il codelab per la gestione avanzata del traffico (Envoy) (https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Ti consigliamo di leggere prima questa pagina.
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
Attivare 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
Creare regole firewall VPC
Dopo aver creato il VPC, creerai una regola firewall. La regola del 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. Creeremo quindi 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 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 avere un ambito a livello di zona o di regione. Per questo esercizio del lab creeremo gruppi di istanze gestite zonali.
In questa sezione puoi vedere uno script di avvio predefinito 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 copione.
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 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 creati 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 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 la funzionalità del server web
Ogni istanza è configurata per eseguire un server web Apache con un semplice script PHP che restituisce qualcosa di 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 relative definizioni del gruppo di istanze.
Ora effettua una richiesta web nel tuo browser per assicurarti che il server web sia in esecuzione (l'avvio potrebbe richiedere un minuto). Nella pagina Istanze VM in Compute Engine, seleziona un'istanza creata dal gruppo di istanze e fai clic sul relativo indirizzo IP esterno (pubblico).
In alternativa, nel browser, vai all'indirizzo http://<IP_Address>
5. Configura il bilanciatore del carico
Creare un controllo di integrità
Innanzitutto dobbiamo creare un controllo di integrità di base per assicurarci che i nostri servizi siano operativi. Verrà creato un controllo di integrità di base. 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
Prenotare un indirizzo IP esterno
Per questo passaggio dovrai prenotare un indirizzo IP statico disponibile a livello globale che verrà successivamente collegato 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
Aggiungere i gruppi di istanze gestite ai servizi di backend
Ora che abbiamo creato i servizi di backend, dobbiamo aggiungere i gruppi di istanze gestite che abbiamo creato in precedenza a ciascun servizio di backend.
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
Creare una 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
Creare il frontend HTTP
Il passaggio finale per creare il bilanciatore del carico è creare il 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
Successivamente, devi creare una regola di inoltro globale che mappa 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. Verificare il funzionamento del bilanciatore del carico
Per verificare il funzionamento della funzionalità di bilanciamento del carico, devi generare un po' di carico. A tale scopo, creeremo una nuova VM per simulare il carico.
Crea Siege-vm
Ora crea la VM siege 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
Successivamente, potrai accedere tramite SSH alla VM che hai creato. Una volta creato, fai clic su SSH per avviare un terminale e stabilire la connessione.
Dopo aver stabilito la connessione, esegui il seguente 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 l'attacco è in esecuzione, è il momento di verificare che il traffico venga distribuito equamente ai due gruppi di istanze gestite.
Ferma l'assedio
Ora che hai dimostrato che la suddivisione avanzata del traffico funziona, è il momento di fermare l'assedio. Per farlo, torna al terminale SSH di siege-vm e premi CTRL+C per interrompere l'esecuzione di siege.
7. Configura criterio Lb di servizio
Creare un criterio LB di servizio
Ora che l'impostazione di base è stata completata, creeremo un criterio LB di 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 un criterio per esercitare la funzionalità di svuotamento 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 il nostro criterio sia stato creato correttamente con il seguente comando gcloud:
Da Cloud Shell
gcloud beta network-services service-lb-policies list --location=global
Output
NAME http-policy
Collegare il criterio di bilanciamento del carico del servizio al servizio di backend
Ora collegheremo il nuovo criterio al servizio di backend esistente sopra indicato.
Da Cloud Shell
gcloud beta compute backend-services update east-backend-service \ --service-lb-policy=http-policy --global
8. Modifica lo stato 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. Tuttavia, nell'ambito del codelab, apporteremo anche altre modifiche alla produzione per mostrarti come funzionano le nuove norme.
La funzionalità di scarico automatico della capacità rimuove automaticamente un MIG di backend dal bilanciatore del carico quando il numero totale di backend funzionanti scende al di sotto di una determinata soglia (25%). Per testare questa funzionalità, accederemo tramite SSH alle VM in us-east1-b-mig e le renderemo non attive. Con la soglia del 25%, dovrai accedere tramite SSH a quattro delle VM e arrestare il server Apache.
Per farlo, scegli quattro VM e accedi tramite SSH facendo clic sull'SSH per avviare un terminale e stabilire la connessione. Quindi, esegui il comando seguente.
sudo apachectl stop
A questo punto, verrà attivata la funzionalità di esaurimento automatico della capacità e us-east1-b-mig non riceverà nuove richieste.
9. Verifica che la funzionalità di svuotamento automatico della capacità sia funzionante
Riavviare l'assedio
Per verificare la nuova funzionalità, riutilizzeremo la VM di assedio. Connettiti tramite SSH alla VM creata nel passaggio precedente. Una volta creato, fai clic su SSH per avviare un terminale e stabilire la connessione.
Dopo aver stabilito la connessione, esegui il seguente 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 del traffico avanzata funziona, è il momento di interrompere l'assedio. Per farlo, torna al terminale SSH di siege-vm e premi Ctrl+C per arrestare la siege.
10. Procedura di pulizia
Ora che abbiamo terminato con l'ambiente del lab, è il momento di rimuoverlo. 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!
Complimenti per aver completato il codelab.
Argomenti trattati
- Creazione di un bilanciatore del carico delle applicazioni esterno con il criterio 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 lb del servizio.