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 la documentation 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 global.

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 utilise plusieurs fonctionnalités de la liste des fonctionnalités avancées compatibles avec l'équilibreur de charge basé sur Envoy. Une fois le déploiement termin��, vous générerez une charge simulée et vérifierez que les configurations que vous avez définies fonctionnent correctement.

Points abordés

  • Découvrez comment configurer ServiceLbPolicy pour affiner votre équilibreur de charge.

Prérequis

  • Connaissances de 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 HTTPs externe avec gestion avancée du trafic (Envoy) (https://codelabs.developers.google.com/codelabs/externalhttplb-adv). Nous vous recommandons de commencer par le faire.

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 créer une règle de pare-feu. La règle de pare-feu permettra à toutes les adresses IP d'accéder à l'adresse IP externe du site Web de l'application de 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 ajuster 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 des 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 atelier, nous allons créer des groupes d'instances gérés zonaux.

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

Créer les modèles d'instances

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 script PHP simple qui affiche quelque chose comme ci-dessous:

Page de diffusion: 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.

Envoyez-lui maintenant 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 de l'état de base pour nous assurer que nos services sont opérationnels. Nous allons créer une vérification de l'état de base. De nombreuses autres personnalisations 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].

Notez 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 utilisateur. L'adresse IP que vous avez réservée précédemment sera mappée sur 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 mappera l'adresse IP réservée précédemment sur le 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 charge. Pour ce faire, nous allons créer une VM pour simuler la charge.

Créer Siege-vm

Vous allez maintenant créer l'instance siege-vm que vous utiliserez pour générer 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 le terminal créé, 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 le siège 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.

Stop the Siege

Maintenant que vous avez démontré que la répartition du trafic avancée fonctionne, il est temps de mettre fin au 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 la règle d'équilibrage de charge

Créer une règle de LB de service

Maintenant que les paramètres de base sont définis, nous allons créer un règlement Service Lb et tester les fonctionnalités avancées. À titre d'exemple, nous allons configurer le service pour qu'il utilise des paramètres d'équilibrage de charge avancés. Dans cet exemple, nous allons simplement créer une stratégie pour utiliser la fonctionnalité de drainage de capacité automatique. N'hésitez pas à tester 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 stratégie d'équilibrage de charge de service à un service de backend

Nous allons maintenant associer la nouvelle règle à 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. Ajuster l'état du backend

À ce stade, la nouvelle stratégie de répartition de charge de service a été appliquée à votre service de backend. Techniquement, vous pouvez donc passer directement au nettoyage. Mais au cours de l'atelier de programmation, nous allons également apporter quelques modifications 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 dans us-east1-b-mig et les rendre non opérationnelles. Avec le seuil de 25 %, vous devrez vous connecter en SSH à quatre des VM et arrêter le serveur Apache.

Pour ce faire, sélectionnez quatre VM et connectez-vous à elles via SSH 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 vidage 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 vidage automatique de la capacité fonctionne

Recommencez Siege

Pour vérifier la nouvelle fonctionnalité, nous allons réutiliser la VM de siège. 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.

Stop the Siege

Maintenant que vous avez démontré que la répartition du trafic avancée fonctionne, il est temps de mettre fin au 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. Procédure de nettoyage

Maintenant que vous avez 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éation d'un équilibreur de charge d'application externe avec une règle d'équilibreur de charge de service.
  • Configurez votre service de backend avec la fonctionnalité de drainage automatique de la capacité.

Étapes suivantes

  • Essayez d'autres fonctionnalités fournies par la règle de balancement de charge de service.