Codelab sulle ottimizzazioni avanzate per il bilanciamento del carico

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

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 codelab e casi d'uso

2f7368df335d3de9.png

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

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.