Codelab sulle ottimizzazioni avanzate per il bilanciamento del carico

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).

c3fb1d3f027e8640.png

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

2f7368df335d3de9.png

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

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.