Faire passer un équilibreur de charge réseau des pools cibles aux services de backend régionaux

1. Introduction

Ce guide fournit des instructions pour faire passer un équilibreur de charge réseau existant d'un backend de pool cible vers un service de backend régional.

Points abordés

  • Comprendre les avantages des services de backend régionaux
  • Créer un équilibreur de charge réseau avec des pools cibles
  • Effectuer la validation du pool cible
  • Créer un service backend régional à l'aide de groupes d'instances non gérés
  • Migrer un pool cible vers un service de backend
  • Effectuer la validation des services de backend

Prérequis

  • Expérience avec les équilibreurs de charge

2. Présentation des services de backend régionaux pour l'équilibrage de charge réseau

Avec Network Load Balancing, les clients Google Cloud disposent d'un outil puissant pour distribuer le trafic externe entre les machines virtuelles d'une région Google Cloud. Pour permettre à nos clients de gérer plus facilement le trafic entrant et de contrôler le comportement de l'équilibreur de charge, nous avons récemment ajouté la prise en charge des services de backend à l'équilibrage de charge réseau. Nos clients bénéficient ainsi d'une évolutivité, d'une vitesse, d'une performance et d'une résilience améliorées dans leur déploiement, le tout d'une manière simple à gérer.

Nous proposons désormais des services de backend avec l'équilibrage de charge réseau, ce qui constitue une amélioration significative par rapport à l'approche précédente, les pools cibles. Un service de backend définit la manière dont nos équilibreurs de charge distribuent le trafic entrant vers les backends associés et permet de contrôler précisément le comportement de l'équilibreur de charge.

3. Avantages des services de backend régionaux

Choisir un service de backend régional comme équilibreur de charge présente de nombreux avantages pour votre environnement.

267db35a58145be.png

Les services backend régionaux offrent les avantages suivants:

  • Vérification de l'état haute fidélité avec vérification de l'état unifiée : avec les services de backend régionaux, vous pouvez désormais profiter pleinement des fonctionnalités de vérification de l'état de l'équilibrage de charge, et vous libérer des contraintes des anciennes vérifications d'état HTTP. Pour des raisons de conformité, les clients de l'équilibrage de charge réseau demandaient souvent des vérifications d'état TCP compatibles avec les chaînes de requête et de réponse personnalisées ou HTTPS.
  • Meilleure résilience avec les groupes de basculement : avec les groupes de basculement, vous pouvez désigner un groupe d'instances principal et un autre comme groupe secondaire et faire basculer le trafic lorsque l'état des instances du groupe actif passe en dessous d'un certain seuil. Pour mieux contrôler le mécanisme de basculement, vous pouvez utiliser un agent tel que keepalived ou pacemaker, et exposer une vérification de l'état correcte ou défaillante en fonction des changements d'état de l'instance de backend.
  • Évolutivité et haute disponibilité avec des groupes d'instances gérés : les services de backend régionaux prennent en charge les groupes d'instances gérés en tant que backends. Vous pouvez désormais spécifier un modèle pour vos instances de machines virtuelles backend et exploiter l'autoscaling en fonction de l'utilisation du processeur ou d'autres métriques de surveillance.

En plus de ce qui précède, vous pourrez profiter du vidage de connexion pour le protocole TCP (connection-oriented protocol) et d'un temps de programmation plus rapide pour les déploiements de grande envergure.

Topologie réseau de l'atelier de programmation

Ce guide fournit des instructions pour faire passer un équilibreur de charge réseau existant d'un backend de pool cible à un service de backend régional.

Le transfert vers un service de backend régional vous permet d'exploiter des fonctionnalités telles que les vérifications d'état non héritées (pour TCP, SSL, HTTP, HTTPS et HTTP/2), les groupes d'instances gérés, le drainage de connexion et la stratégie de basculement.

Ce guide vous accompagne tout au long de la transition de l'exemple suivant d'équilibreur de charge réseau basé sur un pool cible pour utiliser à la place un service de backend régional.

b2ac8a09e53e27f8.png

Avant:Équilibreur de charge réseau avec pool cible

Le déploiement résultant de l'équilibreur de charge réseau basé sur un service de backend ressemble à ceci.

f628fdad64c83af3.png

Après:Équilibreur de charge réseau avec un service de backend régional

Cet exemple suppose que vous disposez d'un équilibreur de charge réseau traditionnel basé sur un pool cible avec deux instances dans la zone us-central-1a et deux instances dans la zone us-central-1c.

Voici les grandes étapes à suivre pour effectuer une telle transition :

  1. Regroupez vos instances de pool cible dans des groupes d'instances. Les services de backend ne fonctionnent qu'avec des groupes d'instances gérés ou non gérés. Bien qu'il n'existe aucune limite au nombre d'instances pouvant être placées dans un même pool cible, les groupes d'instances ont une taille maximale. Si votre pool cible dépasse ce nombre maximal d'instances, vous devrez répartir ses backends sur plusieurs groupes d'instances. Si votre déploiement existant inclut un pool cible de sauvegarde, créez un groupe d'instances distinct pour ces instances. Ce groupe d'instances sera configuré en tant que groupe de basculement.
  2. Créez un service de backend régional. Si votre déploiement inclut un pool cible de sauvegarde, vous devez spécifier un taux de basculement lors de la création du service de backend. Il doit correspondre au taux de basculement précédemment configuré pour le déploiement du pool cible.
  3. Ajoutez des groupes d'instances (créés précédemment) au service de backend. Si votre déploiement inclut un pool cible de sauvegarde, marquez le groupe d'instances de basculement correspondant avec l'option "-failover" lorsque vous l'ajoutez au service de backend.
  4. Configurez une règle de transfert pointant vers le nouveau service de backend. Deux possibilités s'offrent à vous:
  • (Recommandé) Mettez à jour la règle de transfert existante pour qu'elle pointe vers le service de backend. OU
  • Créez un transfert pointant vers le service de backend. Pour cela, vous devez créer une adresse IP pour l'interface de l'équilibreur de charge. Ensuite, modifiez vos paramètres DNS pour passer facilement de l'adresse IP de l'ancien équilibreur de charge basé sur un pool cible à la nouvelle.

Configuration de l'environnement au rythme de chacun

  1. Connectez-vous à la console Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Mémorisez l'ID du projet. Il s'agit d'un nom unique permettant de différencier chaque projet Google Cloud (le nom ci-dessus est déjà pris ; vous devez en trouver un autre). Il sera désigné par le nom PROJECT_ID tout au long de cet atelier de programmation.

  1. Vous devez ensuite activer la facturation dans Cloud Console pour pouvoir utiliser les ressources Google Cloud.

L'exécution de cet atelier de programmation est très peu coûteuse, voire gratuite. Veillez à suivre les instructions de la section "Nettoyer" qui indique comment désactiver les ressources afin d'éviter les frais une fois ce tutoriel terminé. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.

Démarrer Cloud Shell

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.

Depuis la console GCP, cliquez sur l'icône Cloud Shell de la barre d'outils située dans l'angle supérieur droit :

bce75f34b2c53987.png

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

f6ef2b5f13479f3a.png

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez réaliser toutes les activités de cet atelier dans un simple navigateur.

Se connecter à Cloud Shell et définir l'ID du projet

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]

Perform setting your projectID:
projectid=YOUR-PROJECT-ID

echo $projectid

4. Créer un réseau VPC

Réseau VPC

Depuis Cloud Shell

gcloud compute networks create network-lb --subnet-mode custom

Créer un sous-réseau

Depuis Cloud Shell

gcloud compute networks subnets create network-lb-subnet \
        --network network-lb --range 10.0.0.0/24 --region us-central1

Créer des règles de pare-feu

Depuis Cloud Shell

gcloud compute --project=$projectid firewall-rules create www-firewall-network-lb --direction=INGRESS --priority=1000 --network=network-lb --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=network-lb-tag

Créer des instances non gérées

Créez deux instances par zone, us-central1-a et us-central1-c.

Créer l'instance 1 depuis Cloud Shell

gcloud compute instances create www1 \
--subnet network-lb-subnet \
--image-family debian-9 \
--image-project debian-cloud \
--zone us-central1-a \
--tags network-lb-tag \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart
echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"

Depuis Cloud Shell, créez l'instance 2.

gcloud compute instances create www2 \
--subnet network-lb-subnet \
--image-family debian-9 \
--image-project debian-cloud \
--zone us-central1-a \
--tags network-lb-tag \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo service apache2 restart 
echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html"

Créer l'instance 3 depuis Cloud Shell

gcloud compute instances create www3 \
--subnet network-lb-subnet \
--image-family debian-9 \
--image-project debian-cloud \
--zone us-central1-c \
--tags network-lb-tag \
--metadata startup-script="#! /bin/bash
sudo apt-get update 
sudo apt-get install apache2 -y 
sudo service apache2 restart 
echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html"

Créer l'instance 4 depuis Cloud Shell

gcloud compute instances create www4 \
--subnet network-lb-subnet \
--image-family debian-9 \
--image-project debian-cloud \
--zone us-central1-c \
--tags network-lb-tag \
--metadata startup-script="#! /bin/bash
sudo apt-get update 
sudo apt-get install apache2 -y 
sudo service apache2 restart
echo '<!doctype html><html><body><h1>www4</h1></body></html>' | tee /var/www/html/index.html"

Créer une règle de pare-feu pour autoriser le trafic externe vers ces instances de VM

Depuis Cloud Shell

gcloud compute --project=$projectid firewall-rules create www-firewall-network-lb --direction=INGRESS --priority=1000 --network=network-lb --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=network-lb-tag

Créer une adresse IP externe statique pour votre équilibreur de charge

Depuis Cloud Shell

gcloud compute addresses create network-lb-ip-1 \
    --region us-central1

Ajouter une ancienne ressource de vérification d'état HTTP

Depuis Cloud Shell

gcloud compute http-health-checks create basic-check

5. Créer une règle de transfert et un pool cible

Créer un pool cible

gcloud compute target-pools create www-pool \
            --region us-central1 --http-health-check basic-check

Ajoutez vos instances au pool cible, us-central1-a.

gcloud compute target-pools add-instances www-pool \
--instances www1,www2 \
--instances-zone us-central1-a

Ajoutez vos instances au pool cible, us-central1-c.

gcloud compute target-pools add-instances www-pool \
--instances www3,www4 \
--instances-zone us-central1-c

Ajouter une règle de transfert

gcloud compute forwarding-rules create www-rule \
--region us-central1 \
--ports 80 \
--address network-lb-ip-1 \
--target-pool www-pool

Valider le fonctionnement du pool cible

Identifiez l'adresse IP de l'interface en sélectionnant "Équilibreurs de charge → Interfaces (www-rule)".

Utilisez la commande curl à partir du terminal de votre poste de travail pour accéder à l'adresse IP externe et observer l'équilibrage de charge sur les quatre instances cibles. Fermez le terminal une fois la validation effectuée.

while true; do curl -m1 IP_ADDRESS; done

6. Faire passer l'équilibreur de charge réseau du pool cible au service de backend

Créer des vérifications d'état unifiées pour votre service de backend

gcloud compute health-checks create tcp my-tcp-health-check --port 80 --region us-central1

Créer des groupes d'instances à partir d'instances existantes du pool cible

gcloud compute --project=$projectid instance-groups unmanaged create www-instance-group-central1a --zone=us-central1-a

gcloud compute --project=$projectid instance-groups unmanaged add-instances www-instance-group-central1a --zone=us-central1-a --instances=www1,www2

Créer des groupes d'instances à partir d'instances existantes du pool cible

gcloud compute --project=$projectid instance-groups unmanaged create www-instance-group-central1c --zone=us-central1-c

gcloud compute --project=$projectid instance-groups unmanaged add-instances www-instance-group-central1c --zone=us-central1-c --instances=www3,www4

Créez un service de backend et associez-le aux vérifications d'état nouvellement créées.

gcloud compute backend-services create my-backend-service --region us-central1 --health-checks my-tcp-health-check --health-checks-region us-central1 --load-balancing-scheme external

Configurer votre service de backend et ajouter les groupes d'instances

gcloud compute backend-services add-backend my-backend-service --instance-group www-instance-group-central1a --instance-group-zone us-central1-a --region us-central1

gcloud compute backend-services add-backend my-backend-service --instance-group www-instance-group-central1c --instance-group-zone us-central1-c --region us-central1

Mettre à jour la règle de transfert existante pour prendre en charge les services de backend

Notez le nom de la règle de transfert "www-rule" et l'adresse IP associée en procédant comme suit:

Sélectionnez "Équilibreur de charge → Interfaces".

Notez également que les quatre pools cibles

Sélectionnez "Équilibreur de charge" → sélectionnez "pool-www"

Acheminer le trafic vers les services de backend en mettant à jour la règle de transfert existante

gcloud compute forwarding-rules set-target www-rule --region=us-central1 --backend-service my-backend-service --region us-central1

Vérifiez que l'équilibreur de charge "www-pool" n'est plus configuré avec l'interface "www-rule" (voir capture d'écran ci-dessous).

Sélectionnez "Équilibreur de charge → pool www".

9a393b3ca4e0942c.png

Vérifiez que la règle de transfert du frontend est désormais associée à l'équilibreur de charge "my-backend-service".

Sélectionnez "Équilibreur de charge → Interfaces".

Notez que l'adresse IP de la règle "www-rule" est conservée et que l'équilibreur de charge "my-backend-service" est désormais utilisé.

Utilisez la commande curl depuis le terminal de votre poste de travail pour accéder à l'adresse IP externe et observer l'équilibrage de charge sur le nouveau service backend associé. Fermez le terminal une fois la validation effectuée.

while true; do curl -m1 IP_ADDRESS; done

7. Étapes de nettoyage

gcloud compute forwarding-rules delete www-rule --region=us-central1 --quiet
 
gcloud compute backend-services delete my-backend-service --region us-central1 --quiet
 
gcloud compute target-pools delete www-pool --region us-central1 --quiet
 
gcloud compute addresses delete network-lb-ip-1 --region us-central1 --quiet

gcloud compute firewall-rules delete www-firewall-network-lb --quiet
 
gcloud compute instances delete www4 --zone us-central1-c --quiet
 
gcloud compute instances delete www3 --zone us-central1-c --quiet
 
gcloud compute instances delete www2 --zone us-central1-a --quiet

gcloud compute instances delete www1 --zone us-central1-a --quiet
 
gcloud compute networks subnets delete network-lb-subnet --region us-central1 --quiet

gcloud compute networks delete network-lb --quiet

gcloud compute instance-groups unmanaged delete www-instance-group-central1a --zone us-central1-a --quiet

gcloud compute instance-groups unmanaged delete www-instance-group-central1c --zone us-central1-c --quiet

8. Félicitations !

Bravo ! Vous avez terminé cet atelier de programmation.

Points abordés

  • Comprendre les avantages des services de backend régionaux
  • Créer un équilibreur de charge réseau avec des pools cibles
  • Effectuer la validation du pool cible
  • Créer un service backend régional à l'aide de groupes d'instances non gérés
  • Migrer un pool cible vers un service de backend
  • Effectuer la validation des services de backend