Ce tutoriel explique comment distribuer le trafic vers les serveurs Web de Microsoft Internet Information Services (IIS) dans différentes régions Compute Engine à l'aide du service d'équilibrage de charge HTTP(S) externe de Compute Engine.
Scénario
Vous devez équilibrer la charge du trafic pour le site www.example.com
.
Vous souhaitez vous assurer que les requêtes entrantes sont acheminées vers la région la plus proche. Vous devez également vérifier que les requêtes peuvent basculer sur une instance opérationnelle dans la région la plus proche, si nécessaire.
Lorsque vous avez terminé la configuration de ce scénario, vous obtenez un équilibreur de charge HTTP(S) 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 diagramme suivant illustre l'architecture de l'équilibreur de charge :
L'équilibreur de charge comprend plusieurs composants pour une configurabilité maximale. Pour obtenir une description de chaque composant, consultez la présentation de l'équilibrage de charge HTTP(S).
- Instances de machine virtuelle Compute Engine
- Disques persistants Compute Engine
- Images système Windows Server 2012
Le coût d'exécution de ce tutoriel varie en fonction de l'environnement d'exécution, du nombre d'instances, de la taille du disque et du type de machine. Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.
Pour suivre ce tutoriel, vous devez remplir les conditions ci-dessous :
- Vous utilisez une machine Windows.
- Vous avez créé un projet Google Cloud Console.
- Vous avez installé gCloud CLI. Cet outil permet d'interagir avec Google Cloud.
- Vous avez exécuté la commande
gcloud auth login
pour vous authentifier auprès de Google Cloud. Vous avez installé l'extension Chrome RDP for Google Cloud à partir de Fusion Labs.
Vous avez lu et compris la présentation de l'équilibrage de charge HTTP(S).
Vous avez défini votre projet comme projet par défaut avec lequel gCloud CLI interagit. Si ce n'est pas le cas, exécutez la commande suivante :
PS C:\> gcloud config set --project <project_name>
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 2012. Pour éviter une configuration manuelle 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 l'instance d'image source
Pour créer l'instance que vous utiliserez comme image source, procédez comme suit :
- Sur votre machine Windows locale, ouvrez PowerShell.
Créez une instance Windows Server 2012 dans la région
us-central1
, puis ajoutez les tagsrdp-tag
etwww-tag
à l'instance. Par la suite, vous activerez l'accès externe à l'instance en créant des règles de pare-feu qui spécifient ces tags :PS C:\> gcloud compute instances create src-img ^ --zone us-central1-f --image windows-2012-r2 ^ --tags rdp-tag,www-tag
Après avoir créé l'instance d'image source, configurez des règles de pare-feu pour autoriser l'accès externe à l'instance :
Créez une règle de pare-feu pour autoriser l'accès externe au port 3389 sur toutes les instances présentant le tag
rdp-tag
. Cette règle autorise l'accès à l'instance d'image source et à toute instance ultérieure utilisant le tagrdp-tag
à l'aide de RDP :PS C:\> gcloud compute firewall-rules create rdp-rule ^ --allow tcp:3389 --source-ranges 0.0.0.0/0 ^ --target-tags rdp-tag
Créez une autre règle de pare-feu pour autoriser l'accès externe au port 80 sur toutes les instances présentant le tag
www-tag
. Cette règle autorise l'instance d'image source et toute instance ultérieure utilisant le tagwww-tag
à envoyer et recevoir le trafic HTTP :PS C:> gcloud compute firewall-rules create www-rule ^ --allow tcp:80 --source-ranges 0.0.0.0/0 ^ --target-tags www-tag
Configurer l'instance d'image source
Créez ensuite un utilisateur Windows sur l'instance d'image source, puis établissez une connexion RDP :
- Dans votre navigateur Web, accédez à la page Instances de VM dans Cloud Console et cliquez sur le nom de votre instance d'image source (
src-img
). - Cliquez sur le bouton 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.
- 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.
Sur la page de la console de l'instance, cliquez sur RDP.
- Si vous avez installé l'extension Chrome RDP, sa fenêtre s'affiche. Confirmez que vous souhaitez vous connecter à l'instance, saisissez votre nom d'utilisateur et votre mot de passe, puis cliquez sur OK pour vous connecter à votre instance.
- Si vous avez choisi de ne pas installer l'extension Chrome RDP, vous avez la possibilité de télécharger le fichier RDP correspondant à votre instance. Servez-vous de ce fichier pour vous connecter à l'instance à l'aide de la connexion Bureau à distance Windows ou du client tiers de votre choix.
Après avoir établi une connexion RDP avec l'instance d'image source, installez IIS et ajoutez une page d'accueil par défaut :
- Sur l'instance d'image source, ouvrez PowerShell en tant qu'administrateur.
Dans PowerShell, collez les éléments suivants pour installer les services et dépendances IIS :
PS C:\> Dism /Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-StaticContent /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-HttpErrors /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HttpLogging /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-RequestMonitor /FeatureName:IIS-Security /FeatureName:IIS-RequestFiltering /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-ManagementConsole /FeatureName:WAS-WindowsActivationService /FeatureName:WAS-ProcessModel /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ConfigurationAPI /All
Une fois les services installés, créez une page d'accueil dans
C:\inetpub\wwwroot
, le répertoire Web par défaut d'IIS :PS C:\> 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 votre navigateur Web, accédez à 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 tout à l'heure.
Créer une image Windows Server 2012 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 :
PS C:> 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 :
PS C:> gcloud compute instances delete src-img --keep-disks boot
Une fois l'instance supprimée, créez une image à partir du disque persistant racine que vous avez conservé :
PS C:> gcloud compute images create win-be-img --source-disk src-img --source-disk-zone us-central1-f
Créer un modèle d'instance à l'aide de l'image source
Maintenant que vous avez créé une image disque à partir du serveur Windows configuré, vous pouvez l'utiliser comme image source pour un modèle d'instance. Par la suite, vous configurerez deux groupes d'instances gérés qui se serviront de ce modèle pour créer des instances.
Sur votre ordinateur local, exécutez la commande suivante pour créer un modèle d'instance en utilisant win-be-img
comme image source, ainsi que rdp-tag
et www-tag
comme tags des instances :
PS C:\> 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
Ensuite, créez des groupes d'instances gérés dans chaque région. 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 au groupe. Par la suite, vous configurerez l'équilibrage de charge pour traiter ces groupes d'instances comme des cibles de 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
us-central1-f
et y ajouter deux instances identiques :PS C:> gcloud compute instance-groups managed create us-be-group ^ --base-instance-name us ^ --size 2 ^ --zone us-central1-f ^ --template win-be-tmpl
Suivez la même procédure dans la zone
europe-west1-d
:PS C:\> gcloud compute instance-groups managed create eu-be-group ^ --base-instance-name eu ^ --size 2 ^ --zone europe-west1-d ^ --template win-be-tmpl
Vérifier l'exécution des instances backend
Dans votre navigateur Web, 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 tout à l'heure.
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 de l'état. Votre équilibreur de charge utilise cette vérification d'état pour vérifier l'état de vos instances backend :
PS C:\> gcloud compute http-health-checks create basic-check
Créez un service de backend :
PS C:\> gcloud compute backend-services create be-srv ^ --protocol HTTP --http-health-check basic-check --global-health-checks
Ajoutez vos groupes d'instances en tant que cibles de backend pour le service de backend :
PS C:\> gcloud beta compute backend-services add-backend be-srv ^ --instance-group us-be-group --zone us-central1-f PS C:\> gcloud beta compute backend-services add-backend be-srv ^ --instance-group eu-be-group --zone europe-west1-d
Créez un mappage d'URL par défaut qui redirige toutes les requêtes entrantes vers vos instances :
PS C:\> gcloud compute url-maps create lb-map --default-service be-srv
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 ci-dessous. Sinon, vous pouvez créer et utiliser un certificat autosigné pour le test. Pour en savoir plus, consultez la section Créer une clé privée et un certificat.Exécutez la commande suivante pour créer une ressource de certificat SSL. Remplacez
<crt_file_path>
par le chemin d'accès local de votre certificat et<key_file_path>
par le chemin d'accès de votre clé privée.PS C:\> gcloud beta compute ssl-certificates create www-cert ^ --certificate
--private-key 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 HTTP(S). Vous chargez donc également votre certificat à cette étape :
PS C:> gcloud compute target-http-proxies create http-lb-proxy ^ --url-map lb-map PS C:> gcloud beta compute target-https-proxies create https-lb-proxy ^ --url-map lb-map --ssl-certificate www-cert
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 IP statique globale, exécutez la commande suivante :
PS C:> gcloud compute addresses create lb-ip --global
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.
Remplacez
<lb_ip_addr>
dans les commandes suivantes par l'adresse IP statique que vous avez créée à l'étape précédente :PS C:\> gcloud compute forwarding-rules create http-fwd-rule ^ --address <lb_ip_addr> --global ^ --target-http-proxy http-lb-proxy --port-range 80 PS C:\> gcloud beta compute forwarding-rules create https-fwd-rule ^ --address <lb_ip_addr> --global ^ --target-https-proxy https-lb-proxy --port-range 443
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 :
PS C:\> gcloud compute backend-services get-health be-srv
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.
Pour envoyer le trafic aux backends, procédez comme suit :
- Ouvrez la page Équilibrage de charge dans Cloud Console.
- Cliquez sur le nom de votre équilibreur de charge.
- Dans la section Backend de cette page, référez-vous à la colonne Opérationnelle(s) pour vérifier que les instances sont bel et bien opérationnelles. Il peut s'écouler quelques instants avant que l'écran n'affiche l'état opérationnel des instances.
- Lorsque l'écran indique que les instances sont opérationnelles, copiez la valeur du champ IP:Port dans la section Frontend et collez-la dans votre navigateur.
Dans votre navigateur, vous pouvez voir votre page de contenu par défaut.
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(S) ne puisse provenir que du service d'équilibrage de charge :
Sur votre ordinateur local, exécutez la commande suivante pour mettre à jour votre règle de pare-feu
www-rule
. Cette commande restreint le trafic de toutes les plages d'adresses IP, à l'exception des plages130.211.0.0/22
et35.191.0.0/16
, qui correspondent aux plages d'adresses IP du proxy d'équilibrage de charge HTTP(S) et de la vérification d'état :PS C:\> gcloud compute firewall-rules update www-rule ^ --source-ranges 130.211.0.0/22,35.191.0.0/16 ^ --target-tags www-tag
Dans votre navigateur Web, accédez à la page Instances de VM.
Cliquez sur chaque instance pour vérifier que l'instance est désormais inaccessible.
Simuler une interruption
Vous pouvez simuler une interruption sur une ou plusieurs instances d'une région afin de pouvoir observer comment la charge est équilibrée parmi les instances opérationnelles restantes.
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 :
PS C:\> netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22,35.191.0.0/16
Sur votre machine locale, exécutez la commande suivante pour vérifier que l'instance signale désormais un état
UNHEALTHY
:PS C:\> gcloud compute backend-services get-health be-srv
Une fois que l'instance a commencé à signaler un état
UNHEALTHY
, envoyez une requête à votre équilibreur de charge. Seules les instances opérationnelles 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 opérationnelle, puis exécutez la commande suivante pour supprimer la règle :
PS C:\> netsh advfirewall firewall delete rule name="Outage Test"
Nettoyer
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 votre projet Google Cloud
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- Dans Cloud Console, accédez à la page Gérer les ressources :
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer les instances
Pour supprimer une instance Compute Engine, procédez comme suit :
- Dans Cloud Console, accédez à la page Instances de VM :
- Cochez la case correspondant à instance que vous souhaitez supprimer.
- Pour supprimer l'instance, cliquez sur Autres actions , cliquez sur Supprimer, puis suivez les instructions.
Supprimer les disques persistants
Pour supprimer un disque Compute Engine, procédez comme suit :
- Accédez à la page Disques dans Cloud Console.
- Cochez la case correspondant à disque que vous souhaitez supprimer.
- Pour supprimer le disque, cliquez sur Supprimer.
Étapes suivantes
En savoir plus sur l'utilisation de Windows sur Compute Engine
Consultez la documentation relative aux instances Windows sur Compute Engine.
Consulter d'autres tutoriels
Explorez des architectures de référence, des schémas, des tutoriels et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.