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

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

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.