Atelier de programmation sur les optimisations avancées de l'équilibrage de charge

1. Introduction

Bienvenue dans l'atelier de programmation sur les optimisations avancées de l'équilibrage de charge.

Dans cet atelier de programmation, vous allez apprendre à configurer des options d'équilibrage de charge avancées pour l'équilibreur de charge d'application externe global. Avant de commencer, nous vous recommandons de consulter le document sur l'équilibrage de charge cloud ( https://cloud.google.com/load-balancing/docs/load-balancing-overview).

c3fb1d3f027e8640.png

Figure 1. Workflow de sélection d'un point de terminaison de destination avec l'équilibreur de charge d'application externe mondial.

Topologie et cas d'utilisation de l'atelier de programmation

2f7368df335d3de9.png

Figure 2 : Topologie de routage de l'équilibreur de charge HTTP

Au cours de cet atelier de programmation, vous allez configurer deux groupes d'instances gérés. Vous allez créer un équilibreur de charge HTTPS externe global. L'équilibreur de charge utilisera plusieurs fonctionnalités de la liste des fonctionnalités avancées compatibles avec l'équilibreur de charge basé sur Envoy. Une fois déployé, vous générerez une charge simulée et vérifierez que les configurations que vous avez définies fonctionnent correctement.

Points abordés

  • Comment configurer ServiceLbPolicy pour affiner votre équilibreur de charge.

Prérequis

  • Connaissances sur l'équilibrage de charge HTTPS externe. La première moitié de cet atelier de programmation est assez semblable à l'atelier de programmation sur l'équilibreur de charge HTTP(S) externe avec gestion avancée du trafic (Envoy) (https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Nous vous recommandons de le consulter en premier.

2. Avant de commencer

Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

Activer les API

Activez tous les services nécessaires.

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. Créer le réseau VPC

Créer un réseau VPC

Depuis Cloud Shell

gcloud compute networks create httplbs --subnet-mode=auto

Sortie

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

Créer des règles de pare-feu VPC

Après avoir créé le VPC, vous allez maintenant créer une règle de pare-feu. La règle de pare-feu sera utilisée pour autoriser toutes les adresses IP à accéder à l'adresse IP externe du site Web de l'application test sur le port 80 pour le trafic HTTP.

Depuis 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

Sortie

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

Dans cet atelier de programmation, nous allons modifier l'état de santé des VM. Nous allons donc également créer des règles de pare-feu pour autoriser SSH.

Depuis Cloud Shell

gcloud compute firewall-rules create fw-allow-ssh \
    --network=httplbs \
    --action=allow \
    --direction=ingress \
    --target-tags=allow-ssh \
    --rules=tcp:22

Sortie

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. Configurer les groupes d'instances gérés

Vous devez configurer des groupes d'instances gérés qui incluent les modèles pour les ressources de backend utilisées par l'équilibreur de charge HTTP. Nous allons d'abord créer des modèles d'instance qui définissent la configuration des VM à créer pour chaque région. Ensuite, pour un backend dans chaque région, nous allons créer un groupe d'instances géré qui fait référence à un modèle d'instance.

Les groupes d'instances gérés peuvent être zonaux ou régionaux. Pour cet exercice pratique, nous allons créer des groupes d'instances gérés zonaux.

Dans cette section, vous pouvez voir un script de démarrage prédéfini qui sera référencé lors de la création de l'instance. Ce script de démarrage installe et active les fonctionnalités du serveur Web que nous utiliserons pour simuler une application Web. N'hésitez pas à explorer ce script.

Créer les modèles d'instance

La première étape consiste à créer un modèle d'instance.

Depuis 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'

Sortie

NAME           MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template  n1-standard-1               2021-11-09T09:24:35.275-08:00

Vous pouvez maintenant vérifier que nos modèles d'instance ont bien été créés à l'aide de la commande gcloud suivante :

Depuis Cloud Shell

gcloud compute instance-templates list

Sortie

NAME                  MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
test-template         n1-standard-1         2021-11-09T09:24:35.275-08:00

Créer les groupes d'instances

Nous devons maintenant créer un groupe d'instances géré à partir des modèles d'instance que nous avons créés précédemment.

Depuis Cloud Shell

gcloud compute instance-groups managed create us-east1-a-mig \
--size=1 \
--template=test-template \
--zone=us-east1-a

Sortie

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

Depuis Cloud Shell

gcloud compute instance-groups managed create us-east1-b-mig \
--size=5 \
--template=test-template \
--zone=us-east1-b

Sortie

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

Nous pouvons vérifier que nos groupes d'instances ont bien été créés à l'aide de la commande gcloud suivante :

Depuis Cloud Shell

gcloud compute instance-groups list

Sortie

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

Vérifier le fonctionnement du serveur Web

Chaque instance est configurée pour exécuter un serveur Web Apache avec un simple script PHP qui affiche un résultat semblable à celui ci-dessous :

Page diffusée depuis : us-east1-a-mig-ww2h

Pour vous assurer que vos serveurs Web fonctionnent correctement, accédez à Compute Engine > Instances de VM. Assurez-vous que vos nouvelles instances (par exemple, us-east1-a-mig-xxx) ont été créées conformément aux définitions de leur groupe d'instances.

À présent, envoyez une requête Web dans votre navigateur pour vous assurer que le serveur Web est en cours d'exécution (le démarrage peut prendre une minute). Sur la page "Instances de VM" sous Compute Engine, sélectionnez une instance créée par votre groupe d'instances, puis cliquez sur son adresse IP externe (publique).

Vous pouvez également accéder à http://<IP_Address> dans votre navigateur.

5. Configurer l'équilibreur de charge

Créer une vérification de l'état

Nous devons d'abord créer une vérification d'état de base pour nous assurer que nos services sont opérationnels. Nous allons créer une vérification d'état de base, mais de nombreuses personnalisations plus avancées sont disponibles.

Depuis Cloud Shell

gcloud compute health-checks create http http-basic-check \
    --port 80

Sortie

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/healthChecks/http-basic-check].
NAME              PROTOCOL
http-basic-check  HTTP

Réserver une adresse IP externe

Pour cette étape, vous devez réserver une adresse IP statique disponible dans le monde entier, qui sera ensuite associée à l'équilibreur de charge.

Depuis Cloud Shell

gcloud compute addresses create lb-ipv4-2 \
    --ip-version=IPV4 \
    --global

Sortie

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses/lb-ipv4-2].

Assurez-vous de noter l'adresse IP réservée.

gcloud compute addresses describe lb-ipv4-2 \
    --format="get(address)" \
    --global

Créer des services de backend

Nous devons maintenant créer un service de backend pour les groupes d'instances gérés que nous avons créés précédemment.

Depuis 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

Sortie

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/east-backend-service].
NAME                  BACKENDS  PROTOCOL
east-backend-service            HTTP

Ajouter des MIG aux services de backend

Maintenant que nous avons créé les services de backend, nous devons ajouter les groupes d'instances gérés que nous avons créés précédemment à chaque service de backend.

Depuis Cloud Shell

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-a-mig --instance-group-zone us-east1-a --global

Depuis Cloud Shell

gcloud compute backend-services add-backend east-backend-service --instance-group us-east1-b-mig --instance-group-zone us-east1-b --global

Vous pouvez vérifier que les backends ont été ajoutés en exécutant la commande suivante.

Depuis Cloud Shell

gcloud compute backend-services list

Sortie

NAME                  BACKENDS                                                                                               PROTOCOL
east-backend-service  us-east1-a/instanceGroups/us-east1-a-mig,us-east1-b/instanceGroups/us-east1-b-mig  HTTP

Créer un mappage d'URL

Nous allons maintenant créer un mappage d'URL.

gcloud compute url-maps create web-map-http \
    --default-service=east-backend-service \
    --global

Sortie

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

Créer une interface HTTP

La dernière étape de la création de l'équilibreur de charge consiste à créer l'interface. Cela permettra de mapper l'adresse IP que vous avez réservée précédemment avec le mappage d'URL de l'équilibreur de charge que vous avez créé.

Depuis Cloud Shell

gcloud compute target-http-proxies create http-lb-proxy-adv \
    --url-map=web-map-http

Sortie

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

Vous devez ensuite créer une règle de transfert globale qui associera l'adresse IP réservée précédemment au proxy HTTP.

Depuis 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

À ce stade, vous pouvez vérifier que l'équilibreur de charge fonctionne avec l'adresse IP que vous avez notée précédemment.

6. Vérifier que l'équilibreur de charge fonctionne

Pour vérifier que la fonctionnalité d'équilibrage de charge fonctionne, vous devez générer une certaine charge. Pour ce faire, nous allons créer une VM pour simuler une charge.

Créer siege-vm

Vous allez maintenant créer la VM siege-vm que vous utiliserez pour générer de la charge.

Depuis 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'

Sortie

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

Vous pouvez ensuite vous connecter en SSH à la VM que vous avez créée. Une fois l'instance créée, cliquez sur SSH pour lancer un terminal et vous y connecter.

Une fois connecté, exécutez la commande suivante pour générer une charge. Utilisez l'adresse IP que vous avez réservée précédemment pour l'équilibreur de charge HTTP externe.

Depuis Cloud Shell

siege -c 20 http://$lb-ipv4-2

Sortie

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

Vérifier la répartition de la charge

Maintenant que Siege est en cours d'exécution, il est temps de vérifier que le trafic est réparti de manière égale entre les deux groupes d'instances gérés.

Arrêter le siège

Maintenant que vous avez démontré que la répartition avancée du trafic fonctionne, il est temps d'arrêter le siège. Pour ce faire, revenez au terminal SSH de siege-vm et appuyez sur CTRL+C pour arrêter l'exécution de siege.

7. Configurer une règle de LB de service

Créer une règle de LB de service

Maintenant que le paramètre de base est défini, nous allons créer une règle Service Lb et tester les fonctionnalités avancées. Par exemple, nous allons configurer le service pour qu'il utilise certains paramètres avancés d'équilibrage de charge. Dans cet exemple, nous allons simplement créer une règle pour utiliser la fonctionnalité de drainage de capacité automatique. N'hésitez pas à essayer d'autres fonctionnalités.

Depuis Cloud Shell

gcloud beta network-services service-lb-policies create http-policy \
    --auto-capacity-drain --location=global

Nous pouvons vérifier que notre règle a bien été créée à l'aide de la commande gcloud suivante :

Depuis Cloud Shell

gcloud beta network-services service-lb-policies list --location=global

Sortie

NAME
http-policy

Associer une règle de LB de service à un service de backend

Nous allons maintenant associer la nouvelle stratégie à votre service de backend existant ci-dessus.

Depuis Cloud Shell

gcloud beta compute backend-services update east-backend-service \
    --service-lb-policy=http-policy --global

8. Modifier l'état du backend

À ce stade, la nouvelle règle de service de l'équilibreur de charge a été appliquée à votre service de backend. Techniquement, vous pouvez passer directement au nettoyage. Toutefois, dans le cadre de cet atelier de programmation, nous allons également effectuer quelques ajustements de production supplémentaires pour vous montrer comment fonctionne le nouveau règlement.

La fonctionnalité de drainage de capacité automatique supprime automatiquement un MIG de backend de l'équilibreur de charge lorsque le nombre total de backends opérationnels est inférieur à un certain seuil (25 %). Pour tester cette fonctionnalité, nous allons nous connecter en SSH aux VM de us-east1-b-mig et les rendre non opérationnelles. Avec le seuil de 25 %, vous devrez vous connecter en SSH à quatre VM et arrêter le serveur Apache.

Pour ce faire, sélectionnez quatre VM et connectez-vous à l'une d'elles en cliquant sur SSH pour lancer un terminal et vous y connecter. Exécutez ensuite la commande suivante.

sudo apachectl stop

À ce stade, la fonctionnalité de vidange automatique de la capacité sera déclenchée et us-east1-b-mig ne recevra plus de nouvelles requêtes.

9. Vérifier que la fonctionnalité de décharge automatique de la batterie fonctionne

Redémarrer le siège

Pour vérifier la nouvelle fonctionnalité, nous allons réutiliser la VM siege. Connectons-nous en SSH à la VM que vous avez créée à l'étape précédente. Une fois l'instance créée, cliquez sur SSH pour lancer un terminal et vous y connecter.

Une fois connecté, exécutez la commande suivante pour générer une charge. Utilisez l'adresse IP que vous avez réservée précédemment pour l'équilibreur de charge HTTP externe.

Depuis Cloud Shell

siege -c 20 http://$lb-ipv4-2

Sortie

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file

À ce stade, vous remarquerez que toutes les requêtes sont envoyées à us-east1-a-mig.

Arrêter le siège

Maintenant que vous avez démontré que la répartition avancée du trafic fonctionne, il est temps d'arrêter le siège. Pour ce faire, revenez au terminal SSH de siege-vm et appuyez sur CTRL+C pour arrêter l'exécution de siege.

10. Étapes de nettoyage

Maintenant que nous avons terminé avec l'environnement de l'atelier, il est temps de le supprimer. Veuillez exécuter les commandes suivantes pour supprimer l'environnement de test.

Depuis 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. Félicitations !

Bravo ! Vous avez terminé cet atelier de programmation.

Points abordés

  • Créer un équilibreur de charge d'application externe avec une règle d'équilibrage de charge de service
  • Configurez votre service de backend avec la fonctionnalité de drainage automatique de la capacité.

Étapes suivantes

  • Testez d'autres fonctionnalités fournies par le règlement sur l'équilibrage de charge du service.