Ce tutoriel explique comment utiliser un équilibreur de charge d'application externe pour distribuer le trafic vers les serveurs Web Microsoft Internet Information Services (IIS) exécutés sur des VM Compute Engine provisionnées dans différentes régions.
Objectif
Ce tutoriel explique comment réaliser l'équilibrage de charge pour le trafic du site www.example.com
et s’assurer que :
- les requêtes entrantes sont acheminées vers la région la plus proche ;
- en cas d'échec d'une instance ou de l'atteinte de ses limites de capacité, l'équilibreur de charge achemine les requêtes vers d'autres instances réactives de la même région ou d'une région différente.
Dans ce scénario, la configuration utilise un équilibreur de charge externe qui achemine les requêtes via une seule adresse IP globale. Cette adresse IP peut router chaque requête entrante par type de connexion, à savoir HTTP ou HTTPS. Pour les requêtes HTTPS, l'équilibreur de charge met en œuvre le chiffrement SSL/TLS entre le client envoyant la requête et l'équilibreur de charge.
Le schéma suivant illustre l'architecture de l'équilibreur de charge :
Notez que l'équilibreur de charge inclut plusieurs composants pour une configurabilité maximale. Pour obtenir une description de chaque composant, consultez la présentation de l'équilibreur de charge d'application externe.
Ce tutoriel vous explique comment effectuer les tâches suivantes, en vue d'atteindre votre objectif :
- Configurer les instances backend
- Créer et configurer le service d'équilibrage de charge
- Envoyer du trafic aux backends
- Limiter l'accès aux backends
- Simuler une interruption
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- Instances de machine virtuelle (VM) Compute Engine
- Disques persistants Compute Engine
- (Facultatif) Certificat SSL géré par Google
- Images système Windows Server 2016
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Installez un client RDP (Remote Desktop Protocol). Pour plus d'informations, voir les clients Bureau à distance de Microsoft. Si un client RDP est déjà installé, vous pouvez ignorer cette tâche.
- Déterminez les zones et régions dans lesquelles vous souhaitez provisionner vos ressources. Le schéma d'architecture montre des ressources déployées dans les différentes zones des régions États-Unis et UE, mais simplement à titre indicatif. Vous pouvez déployer vos ressources dans les régions/zones de votre choix.
- Facultatif : Lisez et comprenez la présentation de l'équilibreur de charge d'application externe.
Configurer les instances backend
Dans cette section, vous allez créer deux services de backend dans différentes régions. Chaque service de backend inclut deux instances backend, chacune exécutant un serveur Web Microsoft IIS sur Windows Server 2016. Pour éviter une configuration manuelle laborieuse de chaque serveur, vous allez créer une image disque à partir d'une instance de serveur, puis créer les autres instances de serveur à l'aide de cette image.
Créer et configurer une instance Compute Engine
Pour créer l'instance à utiliser en tant qu'image source, procédez comme suit :
Depuis Google Cloud Marketplace, lancez une instance de Windows Server 2016 exécutant Microsoft IIS sur Compute Engine dans la zone de votre choix, puis configurez des règles de pare-feu pour autoriser le trafic HTTP, HTTPS et RDP externe vers l'instance de votre image source :
Dans la console Google Cloud, accédez à la page Cloud Marketplace ASP.NET Framework.
Cliquez sur Lancement.
Dans le champ Nom du déploiement, saisissez src-img.
Dans le champ Zone, sélectionnez la zone dans laquelle vous souhaitez déployer l'image.
Dans le champ Version du système d'exploitation Windows Server, sélectionnez 2016.
Dans la section Réseau – Pare-feu, ne sélectionnez que les options suivantes :
- Autoriser le trafic HTTP
- Allow HTTPS traffic (Autoriser le trafic HTTPS)
- Allow RDP traffic (Autoriser le trafic RDP)
Acceptez les conditions d'utilisation, puis cliquez sur Déployer.
Attendez que l'instance Compute Engine soit créée.
Configurer l'instance d'image source
Pour configurer votre nouvelle instance d'image source, créez un utilisateur Windows sur l'instance d'image source, puis établissez une connexion RDP :
Dans Google Cloud Console, accédez à la page Instances de VM.
Cliquez sur le nom de votre instance d'image source (
src-img
).Cliquez sur Définir un mot de passe Windows.
Dans la boîte de dialogue Définir un nouveau mot de passe Windows, ajoutez votre nom d'utilisateur et cliquez sur Définir pour créer le compte utilisateur sur votre instance.
Copiez le mot de passe fourni, puis fermez la boîte de dialogue.
Cliquez sur le menu déroulant RDP et sélectionnez l'option Télécharger le fichier RDP pour télécharger le fichier RDP de votre instance. Utilisez ce fichier pour vous connecter à l'instance à l'aide d'un client RDP. Pour plus d'informations, voir les clients Bureau à distance de Microsoft.
Après avoir établi une connexion RDP avec l'instance d'image source, ajoutez une page d'accueil par défaut dans le répertoire Web IIS par défaut :
Sur l'instance d'image source, ouvrez PowerShell en tant qu'administrateur.
Créez une page d'accueil dans le répertoire Web IIS par défaut
C:\inetpub\wwwroot
:Echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' > C:\inetpub\wwwroot\index.html
Vérifier la capacité de diffusion de contenu de l'instance d'image source
Dans Google Cloud Console, accédez à la page Instances de VM.
Accéder à la page "Instances de VM"
Cliquez sur l'adresse IP externe de l'instance pour vérifier qu'elle diffuse bien la page d'accueil que vous avez créée précédemment.
Créer une image Windows Server 2016 réutilisable à partir de l'instance d'image source
Après avoir vérifié que l'instance d'image source est correctement configurée et capable de diffuser du contenu, créez une image disque réutilisable à partir du disque persistant racine de l'instance :
- Sur l'instance d'image source, ouvrez PowerShell en tant qu'administrateur.
Exécutez la commande suivante pour préparer le système au clonage :
GCESysprep
Une fois l'opération
GCESysprep
terminée, vous êtes automatiquement déconnecté de la session RDP.Sur votre machine locale, exécutez la commande suivante pour supprimer l'instance source tout en conservant son disque persistant racine :
gcloud compute instances delete src-img \ --keep-disks=boot \ --zone=INSTANCE_ZONE
Remplacez
INSTANCE_ZONE
par la zone de l'instance source.Une fois l'instance supprimée, créez une image à partir du disque persistant racine que vous avez conservé :
gcloud compute images create win-be-img \ --source-disk=src-img \ --source-disk-zone=IMAGE_ZONE
Remplacez
IMAGE_ZONE
par la zone dans laquelle vous souhaitez créer votre image source.
Créer un modèle d'instance à l'aide de l'image source
Utilisez l'image disque de votre serveur Windows configuré en tant qu'image source pour un modèle d'instance. Par la suite, vous configurerez deux groupes d'instances gérés pour utiliser ce modèle pour les nouvelles instances.
Sur votre machine locale, exécutez la commande suivante pour créer un modèle d'instance qui utilise win-be-img
comme image source, ainsi que rdp-tag
et www-tag
comme tags d'instance :
gcloud compute instance-templates create win-be-tmpl \ --tags=rdp-tag,www-tag \ --image=win-be-img
Créer un groupe d'instances géré dans chaque région
Dans chaque région, créez des groupes d'instances gérés. Une fois que vous avez créé chaque groupe d'instances, deux instances identiques basées sur le modèle d'instance défini précédemment sont ajoutées automatiquement au groupe. Vous configurerez ultérieurement votre équilibreur de charge pour traiter ces groupes d'instances comme des cibles backend.
Pour créer les groupes d'instances gérés, procédez comme suit :
Sur votre ordinateur local, exécutez la commande suivante pour créer un groupe d'instances géré dans la zone dans laquelle vous avez créé l'image et y ajouter automatiquement deux instances identiques :
gcloud compute instance-groups managed create MANAGED_INSTANCE_GROUP_NAME_1 \ --base-instance-name=BASE_INSTANCE_NAME_1 \ --size=2 \ --zone=ZONE_1 \ --template=win-be-tmpl
Remplacez les éléments suivants :
MANAGED_INSTANCE_GROUP_NAME_1
: nom de votre instance gérée.BASE_INSTANCE_NAME_1
: nom de votre instance de base.ZONE_1
: zone dans laquelle vous souhaitez déployer votre instance gérée.
Créez un groupe d'instances géré dans la deuxième zone :
gcloud compute instance-groups managed create MANAGED_INSTANCE_GROUP_NAME_2 \ --base-instance-name=BASE_INSTANCE_NAME_2 \ --size=2 \ --zone=ZONE_2 \ --template=win-be-tmpl
Remplacez les éléments suivants :
MANAGED_INSTANCE_GROUP_NAME_2
: nom de votre instance gérée.BASE_INSTANCE_NAME_2
: nom de votre instance de base.ZONE_2
: zone dans laquelle vous souhaitez déployer votre instance gérée.
Vérifier l'exécution des instances backend
Dans Google Cloud Console, accédez à la page Instances de VM.
Cliquez sur l'adresse IP externe de chaque backend pour vérifier qu'il diffuse bien la page d'accueil que vous avez créée précédemment.
Créer et configurer le service d'équilibrage de charge
Le service d'équilibrage de charge de Compute Engine comprend plusieurs composants. Dans cette section, vous allez créer ces composants et les connecter.
Sur votre machine locale, exécutez la commande suivante pour créer une vérification d'état. L'équilibreur de charge s'en sert pour vérifier la réactivité de vos instances backend :
gcloud compute http-health-checks create basic-check
Créez un service de backend :
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --protocol=HTTP \ --http-health-checks=basic-check \ --global
Remplacez
BACKEND_SERVICE_NAME
par le nom du service de backend.Ajoutez vos groupes d'instances en tant que cibles de backend pour le service de backend :
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=MANAGED_INSTANCE_GROUP_NAME_1 \ --instance-group-zone=ZONE_1 gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=MANAGED_INSTANCE_GROUP_NAME_2 \ --instance-group-zone=ZONE_2
Créez un mappage d'URL par défaut qui redirige toutes les requêtes entrantes vers vos instances :
gcloud compute url-maps create lb-map \ --default-service=BACKEND_SERVICE_NAME
Créez une ressource de certificat SSL. L'équilibreur de charge se sert de cette ressource pour chiffrer et déchiffrer le trafic.
Si vous possédez déjà une clé privée et un certificat SSL provenant d'une autorité de certification, vous pouvez les utiliser afin de créer une ressource
SSLCertificate
en exécutant la commande suivante. Sinon, vous pouvez créer et utiliser un certificat SSL géré par Google ou un certificat autosigné pour les tests. Pour en savoir plus, consultez la page Certificats SSL.Exécutez la commande suivante pour créer une ressource de certificat SSL :
gcloud compute ssl-certificates create www-cert \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
Remplacez les éléments suivants :
CRT_FILE_PATH
: chemin d'accès au fichier local de votre certificatKEY_FILE_PATH
: chemin d'accès au fichier de votre clé privée
Créez des serveurs proxy HTTP et HTTPS cibles pour acheminer les requêtes vers votre mappage d'URL. Le serveur proxy est la partie de l'équilibreur de charge qui contient le certificat SSL pour l'équilibrage de charge HTTPS. Vous chargez donc également votre certificat à cette étape :
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=lb-map gcloud compute target-https-proxies create https-lb-proxy \ --url-map lb-map \ --ssl-certificate SSL_CERT
Remplacez SSL_CERT en respectant les instructions suivantes :
- Si vous avez créé une ressource SSLCertificate avec votre certificat SSL et une clé privée, remplacez
SSL_CERT
par www-cert. - Si vous utilisez un certificat SSL géré par Google ou autosigné, remplacez
SSL_CERT
par le nom de votre certificat.
- Si vous avez créé une ressource SSLCertificate avec votre certificat SSL et une clé privée, remplacez
Pour que l'équilibreur de charge reçoive le trafic de manière fiable, vous devez attribuer une adresse IP statique globale à la règle de transfert globale de l'équilibreur de charge.
Pour créer une ressource d'adresse IP statique globale, exécutez la commande suivante :
gcloud compute addresses create lb-ip \ --global \ --network-tier=PREMIUM
Notez l'adresse IP.
Créez deux règles de transfert globales pour gérer les requêtes HTTP et HTTPS entrantes. Chaque règle de transfert envoie le trafic à l'un des serveurs proxy cibles que vous avez créés en fonction de l'adresse IP, du protocole IP et du port spécifiés.
-
Pour un équilibreur de charge d'application externe global, exécutez la commande gcloud CLI avec
load-balancing-scheme=EXTERNAL_MANAGED
. Ce paramètre offre une fonctionnalité de gestion avancée du trafic. - Pour un équilibreur de charge d'application classique, utilisez
load-balancing-scheme=EXTERNAL
.
gcloud compute forwarding-rules create http-fwd-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=lb-ip \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80 gcloud compute forwarding-rules create https-fwd-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=lb-ip \ --global \ --target-https-proxy=https-lb-proxy \ --ports=443
-
Pour un équilibreur de charge d'application externe global, exécutez la commande gcloud CLI avec
Une fois que vous avez créé les règles de transfert globales, la propagation de votre configuration peut prendre plusieurs minutes. Pour vérifier la progression de la propagation, vous pouvez soit surveiller votre configuration dans Google Cloud Console, soit exécuter la commande suivante sur votre ordinateur local :
gcloud compute backend-services get-health BACKEND_SERVICE_NAME
Envoyer le trafic aux backends
Maintenant que vous avez configuré le service d'équilibrage de charge, vous pouvez commencer à envoyer le trafic vers la règle de transfert et surveiller la répartition du trafic dans différentes instances.
Envoyez du trafic vers vos backends comme suit :
Dans Google Cloud Console, accédez à la page Équilibrage de charge.
Sélectionnez l'onglet Interfaces.
Pour afficher votre page d'accueil par défaut, cliquez sur les adresses IP dans la colonne Adresse.
Restreindre l'accès aux backends
Après avoir vérifié que tout fonctionne comme prévu, modifiez les règles du pare-feu afin que le trafic HTTP ou HTTPS ne puisse provenir que du service d'équilibrage de charge :
Dans Google Cloud Console, accédez à la page Pare-feu.
Cliquez sur la règle de pare-feu qui autorise l'accès externe au port 80.
Cliquez sur Modifier pour modifier la règle de pare-feu.
Dans le champ Plages IPv4 sources, saisissez 130.211.0.0/22. Cela limite les adresses IP sources autorisées de la règle de pare-feu à la plage
130.211.0.0/22
, qui correspond à la plage d'adresses IP pour la vérification de l'état de l'équilibrage de charge HTTPS.Cliquez sur Enregistrer.
Dans Google Cloud Console, accédez à la page Instances de VM.
Cliquez sur l'adresse IP externe de chaque instance pour vérifier que l'instance est désormais inaccessible.
Simuler une interruption
Pour voir comment une charge est équilibrée entre les instances réactives, vous pouvez simuler une interruption pour une ou plusieurs instances d'une région.
Pour empêcher une instance de recevoir d'autres requêtes, procédez comme suit :
- Établissez une connexion RDP à l'instance.
- Sur l'instance, ouvrez PowerShell en tant qu'administrateur.
Exécutez la commande suivante pour créer une règle de pare-feu sur l'instance. Cette commande bloque le trafic de vérification de l'état du vérificateur d'état et empêche toutes les nouvelles connexions HTTP de l'équilibreur de charge à l'instance :
netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22
Sur votre machine locale, exécutez la commande suivante pour vérifier que l'instance signale désormais un état
UNHEALTHY
:gcloud compute backend-services get-health BACKEND_SERVICE_NAME
Une fois que l'instance a commencé à signaler un état
UNHEALTHY
, envoyez une requête à votre équilibreur de charge. Seules les instances réactives doivent répondre.Après la simulation de l'interruption, vous pouvez restaurer la connectivité de l'instance en supprimant la règle de pare-feu. Ouvrez PowerShell en tant qu'administrateur sur l'instance non réactive, puis exécutez la commande suivante pour supprimer la règle :
netsh advfirewall firewall delete rule name="Outage Test"
Effectuer un nettoyage
Une fois le tutoriel terminé, vous pouvez procéder au nettoyage des ressources que vous avez créées afin qu'elles ne soient plus comptabilisées dans votre quota et qu'elles ne vous soient plus facturées. Dans les sections suivantes, nous allons voir comment supprimer ou désactiver ces ressources.
Supprimer le projet
Le moyen le plus simple d’éliminer la facturation consiste à supprimer le projet que vous avez créé pour ce tutoriel.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Supprimer des ressources individuelles
Vous devez supprimer individuellement toutes les ressources créées pour le projet (images, modèles d'instance, groupes d'instances, vérifications d'état, services de backend, mappage d'URL, proxy HTTP, adresses, règles de transfert). Vous ne pouvez pas supprimer les instances de VM avant d'avoir exécuté les commandes suivantes.
Exécutez les commandes suivantes sur votre ordinateur local pour supprimer les ressources créées pour le tutoriel :
- Pour supprimer les règles de transfert HTTP/S :
gcloud compute forwarding-rules delete https-fwd-rule --global
gcloud compute forwarding-rules delete http-fwd-rule --global
- Pour supprimer l'adresse IP statique globale :
gcloud compute addresses delete lb-ip --global
- Pour supprimer les proxys HTTP/S :
gcloud compute target-https-proxies delete https-lb-proxy
gcloud compute target-http-proxies delete http-lb-proxy
- Supprimer le certificat SSL :
gcloud compute ssl-certificates delete SSL_CERT
- Supprimer le mappage d'URL :
gcloud compute url-maps delete lb-map
- Pour supprimer le service de backend :
gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
- Pour supprimer la vérification d'état HTTP :
gcloud compute http-health-checks delete basic-check
- Pour supprimer les groupes d'instances gérés :
gcloud compute instance-groups managed delete MANAGED_INSTANCE_GROUP_NAME_1 --zone=ZONE_1
gcloud compute instance-groups managed delete MANAGED_INSTANCE_GROUP_NAME_2 --zone=ZONE_2
- Supprimez le modèle d'instance :
gcloud compute instance-templates delete win-be-tmpl
-
Supprimez l'image :
gcloud compute images delete IMAGE_NAME
-
Supprimez le disque :
gcloud compute disks delete DISK_NAME
Étape suivante
- Suivez le tutoriel de déploiement de serveurs Web IIS à équilibrage de charge.
- Consultez les bonnes pratiques dans le framework d'architecture de Google Cloud.
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.