Configurer l'équilibrage de charge interrégional pour les serveurs Web Microsoft IIS


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 :

Équilibrage de charge interrégional

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 :

  • Compute Engine virtual machine (VM) instances
  • Compute Engine persistent disks
  • Optional: Google-managed SSL certificate
  • Windows Server 2016 machine images

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.

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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Vous pouvez également utiliser Cloud Shell sur la console Google Cloud pour interagir avec Google Cloud, auquel cas vous n'avez pas besoin d'installer Google Cloud CLI.
  13. 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.
  14. 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.
  15. 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 :

  1. Dans la console Google Cloud, accédez à la page Cloud Marketplace ASP.NET Framework.

    Accéder à Cloud Marketplace

  2. Cliquez sur Lancer.

  3. Dans le champ Nom du déploiement, saisissez src-img.

  4. Dans le champ Zone, sélectionnez la zone dans laquelle vous souhaitez déployer l'image.

  5. Dans le champ Version du système d'exploitation Windows Server, sélectionnez 2016.

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

  7. Acceptez les conditions d'utilisation, puis cliquez sur Déployer.

  8. 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 :

  1. Dans Google Cloud Console, accédez à la page Instances de VM.

    Accéder à la page "Instances de VM"

  2. Cliquez sur le nom de votre instance d'image source (src-img).

  3. Cliquez sur Définir un mot de passe Windows.

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

  5. Copiez le mot de passe fourni, puis fermez la boîte de dialogue.

  6. 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 :

  1. Sur l'instance d'image source, ouvrez PowerShell en tant qu'administrateur.

  2. 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 :

  1. Sur l'instance d'image source, ouvrez PowerShell en tant qu'administrateur.
  2. 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.

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

  4. 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 :

  1. 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.
  2. 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

  1. Dans Google Cloud Console, accédez à la page Instances de VM.

    Accéder à la page "Instances de VM"

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

  1. 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
    
  2. 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.

  3. 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
    
  4. 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
    
  5. 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 certificat
    • KEY_FILE_PATH : chemin d'accès au fichier de votre clé privée
  6. 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.
  7. 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.

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

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 :

  1. Dans Google Cloud Console, accédez à la page Équilibrage de charge.

    Accéder à la page "Équilibrage de charge"

  2. Sélectionnez l'onglet Interfaces.

  3. 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 :

  1. Dans Google Cloud Console, accédez à la page Pare-feu.

    Accéder à la page "Pare-feu"

  2. Cliquez sur le nom de la règle de pare-feu qui autorise l'accès externe au port tcp:80.

  3. Cliquez sur Modifier pour modifier la règle de pare-feu.

  4. Dans le champ Plages IPv4 sources, supprimez la valeur 0.0.0.0/0 et 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.

  5. Cliquez sur Enregistrer.

  6. Dans Google Cloud Console, accédez à la page Instances de VM.

    Accéder à la page "Instances de VM"

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

  1. Établissez une connexion RDP à l'instance.
  2. Sur l'instance, ouvrez PowerShell en tant qu'administrateur.
  3. 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
    
  4. 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
    
  5. 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.

  6. 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 :

  1. 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
    
  2. Pour supprimer l'adresse IP statique globale :
    gcloud compute addresses delete lb-ip --global
    
  3. Pour supprimer les proxys HTTP/S :
    gcloud compute target-https-proxies delete https-lb-proxy
    
    gcloud compute target-http-proxies delete http-lb-proxy
    
  4. Supprimer le certificat SSL :
    gcloud compute ssl-certificates delete SSL_CERT
    
  5. Supprimer le mappage d'URL :
    gcloud compute url-maps delete lb-map
    
  6. Pour supprimer le service de backend :
    gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
    
  7. Pour supprimer la vérification d'état HTTP :
    gcloud compute http-health-checks delete basic-check
    
  8. 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
    
  9. Supprimez le modèle d'instance :
    gcloud compute instance-templates delete win-be-tmpl
    
  10. Supprimez l'image :
    gcloud compute images delete IMAGE_NAME
  11. Supprimez le disque :
    gcloud compute disks delete DISK_NAME

Étape suivante