Configurer l'équilibrage de charge proxy SSL

Ce document fournit des instructions pour la configuration de l'équilibrage de charge proxy SSL. Avant de commencer, consultez la page Présentation de l'équilibrage de charge proxy SSL pour en savoir plus sur le fonctionnement de l'équilibrage de charge proxy SSL.

Configurer l'équilibrage de charge proxy SSL

Cet exemple explique comment configurer l'équilibrage de charge proxy SSL au niveau mondial pour un service existant dans deux régions : us-central1 et us-east1. Vous allez configurer les éléments suivants :

  1. Quatre instances réparties dans deux régions
  2. Des groupes d'instances pour organiser les instances
  3. Plusieurs composants backend, parmi lesquels :
    • Vérification d'état : permet de surveiller l'état de santé des instances
    • Service de backend : surveille les groupes d'instances et empêche le dépassement du taux d'utilisation configuré
    • Backends : pour organiser les groupes d'instances
  4. Plusieurs composants frontend, parmi lesquels :
    • Une ressource de certificat SSL. Vous pouvez soit utiliser un certificat autogéré (configuration dans laquelle vous fournissez votre propre certificat SSL), soit un certificat géré par Google (auquel cas Google émet un certificat valide pour tous vos domaines). Pour en savoir plus, consultez la documentation concernant les Types de certificats SSL.
    • Le proxy SSL proprement dit et son certificat SSL
    • Une adresse IPv4 externe statique et une règle de transfert permettant d'envoyer le trafic utilisateur au proxy
    • Une adresse IPv6 externe statique et une règle de transfert permettant d'envoyer le trafic utilisateur au proxy
  5. Une règle de pare-feu qui autorise le trafic provenant de l'équilibreur de charge et du vérificateur d'état à accéder aux instances
  6. Vous pouvez également définir une règle SSL pour contrôler les fonctionnalités SSL que votre équilibreur de charge négocie avec les clients.

Ensuite, vous allez pouvoir tester votre configuration.

Permissions

Pour suivre ce guide, vous devez savoir comment créer des instances et modifier un réseau dans un projet. Vous devez être propriétaire ou éditeur du projet, ou disposer de tous les rôles IAM Compute Engine suivants :

Tâche Rôle requis
Créer des réseaux, des sous-réseaux et des composants de l'équilibreur de charge Administrateur réseau
Ajouter et supprimer des règles de pare-feu Administrateur de sécurité
Créer des instances Administrateur d'instances Compute

Pour en savoir plus, consultez les guides suivants :

Configurer des instances et des groupes d'instances

Cette section explique comment créer des instances et des groupes d'instances, puis ajouter les instances aux groupes d'instances. Un système de production utilise normalement des groupes d'instances gérés qui s'appuient sur des modèles d'instances, mais cette configuration-ci est plus rapide pour la phase de test initiale.

Créer des instances

À des fins de test, installez Apache sur quatre instances réparties équitablement entre deux groupes d'instances. Normalement, vous ne devriez pas avoir à utiliser l'équilibrage de charge proxy SSL pour votre trafic HTTP à l'avenir. Mais, dans le cadre de ces tests, Apache présente l'avantage d'être couramment utilisé et facile à configurer.

Créez ces instances avec le tag ssl-lb. Celui-ci sera utilisé par la suite par la règle de pare-feu.

Console

Créer des instances

  1. Accédez à la page Instances de VM de Google Cloud Console.

    Accéder à la page Instances de VM

  2. Cliquez sur Créer une instance.

  3. Pour Nom, définissez ig-us-central1-1.

  4. Définissez le paramètre Zone sur us-central1-b.

  5. Cliquez sur Gestion, sécurité, disques, réseau et location unique pour afficher les paramètres avancés.

  6. Sous Gestion, renseignez le champ Tags avec ssl-lb.

  7. Définissez le Script de démarrage comme suit :

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | sudo tee /var/www/html/index.html

  8. Conservez les valeurs par défaut des autres champs.

  9. Cliquez sur Créer.

  10. Créez une instance nommée ig-us-central1-2 en réutilisant les mêmes paramètres, excepté pour le Script de démarrage, que vous définissez comme suit :

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | sudo tee /var/www/html/index.html

  11. Créez une instance nommée ig-us-east1-1 en réutilisant les mêmes paramètres, excepté pour le champ Zone, que vous définissez sur us-east1-b, et pour le Script de démarrage, que vous définissez comme suit :

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | sudo tee /var/www/html/index.html

  12. Créez une instance nommée ig-us-east1-2 en réutilisant les mêmes paramètres, excepté pour le champ Zone, que vous définissez sur us-east1-b, et pour le Script de démarrage, que vous définissez comme suit :

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-east1-2</h1></body></html>' | sudo tee /var/www/html/index.html

gcloud

  1. Créez ig-us-central1-1 dans la zone us-central1-b

    gcloud compute instances create ig-us-central1-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags ssl-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo a2ensite default-ssl
          sudo a2enmod ssl
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>SSL load balanced instance - US central 1</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-1].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b n1-standard-1             10.240.0.8  23.251.150.133 RUNNING
  2. Créez ig-us-central1-2 dans la zone us-central1-b

    gcloud compute instances create ig-us-central1-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags ssl-lb \
        --zone us-central1-b \
         --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo a2ensite default-ssl
          sudo a2enmod ssl
          sudo service apache2 restart
           echo '<!doctype html><html><body><h1>SSL load balanced instance - US central 2</h1></body></html>' | tee /var/www/html/index.html
           EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-2].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-2 us-central1-b n1-standard-1             10.240.0.11 23.251.148.160 RUNNING
  3. Créez ig-us-east1-1 dans la zone us-east1-b

    gcloud compute instances create ig-us-east1-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags ssl-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo a2ensite default-ssl
          sudo a2enmod ssl
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>SSL load balanced instance - US east 1</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-1].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-1 us-east1-b n1-standard-1             10.240.0.12 104.196.31.214 RUNNING
  4. Créez ig-us-east1-2 dans la zone us-east1-b

    gcloud compute instances create ig-us-east1-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags ssl-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo a2ensite default-ssl
          sudo a2enmod ssl
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>SSL load balanced instance - US east 2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-2].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-2 us-east1-b n1-standard-1             10.240.0.13 104.196.25.101 RUNNING

Créer un groupe d'instances dans chaque zone et ajouter des instances

Console

  1. Accédez à la page Groupes d'instances de Google Cloud Console.

    Accéder à la page Groupes d'instances

  2. Cliquez sur Créer un groupe d'instances.

  3. Définissez le paramètre Nom sur us-ig1.

  4. Définissez le paramètre Zone sur us-central1-b.

  5. Cliquez sur Préciser le mappage des noms des ports. Un équilibreur de charge envoie le trafic à un groupe d'instances via un port nommé. Créez un port nommé pour mettre le trafic entrant en correspondance avec un numéro de port spécifique.

    1. Sous Mappage des noms des ports, cliquez sur Ajouter un élément.
    2. Saisissez ssl-lb pour le Nom du port et 443 dans le champ Numéros de ports.
  6. Sous Définition de l'instance, cliquez sur Sélectionner des instances existantes.

  7. Dans la liste des instances de VM, sélectionnez ig-us-central1-1 et ig-us-central1-2.

  8. Ne modifiez pas les autres paramètres.

  9. Cliquez sur Créer.

  10. Répétez ces étapes, mais définissez les paramètres suivants :

    • Nom : us-ig2
    • Zone : us-east1-b
    • Nom du port : ssl-lb et Numéros de ports : 443
    • Instances : ig-us-east1-1 et ig-us-east1-2
  11. Vérifiez que vous disposez désormais de deux groupes d'instances, chacun d'entre eux comportant deux instances.

gcloud

  1. Créez le groupe d'instances us-ig1.

    gcloud compute instance-groups unmanaged create us-ig1 --zone us-central1-b
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].
    NAME   ZONE          NETWORK MANAGED INSTANCES
    us-ig1 us-central1-b                 0
  2. Définissez un port nommé pour le groupe d'instances :

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports ssl-lb:443 \
        --zone us-central1-b
    
  3. Ajoutez ig-us-central1-1 et ig-us-central1-2 à us-ig1

    gcloud compute instance-groups unmanaged add-instances us-ig1 \
        --instances ig-us-central1-1,ig-us-central1-2 \
        --zone us-central1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].
  4. Créez le groupe d'instances us-ig2.

    gcloud compute instance-groups unmanaged create us-ig2 --zone us-east1-b
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
    NAME   ZONE       NETWORK MANAGED INSTANCES
    us-ig2 us-east1-b                 0
  5. Définissez un port nommé pour le groupe d'instances :

    gcloud compute instance-groups set-named-ports us-ig2 \
        --named-ports ssl-lb:443 \
        --zone us-east1-b
    
  6. Ajoutez ig-us-east1-1 et ig-us-east1-2 à us-ig2

    gcloud compute instance-groups unmanaged add-instances us-ig2 \
         --instances ig-us-east1-1,ig-us-east1-2 \
         --zone us-east1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].

Vous disposez désormais d'un groupe d'instances dans chacune des deux régions, chacun d'entre eux contenant deux instances.

Configurer l'équilibreur de charge

Console

Créer l'équilibreur de charge et configurer un service de backend

  1. Accédez à la page Équilibrage de charge dans Google Cloud Console.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur Créer un équilibreur de charge.

  3. Sous Équilibrage de charge TCP, cliquez sur Démarrer la configuration.

  4. Pour le paramètre Web ou interne uniquement, sélectionnez D'Internet vers mes VM.

  5. Pour le paramètre Plusieurs régions ou région unique, sélectionnez Plusieurs régions (ou Je ne sais pas encore).

  6. Définissez le paramètre Nom de l'équilibreur de charges sur my-ssl-lb.

  7. Cliquez sur Configuration du backend.

  8. Laissez le paramètre Protocole défini sur TCP. Vous avez également la possibilité de sélectionner *SSL.

  9. Acceptez les valeurs par défaut pour les paramètres Port nommé et Délai avant expiration.

  10. Laissez le paramètre Type de backend défini sur Groupes d'instances.

  11. Sous Nouveau backend, sélectionnez le groupe d'instances us-ig1.

  12. Définissez le paramètre Numéros de ports sur 443.

  13. Ne modifiez pas les autres paramètres.

  14. Sous Nouveau backend, sélectionnez le groupe d'instances us-ig2.

  15. Définissez le paramètre Numéros de ports sur 443.

  16. Ne modifiez pas les autres paramètres.

  17. Cliquez sur OK.

  18. Sous Vérification d'état, sélectionnez Créer une vérification d'état.

    1. Définissez le paramètre Nom de la vérification d'état sur my-ssl-health-check.
    2. Définissez le paramètre Protocole sur SSL.
    3. Ne modifiez pas les autres paramètres.
    4. Cliquez sur Enregistrer et continuer.
  19. Vérifiez qu'une coche verte est affichée à côté de Configuration des backends dans Google Cloud Console. Si ce n'est pas le cas, vérifiez que vous avez bien suivi la procédure ci-dessus dans son intégralité.

Configurer les services frontend

  1. Cliquez sur Configuration du frontend.
  2. Sous Nouveaux IP et port frontend, saisissez le nom my-ssl-lb-forwarding-rule.
  3. Définissez le paramètre Protocole sur SSL.
  4. Sous Adresse IP, sélectionnez Créer une adresse IP.
    1. Saisissez le nom ssl-lb-static-ip.
    2. Cliquez sur Réserver.
  5. Sous Certificat, sélectionnez Créer un certificat.
  6. Saisissez le nom my-ssl-cert.
  7. Si vous choisissez Importer mon certificat, procédez comme suit :
    1. Dans les champs appropriés, importez les éléments suivants :
      • Certificat de clé publique (fichier .crt)
      • Chaîne de certificats (fichier .csr)
      • Clé privée (fichier .key)
    2. Pour ajouter un autre certificat SSL, cliquez sur Ajouter un certificat. Ensuite, sélectionnez un certificat dans le menu déroulant Certificats ou cliquez sur Créer un certificat, puis suivez les instructions ci-dessus.
    3. Activez le protocole de proxy si vous le souhaitez.
    4. Cliquez sur Créer.
  8. Si vous choisissez Créer un certificat géré par Google, spécifiez un Domaine. Chaque fois que vous appuyez sur Entrée, un nouveau champ vide apparaît. Vous pouvez saisir des domaines supplémentaires dans ces champs.
  9. Cliquez sur OK.
  10. Cliquez sur Ajouter une adresse IP et un port frontend.
  11. Saisissez le nom my-ssl-lb-ipv6-forwarding-rule.
  12. Définissez Version IP sur IPv6.
  13. Sous Adresse IP, sélectionnez Créer une adresse IP.
    1. Saisissez le nom ssl-lb-static-ipv6.
    2. Cliquez sur Réserver.
  14. Sous Certificat, sélectionnez my-ssl-cert.
  15. Cliquez sur OK.
  16. Pour ajouter des ressources de certificat en plus de la ressource de certificat SSL principale, procédez comme suit :
    1. Sélectionnez un certificat dans la liste Certificats ou cliquez sur Créer un certificat, puis suivez les instructions ci-dessus.
  17. Cliquez sur OK.
  18. Si vous souhaitez créer une règle SSL (facultatif), procédez comme suit :
    1. Sous Règle SSL, sélectionnez Créer une règle.
    2. Saisissez le nom my-ssl-policy.
    3. Sélectionnez TLS 1.0 en tant que Version minimale de TLS.
    4. Sélectionnez MODERNE pour le paramètre Profil. Les Fonctionnalités activées et les Fonctionnalités désactivées s'affichent.
    5. Cliquez sur Créer.
  19. Vérifiez qu'une coche verte est affichée à côté de Configuration du frontend dans Google Cloud Console. Si ce n'est pas le cas, vérifiez que vous avez bien suivi la procédure ci-dessus dans son intégralité.

Vérifier et finaliser

  1. Cliquez sur Vérification et finalisation.
  2. Vérifiez vos paramètres.
  3. Cliquez sur Créer.

gcloud

Créer une vérification d'état

gcloud compute health-checks create ssl my-ssl-health-check --port 443
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/my-ssl-health-check].
NAME                PROTOCOL
my-ssl-health-check SSL

Créer un service backend

gcloud compute backend-services create my-ssl-lb \
    --global-health-checks \
    --protocol SSL \
    --health-checks my-ssl-health-check \
    --timeout 5m \
    --global
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb].
NAME      BACKENDS PROTOCOL
my-ssl-lb          SSL

Vous pouvez également configurer une communication non chiffrée entre l'équilibreur de charge et les instances à l'aide de l'option --protocol TCP.

Ajouter des groupes d'instances au service de backend

gcloud compute backend-services add-backend my-ssl-lb \
    --instance-group us-ig1 \
    --instance-group-zone us-central1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8 \
    --global
Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb].
gcloud compute backend-services add-backend my-ssl-lb \
    --instance-group us-ig2 \
    --instance-group-zone us-east1-b \
    --balancing-mode UTILIZATION \
    --max-utilization 0.8 \
    --global
Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb].

Configurer vos ressources de certificat SSL

Si vous utilisez des certificats autogérés, vous devez déjà disposer d'au moins un certificat SSL à importer. Si ce n'est pas le cas, reportez-vous à la page Certificats SSL. Lorsque vous utilisez plusieurs certificats SSL, vous devez les créer un par un.

Si vous utilisez des certificats SSL autogérés et que vous ne disposez ni d'une clé privée ni d'un certificat signé, vous pouvez créer et utiliser un certificat autosigné.

Pour créer une ressource de certificat SSL autogéré, procédez comme suit :

gcloud compute ssl-certificates create my-ssl-cert \
    --certificate [CRT_FILE_PATH] \
    --private-key [KEY_FILE_PATH]
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/sslCertificates/my-ssl-cert].
NAME      CREATION_TIMESTAMP
my-ssl-cert 2016-02-20T20:53:33.584-08:00

Pour créer une ressource de certificat SSL géré par Google, procédez comme suit :

    gcloud beta compute ssl-certificates create www-ssl-cert \
      --domains [DOMAIN_1],[DOMAIN_2]

Configurer un proxy SSL cible

L'équilibrage de charge proxy SSL permet de créer un proxy SSL cible comportant de un à quinze certificats SSL. Avant d'exécuter cette commande, vous devez créer une ressource de certificat SSL pour chaque certificat.

Si vous souhaitez activer l'en-tête de proxy, définissez le paramètre --proxy-header sur PROXY_V1 au lieu de none. Vous pouvez éventuellement associer une règle SSL au proxy cible. Commencez par créer la règle.

gcloud compute ssl-policies create my-ssl-policy \
    --profile MODERN --min-tls-version 1.0

Ensuite, associez la règle au proxy cible :

gcloud compute target-ssl-proxies create my-ssl-lb-target-proxy \
    --backend-service my-ssl-lb \
    --ssl-certificates [SSL_CERT_1][,[SSL_CERT_2],...] \
    --ssl-policy my-ssl-policy \
    --proxy-header NONE
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].
NAME                   PROXY_HEADER SERVICE   SSL_CERTIFICATES
my-ssl-lb-target-proxy NONE         my-ssl-lb my-ssl-cert

Réserver des adresses IP statiques globales

Vos clients utilisent ces adresses IP pour accéder à votre service avec équilibrage de charge.

gcloud compute addresses create ssl-lb-static-ipv4 \
        --ip-version=IPV4 \
        --global
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/ssl-lb-static-ip].
NAME                 REGION ADDRESS               STATUS
ssl-lb-static-ip            [LB_STATIC_IP]        RESERVED
gcloud compute addresses create ssl-lb-static-ipv6 \
        --ip-version=IPV6 \
        --global
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/ssl-lb-static-ipv6].
NAME                 REGION ADDRESS                 STATUS
ssl-lb-static-ipv6          [LB_STATIC_IPV6]        RESERVED

Configurer des règles de transfert globales

Créez des règles de transfert globales associées au proxy cible. Remplacez [LB_STATIC_IP] et [LB_STATIC_IPV6] par les adresses IP que vous avez générées lorsque vous avez réservé les adresses IP statiques globales.

gcloud compute forwarding-rules create my-ssl-lb-forwarding-rule \
    --global \
    --target-ssl-proxy my-ssl-lb-target-proxy \
    --address [LB_STATIC_IP] \
    --ports 443
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-ssl-lb-forwarding-rule].
NAME                         REGION IP_ADDRESS     IP_PROTOCOL TARGET
my-ssl-lb-forwarding-rule           [LB_STATIC_IP] SSL         my-ssl-lb-target-proxy
gcloud compute forwarding-rules create my-ssl-lb-ipv6-forwarding-rule \
    --global \
    --target-ssl-proxy my-ssl-lb-target-proxy \
    --address [LB_STATIC_IPV6] \
    --ports 443
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-ssl-lb-ipv6-forwarding-rule].
NAME                           REGION    IP_ADDRESS       IP_PROTOCOL TARGET
my-ssl-lb-ipv6-forwarding-rule           [LB_STATIC_IPV6] SSL         my-ssl-lb-target-proxy

Créer une règle de pare-feu pour l'équilibreur de charge SSL

Configurez le pare-feu pour autoriser le trafic provenant de l'équilibreur de charge et du vérificateur d'état à accéder aux instances.

Console


  1. Accédez à la page Pare-feu de Google Cloud Console.
    Accéder à la page Pare-feu
  2. Cliquez sur Créer une règle de pare-feu.
  3. Saisissez le nom allow-ssl-lb-and-health.
  4. Sous Réseau, sélectionnez default.
  5. Sous Cibles, sélectionnez Tags cibles spécifiés.
  6. Définissez Tags cibles sur ssl-lb.
  7. Définissez Filtre source sur IP ranges.
  8. Définissez Plages d'adresses IP sources sur 130.211.0.0/22 et 35.191.0.0/16.
  9. Définissez Protocoles et ports autorisés sur tcp:443.
  10. Cliquez sur Créer.

gcloud

gcloud compute firewall-rules create allow-ssl-lb-and-health \
     --source-ranges 130.211.0.0/22,35.191.0.0/16 \
     --target-tags ssl-lb \
     --allow tcp:443
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-ssl-lb-and-health].
NAME                     NETWORK SRC_RANGES                  RULES   SRC_TAGS TARGET_TAGS
allow-ssl-lb-and-health default 130.211.0.0/22,35.191.0.0/16 tcp:443          ssl-lb

Si vous utilisez un certificat géré par Google, vérifiez que l'état de votre ressource de certificat est ACTIVE. Pour plus d'informations, consultez la section État d'une ressource de certificat SSL géré par Google.

gcloud beta compute ssl-certificates list

Tester votre équilibreur de charge

Dans votre navigateur Web, connectez-vous à votre adresse IP statique via HTTPS. Dans cette configuration de test, les instances utilisent des certificats autosignés. C'est pourquoi vous voyez un avertissement dans votre navigateur la première fois que vous accédez à cette page. Cliquez sur l'avertissement pour afficher la page. Remplacez [IP_ADDRESS] par l'adresse IPv4 ou IPv6 que vous avez créée précédemment.

https://[IP_ADDRESS]

Vous devriez voir l'un des hôtes de la région la plus proche de vous. Actualisez la page jusqu'à ce que l'autre instance présente dans cette région apparaisse. Pour afficher les instances de l'autre région, arrêtez celles de la région la plus proche de vous.

Vous pouvez également utiliser curl depuis l'interface de ligne de commande de votre machine locale. Si vous utilisez un certificat autosigné sur le proxy SSL, vous devez également spécifier l'option -k. L'option curl -k permet à curl de fonctionner même lorsque vous utilisez un certificat autosigné ou lorsque vous n'utilisez pas de certificat du tout. Si vous disposez d'un certificat normal, vous pouvez supprimer ce paramètre. Vous ne devez utiliser l'option -k que pour tester votre propre site. Dans des circonstances normales, un certificat valide est une mesure de sécurité importante. Souvenez-vous que vous ne devez pas ignorer les avertissements relatifs aux certificats.

Remplacez [IP_ADDRESS] par l'adresse IPv4 ou IPv6 que vous avez créée précédemment.

curl -k https://[IP_ADDRESS]

Commandes supplémentaires pour les proxy SSL

Obtenir la liste des serveurs proxy SSL cibles

Console

Accédez à la page de la liste des proxy cibles dans Google Cloud Console.

Accéder à la page de la liste des proxy cibles

gcloud

gcloud compute target-ssl-proxies list
NAME                   PROXY_HEADER SERVICE   SSL_CERTIFICATES
my-ssl-lb-target-proxy NONE         my-ssl-lb my-ssl-cert

Décrire les proxys SSL cibles

Console

  1. Accédez à la page de la liste des proxy cibles dans Google Cloud Console.

    Accéder à la page de la liste des proxy cibles

  2. Cliquez sur le nom de votre proxy SSL cible.

gcloud

gcloud compute target-ssl-proxies describe [PROXY_NAME]
creationTimestamp: '2016-02-20T20:55:17.633-08:00'
id: '9208913598676794842'
kind: compute#targetSslProxy
name: my-ssl-lb-target-proxy
proxyHeader: NONE
selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy
service: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb
sslCertificates:
– https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/sslCertificates/my-ssl-cert

Supprimer un proxy SSL cible

Pour supprimer un proxy cible, vous devez d'abord supprimer toutes les règles de transfert globales qui font référence à ce proxy.

Console

  1. Accédez à la page de la liste des règles de transfert globales dans Google Cloud Console.

    Accéder à la page de la liste des règles de transfert globales

  2. Cochez la case située en regard du nom de votre règle de transfert globale.

  3. Cliquez sur Supprimer.

  4. Accédez à la page de la liste des proxy cibles dans Google Cloud Console.

    Accéder à la page de la liste des proxy cibles

  5. Cochez la case située en regard du nom de votre proxy SSL cible.

  6. Cliquez sur Supprimer.

Vous pouvez également supprimer tous les composants de l'équilibreur de charge en procédant comme suit :

  1. Accédez à la page Équilibrage de charge dans Google Cloud Console.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur l'icône en forme de corbeille située à droite de la ligne concernée.

  3. Cliquez sur Supprimer l’équilibreur de charge pour confirmer.

gcloud

  1. Supprimez la règle de transfert globale :

    gcloud compute forwarding-rules delete my-ssl-lb-forwarding-rule \
        --global
    
    The following global forwarding rules will be deleted:
     – [my-ssl-lb-forwarding-rule]
    
    Do you want to continue (Y/n)?  y
    
    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-ssl-lb-forwarding-rule].
    
  2. Supprimez le proxy SSL :

    gcloud compute target-ssl-proxies delete my-ssl-lb-target-proxy
    
    The following target ssl proxies will be deleted:
     – [my-ssl-lb-target-proxy]
    
    Do you want to continue (Y/n)?  y
    
    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].
    

Mettre à jour un service de backend pour le proxy SSL cible

Vous pouvez utiliser la commande update pour faire pointer votre proxy SSL vers un autre service de backend. Dans cet exemple, vous allez créer un service de backend et faire pointer le proxy dessus. Ensuite, vous allez effectuer une mise à jour et rediriger le proxy vers le service de backend d'origine.

Console

Utilisez l'outil de ligne de commande gcloud pour cette étape.

gcloud

  1. Créez un deuxième service de backend en utilisant la même vérification d'état :

    gcloud compute backend-services create my-other-backend-service \
        --protocol SSL \
        --health-checks my-ssl-health-check \
        --global
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-other-backend-service].
    NAME                     BACKENDS PROTOCOL
    my-other-backend-service          SSL
  2. Faites pointer le proxy SSL vers le nouveau backend :

    gcloud compute target-ssl-proxies update my-ssl-lb-target-proxy \
        --backend-service my-other-backend-service
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].
    
  3. Ce service de backend ne comporte aucune instance. Par conséquent, si vous tentez d'utiliser le proxy directement, vos pages Web ne s'afficheront pas. Pour continuer à tester la configuration d'origine, faites à nouveau pointer votre proxy SSL vers le premier service backend.

    gcloud compute target-ssl-proxies update my-ssl-lb-target-proxy \
        --backend-service my-ssl-lb
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].
    

Mettre à jour la ressource de certificat SSL pour le proxy SSL cible

Utilisez cette commande pour remplacer le certificat SSL sur le proxy SSL. Vous devez déjà avoir créé toutes les ressources de certificat SSL supplémentaires dont vous aurez besoin.

Console

  1. Accédez à la page Équilibrage de charge dans Google Cloud Console.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur Modifier () à côté du nom de votre équilibreur de charge.

  3. Cliquez sur Configuration du frontend.

  4. Dans le menu déroulant Certificat, sélectionnez le nouveau certificat.

  5. Cliquez sur Add certificate si vous avez besoin d'ajouter d'autres certificats.

  6. Cliquez sur OK.

gcloud

Vous pouvez configurer un nombre limité de certificats SSL par proxy SSL cible.

gcloud compute target-ssl-proxies set-ssl-certificates [PROXY_NAME] \
    --ssl-certificates [SSL_CERT_1][,[SSL_CERT_2],...]
Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].

Options de configuration supplémentaires

Cette section développe l'exemple de configuration et propose d'autres options de configuration. Toutes les tâches décrites ici sont facultatives. Vous pouvez les exécuter dans n'importe quel ordre.

Activer le protocole de PROXY pour la conservation des informations de connexion client

Google Cloud Load Balancing avec proxy SSL met fin aux connexions SSL du client et crée de nouvelles connexions vers les instances. Par conséquent, l'adresse IP et les informations de port d'origine du client ne sont pas conservées par défaut.

Pour conserver et envoyer les informations de connexion d'origine à vos instances, activez le protocole de PROXY (version 1) sur le frontend de l'équilibreur de charge. Dans le cadre de la requête, ce protocole envoie à l'instance un en-tête supplémentaire contenant les éléments d'origine : l'adresse IP source, l'adresse IP de destination, ainsi que les numéros de ports.

Vous pouvez également activer le protocole de PROXY pour les vérifications d'état TCP et SSL.

Assurez-vous que les instances backend de l'équilibreur de charge proxy SSL exécutent des serveurs HTTP(S) compatibles avec les en-têtes de protocole de PROXY. Si les serveurs HTTP(S) ne sont pas configurés pour accepter les en-têtes de protocole de PROXY, les instances backend renvoient des réponses vides.

L'en-tête de protocole de PROXY est généralement constitué d'une seule ligne de texte parfaitement lisible, au format suivant :

PROXY TCP4 <client IP> <load balancing IP> <source port> <dest port>\r\n

Dans cet exemple, l'adresse IP du client est 192.0.2.1, l'adresse IP du service d'équilibrage de charge est 198.51.100.1, le port client est 15221 et le port de destination est 443 :

PROXY TCP4 192.0.2.1 198.51.100.1 15221 443\r\n

Lorsque l'adresse IP du client n'est pas connue, l'équilibreur de charge génère un en-tête de protocole de PROXY au format suivant :

PROXY UNKNOWN\r\n

Mettre à jour l'en-tête du protocole de PROXY pour le proxy

Utilisez cette commande pour modifier l'en-tête du protocole de PROXY pour un proxy SSL cible existant.

Console

  1. Accédez à la page Équilibrage de charge dans Google Cloud Console.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur Modifier () à côté du nom de votre équilibreur de charge.

  3. Cliquez sur Configuration du frontend.

  4. Modifiez la valeur du champ Protocole de proxy.

  5. Cliquez sur Mettre à jour pour enregistrer vos modifications.

gcloud

gcloud compute target-ssl-proxies update my-ssl-lb-target-proxy \
    --proxy-header [NONE | PROXY_V1]

Activer le drainage de connexion

Vous pouvez activer le drainage de connexion sur les services de backend afin de garantir à vos utilisateurs un temps d'interruption minimal lorsqu'une instance assurant la diffusion du trafic est arrêtée, supprimée manuellement ou supprimée par un autoscaler. Pour en savoir plus sur le drainage de connexion, consultez la documentation Activer le drainage de connexion.

Activer l'affinité de session

Les procédures qui suivent montrent comment mettre à jour un service de backend pour l'exemple d'équilibreur de charge proxy SSL afin que le service de backend utilise l'affinité basée sur les adresses IP client.

Lorsque l'affinité basée sur les adresses IP client est activée, l'équilibreur de charge dirige les requêtes d'un client particulier toujours vers la même VM de backend, grâce à un hachage créé à partir de l'adresse IP du client et de l'adresse IP de l'équilibreur de charge (l'adresse IP externe d'une règle de transfert externe).

Console

Pour activer l'affinité de session basée sur les adresses IP client, procédez comme suit :

  1. Accédez à la page Équilibrage de charge dans Google Cloud Console.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur Backends.

  3. Cliquez sur my-ssl-lb (nom du service de backend que vous avez créé pour cet exemple), puis sur Modifier.

  4. Sur la page Détails du service backend, cliquez sur Configuration avancée.

  5. Sous Affinité de session, sélectionnez IP client dans le menu.

  6. Cliquez sur Mettre à jour.

gcloud

Utilisez la commande gcloud suivante pour mettre à jour le service de backend my-ssl-lb, en spécifiant l'affinité de session basée sur les adresses IP client :

gcloud compute backend-services update my-ssl-lb \
    --global \
    --session-affinity=CLIENT_IP

API

Pour activer l'affinité de session basée sur les adresses IP client, envoyez la requête PATCH suivante à la méthode backendServices/patch.

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/us-west1/backendServices/my-ssl-lb
{
  "sessionAffinity": "CLIENT_IP"
}

Composants de l'équilibreur de charge

Vérification de l'état

Les vérifications de l'état déterminent les instances qui peuvent recevoir de nouvelles connexions. Vous pouvez configurer une vérification d'état TCP, SSL, HTTP ou HTTPS pour déterminer l'état de vos instances.

  • Si le service en cours d'exécution sur vos instances backend est basé sur HTTP, utilisez une vérification d'état HTTP.
  • Si le service en cours d'exécution sur vos instances backend est basé sur HTTPS, utilisez une vérification d'état HTTPS.
  • Si le service en cours d'exécution sur vos instances backend est basé sur SSL, utilisez une vérification d'état SSL.
  • À moins que vous n'ayez une raison spécifique d'utiliser un autre type de vérification d'état, utilisez une vérification d'état TCP.

Règles de pare-feu de la vérification d'état

Les tests de vérification de l'état de vos instances proviennent d'adresses situées dans les plages 130.211.0.0/22 et 35.191.0.0/16. Vos règles de pare-feu doivent autoriser ces connexions sur le port concerné. Pour obtenir des instructions détaillées, reportez-vous à la section Créer une règle de pare-feu pour l'équilibreur de charge SSL.

Pour plus d'informations sur les vérifications d'état, reportez-vous à la page Vérifications d'état.

Service backend

Une ressource de service de backend fournit des informations de configuration à l'équilibreur de charge, parmi lesquelles :

  • Les services de backend dirigent le trafic entrant vers un ou plusieurs backends associés, selon le mode d'équilibrage de charge utilisé (ce point sera abordé dans la suite de ce document). Chaque backend se compose d'un groupe d'instances et fait l'objet d'une configuration supplémentaire dont l'objectif est d'équilibrer le trafic entre les instances du groupe. Chaque groupe d'instances est composé d'une ou plusieurs instances.
  • En outre, chaque service de backend spécifie les vérifications d'état qui sont effectuées pour les instances appartenant aux groupes d'instances ajoutés au service.
  • La durée de vie des connexions proxy SSL inactives passant par l'équilibreur de charge est limitée par le délai avant expiration du service de backend.

Lorsque vous configurez un service de backend, vous devez ajouter des instances et spécifier un mode d'équilibrage qui détermine la quantité de trafic que l'équilibreur de charge peut envoyer aux instances. Une fois la limite atteinte, les requêtes supplémentaires sont envoyées à l'instance la plus proche de l'utilisateur, si celle-ci dispose d'une capacité suffisante.

Le proxy SSL accepte les modes d'équilibrage suivants :

  • UTILIZATION (valeur par défaut) : les instances peuvent accepter le trafic si l'utilisation du backend du groupe d'instances est inférieure à une valeur spécifiée. Pour définir cette valeur, utilisez le paramètre --max-utilization et indiquez une valeur comprise entre 0.0 (0 %) et 1.0 (100 %). La valeur par défaut est 0.8 (80 %).
  • CONNECTION : les instances peuvent accepter le trafic si le nombre de connexions est inférieur à une valeur spécifiée. Cette valeur peut être l'une des suivantes :
    • --max-connections : nombre maximal de connexions sur l'ensemble des instances de backend du groupe d'instances.
    • --max-connections-per-instance : nombre maximal de connexions qu'une instance, prise isolément, peut gérer. Les requêtes sont transférées si la moyenne pour le groupe ne dépasse pas ce nombre.

Vous pouvez spécifier --max-connections ou --max-connections-per-instance même si vous avez défini le mode d'équilibrage sur UTILIZATION. Si vous spécifiez à la fois --max-utilization et un paramètre de connexion, le groupe est considéré comme totalement utilisé lorsque l'une de ces deux limites est atteinte.

Pour plus d'informations sur la ressource du service de backend, voir Présentation des services de backend.

Certificats SSL

Pour utiliser l'équilibrage de charge proxy SSL, vous devez créer au moins un certificat SSL pouvant être utilisé par le proxy cible pour l'équilibreur de charge. Vous pouvez configurer le proxy cible avec un maximum de quinze certificats SSL.

Ces certificats peuvent être autogérés ou gérés par Google.

Si vous utilisez des certificats SSL autogérés et que vous ne disposez ni d'une clé privée ni d'un certificat signé, vous pouvez créer et utiliser un certificat autosigné à des fins de test. Pour plus d'informations, consultez la section Créer une clé privée et un certificat. N'utilisez pas de certificat autosigné en production. Si vous utilisez plusieurs certificats SSL, vous devez créer une ressource de certificat SSL pour chacun d'entre eux.

Règle de transfert

Créez une règle de transfert pour transférer des adresses IP et des ports spécifiques vers le proxy SSL cible. Lorsque le trafic client arrive sur votre adresse IP externe, cette règle de transfert indique au réseau qu'il faut transférer ce trafic à votre proxy SSL.

Pour en savoir plus, consultez la page Règles de transfert.

Recommandations

  • Vous devriez configurer l'équilibreur de charge de façon à ajouter un préfixe d'en-tête de protocole PROXY version 1 afin de conserver les informations de connexion d'origine.
  • Si votre trafic est de type HTTPS, vous devriez utiliser l'équilibrage de charge HTTPS et non l'équilibrage de charge proxy SSL.

Monitoring

Pour plus d'informations sur la surveillance de l'équilibrage de charge proxy SSL, reportez-vous à la page Surveillance du proxy TCP/SSL.

Dépannage

Échec du chargement des pages à partir de l'adresse IP de l'équilibreur de charge

Vérifier l'intégrité des instances

Vérifiez que les instances sont OPÉRATIONNELLES.

gcloud compute backend-services get-health my-ssl-lb
---
backend: https://www.googleapis.com/resourceviews/v1/projects/[PROJECT_ID]/zones/us-central1-b/resourceViews/us-ig1
status:
  kind: compute#backendServiceGroupHealth
---
backend: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2
status:
  kind: compute#backendServiceGroupHealth

Vérifier que la règle de pare-feu est correcte

  • Le vérificateur d'état et l'équilibreur de charge ont tous deux besoin de ces adresses IP pour autoriser le trafic : 130.211.0.0/22 et 35.191.0.0/16.
  • Si vous utilisez SSL entre l'équilibreur de charge et les instances, utilisez les vérifications d'état SSL. Vérifiez que la règle de pare-feu autorise l'accès au port tcp:443 à partir des plages d'adresses IP sources 130.211.0.0/22 et 35.191.0.0/16.
  • Si vous utilisez TCP entre l'équilibreur de charge et les instances, utilisez les vérifications d'état TCP. Vérifiez que la règle de pare-feu autorise l'accès au port tcp:80 à partir des plages d'adresses IP sources 130.211.0.0/22 et 35.191.0.0/16.
  • Si vous utilisez les tags d'instances, vérifiez que votre tag est répertorié sous TARGET_TAGS dans la règle de pare-feu et assurez-vous que toutes vos instances sont identifiées à l'aide de ce tag. Dans cet exemple, les instances sont associées au tag ssl-lb.
gcloud compute firewall-rules list
NAME                      NETWORK SRC_RANGES                  RULES                        SRC_TAGS TARGET_TAGS
allow-ssl-lb-and-health  default 130.211.0.0/22,35.191.0.0/16 tcp:443                      ssl-lb

Essayer d'accéder aux instances individuelles

Définissez une règle de pare-feu temporaire permettant d'accéder individuellement à vos instances, puis essayez de charger une page à partir d'une instance spécifique.

  1. Ouvrez le pare-feu afin d'autoriser le trafic provenant de n'importe quelle source vers les instances identifiées à l'aide de tags : Pour cela, créez un filtre source qui définit la plage d'adresses IP sources sur 0.0.0.0/0 pour le trafic HTTPS vers les instances avec le tag ssl-lb.

    gcloud compute firewall-rules create allow-ssl-0-0-0-0 \
        --source-ranges 0.0.0.0/0 \
        --target-tags ssl-lb \
        --allow tcp:443
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-ssl-0-0-0-0].
    NAME              NETWORK SRC_RANGES RULES   SRC_TAGS TARGET_TAGS
    allow-ssl-0-0-0-0 default 0.0.0.0/0  tcp:443          ssl-lb
  2. Recherchez l'adresse IP externe (EXTERNAL_IP) de l'une des instances.

    gcloud compute instances list
    
    NAME             ZONE           MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b  n1-standard-1             10.240.0.8  EXTERNAL_IP RUNNING
    ig-us-central1-2 us-central1-b  n1-standard-1             10.240.0.11 EXTERNAL_IP RUNNING
    ig-us-east1-1    us-east1-b     n1-standard-1             10.240.0.12 EXTERNAL_IP RUNNING
    ig-us-east1-2    us-east1-b     n1-standard-1             10.240.0.13 EXTERNAL_IP RUNNING
  3. Accédez à une ou plusieurs instances directement depuis votre navigateur.

    https://[EXTERNAL_IP]
    
  4. S'il vous est impossible d'accéder aux instances à l'aide de cette méthode, vérifiez que votre logiciel fonctionne correctement. Si c'est le cas, vérifiez que la règle de pare-feu de votre équilibreur de charge est correcte :

    gcloud compute firewall-rules describe allow-ssl-lb-and-health
    
    allowed:
      IPProtocol: tcp
      ports:
      '443'
    creationTimestamp: '2016-02-20T22:27:15.094-08:00'
    description: ''
    id: '5304629236729177644'
    kind: compute#firewall
    name: allow-130-211-0-0-22-ssl
    network: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default
    selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-ssl-lb-and-health
    sourceRanges:
      130.211.0.0/22,35.191.0.0/16
    targetTags:
      ssl-lb
  5. Une fois que vous avez la certitude que les instances fonctionnent correctement, retirez la règle de pare-feu "depuis n'importe quelle source" :

    gcloud compute firewall-rules delete allow-ssl-0-0-0-0
    
    The following firewalls will be deleted:
       [allow-ssl-0-0-0-0]
    Do you want to continue (Y/n)?  y
    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-ssl-0-0-0-0].
    

Étapes suivantes