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