Configurer l'équilibrage de charge proxy TCP

L'équilibrage de charge proxy TCP de Google Cloud vous permet d'utiliser une adresse IP unique pour vos utilisateurs du monde entier. L'équilibrage de charge proxy TCP redirige automatiquement le trafic vers les instances les plus proches de l'utilisateur.

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

Présentation

Cet exemple vous explique comment configurer l'équilibrage de charge proxy TCP au niveau mondial pour un service existant dans deux régions : us-central1 et us-east1. Pour les besoins de cet exemple, le service est un ensemble de serveurs Apache configurés pour répondre sur le port 110. De nombreux navigateurs n'autorisent pas le port 110. La section consacrée aux tests utilise donc curl.

Dans cet exemple, vous configurez les éléments suivants :

  1. Quatre instances réparties entre deux régions
  2. Des groupes d'instances contenant les instances
  3. Une vérification d'état pour examiner l'état de l'instance
  4. Un service de backend qui surveille les instances et les empêche de dépasser le taux d'utilisation configuré
  5. Un proxy TCP cible
  6. Une adresse IPv4 externe statique et une règle de transfert permettant d'envoyer le trafic utilisateur au proxy
  7. Une adresse IPv6 externe statique et une règle de transfert permettant d'envoyer le trafic utilisateur au proxy
  8. 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

Une fois l'équilibreur de charge configuré, vous pouvez tester la configuration.

Autorisations

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 groupes d'instances simples et y ajouter des instances, puis ajouter ces instances au service de backend avec une vérification d'état. 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 est plus rapide pour la phase de test initiale.

Configurer des instances

À des fins de test, installez Apache sur quatre instances réparties équitablement entre deux groupes d'instances. En règle générale, l'équilibrage de charge proxy TCP n'est pas utilisé pour le trafic HTTP. Néanmoins, Apache offre l'avantage d'être couramment utilisé et facile à configurer dans le cadre de ces tests.

Dans cet exemple, vous créez des instances avec le tag tcp-lb. Ce tag sera utilisé ultérieurement 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 Région sur us-central1.
  5. Définissez le paramètre Zone sur us-central1-b.
  6. Cliquez sur Gestion, sécurité, disques, réseau et location unique pour afficher les paramètres avancés.
  7. Sous Gestion, cliquez sur Réseau et renseignez le champ Tags avec tcp-lb.
  8. Cliquez sur Gestion, puis saisissez le script suivant dans le champ Script de démarrage :
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  9. Conservez les valeurs par défaut des autres champs.
  10. Cliquez sur Créer.
  11. Créez une instance nommée ig-us-central1-2 en utilisant les mêmes paramètres, excepté pour le champ Script de démarrage, dans lequel vous allez insérer le script suivant :
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | sudo tee /var/www/html/index.html
  12. Créez ig-us-east1-1 en utilisant les mêmes paramètres, excepté pour les champs Région et Zone, que vous définissez respectivement sur us-east1 et us-east1-b. Dans le champ Script de démarrage, saisissez le script suivant :
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  13. Créez ig-us-east1-2 en utilisant les mêmes paramètres, excepté pour les champs Région et Zone, que vous définissez respectivement sur us-east1 et us-east1-b. Dans le champ Script de démarrage, saisissez le script suivant :
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    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 tcp-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-central1-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 tcp-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-central1-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 tcp-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-east1-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 tcp-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-east1-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 Cloud Console.
    Accéder à la page Groupes d'instances
  2. Cliquez sur Créer un groupe d'instances.
  3. Cliquez sur Nouveau groupe d'instances non géré.
  4. Définissez le paramètre Nom sur us-ig1.
  5. Définissez le paramètre Zone sur us-central1-b.
  6. 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 mapper le trafic entrant sur un numéro de port spécifique.
    1. Définissez le paramètre Nom du port sur tcp110.
    2. Définissez le paramètre Numéros de ports sur 110.
  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 valeurs suivantes :
    • Nom : us-ig2
    • Région : us-east1
    • Zone : us-east1-b
    • Nom du port : tcp110
    • Numéros de ports : 110
    • Instances : ig-us-east1-1 et ig-us-east1-2

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    LOCATION       SCOPE  NETWORK  MANAGED  INSTANCES
    us-ig1  us-central1-b  zone                     0
    
  2. Définissez un port désigné pour le groupe d'instances.

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports tcp110:110 \
        --zone us-central1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
  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    LOCATION    SCOPE  NETWORK  MANAGED  INSTANCES
    us-ig2  us-east1-b  zone                     0
    
  5. Définissez un port désigné pour le groupe d'instances.

    gcloud compute instance-groups set-named-ports us-ig2 \
        --named-ports tcp110:110 \
        --zone us-east1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
  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 chaque région. Chaque groupe d'instances possède deux instances de VM.

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. Démarrez la configuration de l'équilibreur de charge :
    1. Sous Équilibrage de charge TCP, cliquez sur Démarrer la configuration.
    2. Définissez Web ou interne uniquement sur D'Internet vers mes VM.
    3. Définissez Plusieurs régions ou région uniques sur Plusieurs régions.
    4. Cliquez sur Continuer.
    5. Définissez le paramètre Nom sur my-tcp-lb.
    6. Cliquez sur Configuration du backend.
    7. Sous Type de backend, sélectionnez Groupes d'instances.
    8. Sous Protocole, sélectionnez TCP.
  4. Configurez le premier backend :
    1. Sous Nouveau backend, sélectionnez le groupe d'instances us-ig1.
    2. Conservez les valeurs par défaut restantes.
  5. Configurez le deuxième backend :
    1. Cliquez sur Ajouter le backend.
    2. Sélectionnez le groupe d'instances us-ig2.
    3. Sous Numéros de port, supprimez 80 et ajoutez 110.
  6. Configurez la vérification d'état :
    1. Sous Vérification d'état, sélectionnez Créer une vérification d'état.
    2. Définissez le paramètre Nom de la vérification d'état sur my-tcp-health-check.
    3. Sous Protocole, sélectionnez TCP.
    4. Définissez le paramètre Port sur 110.
  7. Conservez les valeurs par défaut restantes.
  8. Cliquez sur Enregistrer et continuer.
  9. Dans Google Cloud Console, vérifiez qu'une coche apparaît à côté de Configuration du backend. Si ce n'est pas le cas, vérifiez que vous avez bien suivi la procédure ci-dessous dans son intégralité.

Configurer les services frontend

  1. Cliquez sur Configuration du frontend.
  2. Ajoutez la première règle de transfert :
    1. Saisissez le nom my-tcp-lb-forwarding-rule.
    2. Sous Protocole, sélectionnez TCP.
    3. Sous Adresse IP, sélectionnez Créer une adresse IP :
      1. Saisissez le nom tcp-lb-static-ip.
      2. Cliquez sur Réserver.
    4. Définissez le paramètre Port sur 110.
    5. Dans cet exemple, n'activez pas le protocole de proxy, car il ne fonctionne pas avec le logiciel Apache HTTP Server. Pour en savoir plus, consultez la section Protocole de proxy.
    6. Cliquez sur OK.
  3. Ajoutez la deuxième règle de transfert :
    1. Cliquez sur Ajouter une adresse IP et un port frontend.
    2. Saisissez le nom my-tcp-lb-ipv6-forwarding-rule.
    3. Sous Protocole, sélectionnez TCP.
    4. Définissez Version IP sur IPv6.
    5. Sous Adresse IP, cliquez sur Créer une adresse IP.
      1. Saisissez un nom de tcp-lb-ipv6-static-ip.
      2. Cliquez sur Réserver.
    6. Définissez le paramètre Port sur 110.
    7. Dans cet exemple, n'activez pas le protocole de proxy, car il ne fonctionne pas avec le logiciel Apache HTTP Server. Pour en savoir plus, consultez la section Protocole de proxy.
    8. Cliquez sur OK.
  4. Dans Google Cloud Console, vérifiez qu'une coche apparaît à côté de Configuration du frontend. Dans le cas contraire, 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 tcp my-tcp-health-check --port 110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/my-tcp-health-check].
NAME                PROTOCOL
my-tcp-health-check TCP

Créer un service backend

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

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

Ajouter des groupes d'instances au service de backend

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

Configurer un proxy TCP cible

gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy \
    --backend-service my-tcp-lb \
    --proxy-header NONE
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetTcpProxies/my-tcp-lb-target-proxy].
NAME                   PROXY_HEADER SERVICE
my-tcp-lb-target-proxy NONE         my-tcp-lb

Réserver des adresses IPv4 et IPv6 statiques globales

Les clients accèdent à votre service à équilibrage de charge à l'aide de ces adresses IP.

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

Configurer des règles de transfert globales pour les deux adresses

Au lieu de [LB_STATIC_IPV4] et [LB_STATIC_IPV6], saisissez les adresses IP correspondantes. Vous pouvez utiliser gcloud compute addresses list pour les trouver.

gcloud beta compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
    --global \
    --target-tcp-proxy my-tcp-lb-target-proxy \
    --address [LB_STATIC_IPV4] \
    --ports 110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-tcp-lb-ipv4-forwarding-rule].
NAME                           REGION IP_ADDRESS       IP_PROTOCOL TARGET
my-tcp-lb-ipv4-forwarding-rule        [LB_STATIC_IPV4] TCP         my-tcp-lb-target-proxy
gcloud beta compute forwarding-rules create my-tcp-lb-ipv6-forwarding-rule \
    --global \
    --target-tcp-proxy my-tcp-lb-target-proxy \
    --address [LB_STATIC_IPV6] \
    --ports 110
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-tcp-lb-ipv6-forwarding-rule].
NAME                           REGION IP_ADDRESS       IP_PROTOCOL TARGET
my-tcp-lb-ipv6-forwarding-rule        [LB_STATIC_IPV6] TCP         my-tcp-lb-target-proxy

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

Configurez le pare-feu pour autoriser le trafic provenant de l'équilibreur de charge et du vérificateur d'état à accéder aux instances. Dans ce cas, nous ouvrons le port TCP 110. La vérification d'état utilise le même port. Comme le trafic entre l'équilibreur de charge et vos instances utilise le protocole IPv4, seules les plages IPv4 doivent être ouvertes.

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-tcp-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 tcp-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:110.
  10. Cliquez sur Créer.

gcloud


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

Tester l'équilibreur de charge

Après avoir remplacé LB_IP par l'adresse IPv4 ou IPv6 de votre équilibreur de charge dans le champ IP:Port, vous pouvez accéder à votre équilibreur de charge en exécutant la commande suivante :

curl LB_IP:110

Créer des vérifications d'é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 HTTP/2, utilisez une vérification d'état HTTP/2.
  • 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 d'état de vos instances à charge équilibrée proviennent d'adresses comprises dans les plages 130.211.0.0/22 et 35.191.0.0/16. Il s'agit des plages d'adresses IP utilisées par l'équilibreur de charge pour se connecter aux instances backend. Vos règles de pare-feu doivent autoriser ces connexions sur le port approprié.

Consultez la page Vérifications d'état pour en savoir plus à ce sujet.

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.

Protocole de PROXY pour la conservation des informations de connexion client

L'équilibrage de charge proxy TCP met fin aux connexions TCP du client et crée des connexions vers les instances. Par défaut, l'adresse IP et les informations de port d'origine du client ne sont pas conservées.

Pour conserver et envoyer les informations de connexion d'origine à vos instances, activez le protocole de PROXY (version 1). 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.

Si vous définissez le protocole de PROXY pour le trafic utilisateur, vous devez également le définir pour les vérifications d'état si vous diffusez le trafic et vérifiez l'état sur le même port.

L'en-tête du 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

Voici un exemple de protocole de PROXY :

PROXY TCP4 192.0.2.1 198.51.100.1 15221 110\r\n

Lorsque l'adresse IP du client est 192.0.2.1, l'adresse IP de l'équilibrage de charge est 198.51.100.1, le port client est 15221 et le port de destination est 110.

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

Si vous effectuez la vérification d'état et la diffusion de contenu sur le même port, vous pouvez définir la vérification d'état --proxy-header pour qu'elle corresponde aux paramètres de votre équilibreur de charge. Ce tutoriel utilise le port 110 pour la vérification d'état et la diffusion de contenu. Si vous utilisez des ports différents, vous pouvez les définir pour vérifier l'état, le cas échéant.

Activer l'affinité de session

L'exemple de configuration crée un service de backend sans affinité de session.

Ces procédures vous montrent comment mettre à jour un service de backend pour l'exemple d'équilibreur de charge de proxy TCP afin que ce service utilise l'affinité basée sur les adresses IP client ou l'affinité basée sur les cookies générés.

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 vers la même VM de backend en fonction d'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-tcp-lb (nom du service de backend que vous avez créé pour cet exemple), puis sur Modifier.
  4. Sur la page Détails du service de 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-tcp-lb, en spécifiant l'affinité de session basée sur les adresses IP client :

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

API

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

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

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.

Équilibrage de charge proxy TCP et pare-feu Google Cloud

Contrairement à l'équilibrage de la charge réseau, vous ne pouvez pas contrôler l'accès à l'équilibrage de charge proxy TCP avec des règles de pare-feu. En effet, l'équilibrage de charge proxy TCP est mis en œuvre à la périphérie de Google Cloud et les règles de pare-feu sont mises en œuvre sur les instances du centre de données.

Monitoring

Pour configurer la surveillance de votre équilibreur de charge proxy TCP, consultez la page Utiliser la surveillance.

Dépannage

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

Comme le port 110 est restreint pour de nombreux navigateurs, vous devez tester votre équilibreur de charge à l'aide d'un outil tel que curl. Si vous ne parvenez pas à accéder à vos pages à l'aide de curl, le reste de cette section décrit plusieurs procédures de dépannage.

Vérifier l'état des instances

Vérifiez que les instances sont OPÉRATIONNELLES.

gcloud compute backend-services get-health [BACKEND-SERVICE]

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

  • Le vérificateur d'état et l'équilibreur de charge nécessitent l'ouverture des adresses IP 130.211.0.0/22 et 35.191.0.0/16.
  • Si vous utilisez des tags d'instance, assurez-vous que le tag est répertorié sous TARGET_TAGS dans la règle de pare-feu et que toutes vos instances sont identifiées à l'aide de ce tag. Dans cet exemple, les instances sont associées au tag tcp-lb.
gcloud compute firewall-rules list
NAME                      NETWORK SRC_RANGES                    RULES          SRC_TAGS TARGET_TAGS
allow-tcplb-and-health    default 130.211.0.0/22,35.191.0.0/16  tcp:110                 tcp-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 TCP sur le port 110 vers les instances comportant le tag tcp-lb.

    gcloud compute firewall-rules create allow-tcp110-0-0-0-0 \
        --source-ranges 0.0.0.0/0 \
        --target-tags tcp-lb \
        --allow tcp:110
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-0-0-0-0].
    NAME                 NETWORK SRC_RANGES RULES   SRC_TAGS TARGET_TAGS
    allow-tcp110-0-0-0-0 default 0.0.0.0/0  tcp:110          tcp-lb
    
  2. Recherchez l'adresse 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.

    curl [EXTERNAL_IP]:110
    
  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 vous pouvez accéder à vos instances individuellement, vérifiez que la règle de pare-feu de votre équilibreur de charge est correcte.

    gcloud compute firewall-rules describe allow-tcp-lb-and-health
    
    allowed:
      IPProtocol: tcp
        ports:
        '110'
    creationTimestamp: '2017-03-16T15:21:34.119-07:00'
    description: ''
    id: '8144207668574597377'
    kind: compute#firewall
    name: allow-tcp-lb-and-health
    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-tcp-lb-and-health
    sourceRanges:
      130.211.0.0/22
      35.191.0.0/16
    targetTags:
      tcp-lb
  5. Lorsque vous êtes sûr que les instances fonctionnent correctement, retirez la règle de pare-feu "depuis n'importe quelle source" :

    gcloud compute firewall-rules delete allow-tcp110-0-0-0-0
    
    The following firewalls will be deleted:
       [allow-tcp110-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-tcp110-0-0-0-0].

Étape suivante