Configurer un équilibreur de charge réseau passthrough externe pour plusieurs protocoles IP

Ce guide fournit des instructions pour créer des équilibreurs de charge réseau passthrough externes basés sur un service de backend qui équilibrent la charge du trafic TCP, UDP, ESP, GRE, ICMP et ICMPv6. Vous pouvez utiliser cette configuration si vous souhaitez équilibrer la charge du trafic dont les protocoles IP ne sont pas TCP ou UDP. Les équilibreurs de charge réseau passthrough externes basés sur un pool cible ne sont pas compatibles avec cette fonctionnalité.

Pour configurer un équilibreur de charge réseau passthrough externe pour des protocoles IP autres que TCP ou UDP, vous devez créer une règle de transfert avec un protocole défini sur L3_DEFAULT. Cette règle de transfert pointe vers un service de backend dont le protocole est défini sur UNSPECIFIED.

Dans cet exemple, nous utilisons deux équilibreurs de charge réseau passthrough externe pour répartir le trafic entre les VM de backend de deux groupes d'instances gérés zonaux dans la région us-central1. Les deux équilibreurs de charge reçoivent le trafic sur la même adresse IP externe.

L'un deux contient une règle de transfert avec le protocole TCP et le port 80, et l'autre une règle de transfert avec le protocole L3_DEFAULT. Le trafic TCP arrivant à l'adresse IP sur le port 80 est géré par la règle de transfert TCP. Tout autre trafic qui ne correspond pas à la règle de transfert spécifique à TCP est géré par la règle de transfert L3_DEFAULT.

Équilibreur de charge réseau passthrough externe avec groupes d'instances gérés zonaux
Équilibreur de charge réseau passthrough externe avec des groupes d'instances gérés zonaux

Dans ce scénario, le trafic est réparti entre les instances opérationnelles. Pour ce faire, vous devez créer des vérifications d'état TCP afin de vous assurer que le trafic n'est envoyé qu'aux instances opérationnelles.

L'équilibreur de charge réseau passthrough externe est un équilibreur de charge régional. Tous les composants de l'équilibreur de charge doivent se trouver dans la même région.

Avant de commencer

Installez Google Cloud CLI. Pour une présentation complète de l'outil, consultez la présentation de gcloud CLI. Vous trouverez des commandes liées à l'équilibrage de charge dans la documentation de référence de l'API et de gcloud CLI.

Si vous n'avez pas encore utilisé gcloud CLI, exécutez d'abord la commande gcloud init pour vous authentifier.

Dans ce guide, nous partons du principe que vous maîtrisez bash.

Configurer le réseau et les sous-réseaux

L'exemple de cette page utilise un réseau VPC en mode personnalisé nommé lb-network. Vous pouvez utiliser un réseau VPC en mode automatique si vous souhaitez uniquement gérer le trafic IPv4. Cependant, le trafic IPv6 requiert un sous-réseau en mode personnalisé.

Le trafic IPv6 nécessite également un sous-réseau dual stack (stack-type défini sur IPv4_IPv6). Lorsque vous créez un sous-réseau à deux piles sur un réseau VPC en mode personnalisé, choisissez un type d'accès IPv6 pour le sous-réseau. Pour cet exemple, nous définissons le paramètre ipv6-access-type du sous-réseau sur EXTERNAL. Cela signifie que les nouvelles VM de ce sous-réseau peuvent se voir attribuer des adresses IPv4 externes et des adresses IPv6 externes.

Les backends et les composants de l'équilibreur de charge utilisés pour cet exemple sont situés dans cette région et ce sous-réseau :

  • Région : us-central1
  • Sous-réseau: lb-subnet, avec plage d'adresses IPv4 principale 10.1.2.0/24. Bien que vous choisissiez la plage d'adresses IPv4 configurée sur le sous-réseau, la plage d'adresses IPv6 est attribuée automatiquement. Google fournit un bloc CIDR IPv6 de taille fixe (/64).

Pour créer les exemples de réseau et de sous-réseaux, procédez comme suit :

Console

Pour assurer la compatibilité avec le trafic IPv4 et IPv6, procédez comme suit:

  1. Dans Google Cloud Console, accédez à la page Réseaux VPC.

    Accéder aux réseaux VPC

  2. Cliquez sur Créer un réseau VPC.

  3. Saisissez le nom lb-network.

  4. Dans la section Sous-réseaux :

    • Définissez Mode de création du sous-réseau sur Personnalisé.
    • Dans la section Nouveau sous-réseau, configurez les champs suivants, puis cliquez sur OK :
      • Nom : lb-subnet
      • Région : us-central1
      • Type de pile d'adresses IP: IPv4 et IPv6 (double pile)
      • Plage IPv4: 10.1.2.0/24
        Bien que vous puissiez configurer une plage d'adresses IPv4 pour le sous-réseau, vous ne pouvez pas choisir la plage d'adresses IPv6 pour Le sous-réseau. Google fournit un bloc CIDR IPv6 de taille fixe (/64).
      • Type d'accès IPv6: Externe
  5. Cliquez sur Créer.

Pour assurer la compatibilité avec le trafic IPv4 uniquement, procédez comme suit :

  1. Dans Google Cloud Console, accédez à la page Réseaux VPC.

    Accéder aux réseaux VPC

  2. Cliquez sur Créer un réseau VPC.

  3. Saisissez le nom lb-network.

  4. Dans la section Sous-réseaux :

    • Définissez Mode de création du sous-réseau sur Personnalisé.
    • Dans la section Nouveau sous-réseau, configurez les champs suivants, puis cliquez sur OK :
      • Nom : lb-subnet
      • Région : us-central1
      • Type de pile IP: IPv4 (single Stack)
      • Plage IPv4 : 10.1.2.0/24
  5. Cliquez sur Créer.

gcloud

  1. Créez le réseau VPC en mode personnalisé:

    gcloud compute networks create lb-network \
        --subnet-mode=custom
    
  2. Au sein du réseau lb-network, créez un sous-réseau pour les backends dans la région us-central1.

    Pour le trafic IPv4 et IPv6, utilisez la commande suivante pour créer un sous-réseau à double pile :

    gcloud compute networks subnets create lb-subnet \
      --stack-type=IPV4_IPv6 \
      --ipv6-access-type=EXTERNAL \
      --network=lb-network \
      --range=10.1.2.0/24 \
      --region=us-central1
    

    Pour le trafic IPv4 uniquement, utilisez la commande suivante:

    gcloud compute networks subnets create lb-subnet \
      --network=lb-network \
      --range=10.1.2.0/24 \
      --region=us-central1
    

Créer les groupes d'instances gérés zonaux

Dans ce scénario d'équilibrage de charge, vous allez créer deux groupes d'instances gérés zonaux Compute Engine et installer un serveur Web Apache sur chaque instance.

Pour gérer le trafic IPv4 et IPv6, configurez les VM backend en une pile double. Définissez le paramètre stack-type de la VM sur IPv4_IPv6. Les VM héritent également du paramètre ipv6-access-type (dans cet exemple, EXTERNAL) du sous-réseau. Pour en savoir plus sur les exigences IPv6, consultez la page Présentation de l'équilibreur de charge réseau passthrough externe : règles de transfert.

Pour utiliser des VM existantes comme backends, mettez-les à jour en pile double à l'aide de la commande gcloud compute instances network-interfaces update.

Les instances qui participent en tant que VM backend pour les équilibreurs de charge réseau passthrough externes doivent exécuter l'environnement invité Linux, l'environnement invité Windows ou d'autres processus appropriés présentant des fonctionnalités équivalentes.

Créer le groupe d'instances pour le trafic TCP sur le port 80

Console

  1. Créez un modèle d'instance. Dans Google Cloud Console, accédez à la page Modèles d'instances.

    Accéder à la page Modèles d'instances

    1. Cliquez sur Create instance template (Créer un modèle d'instance).
    2. Dans le champ Nom, saisissez ig-us-template-tcp-80.
    3. Assurez-vous que le disque de démarrage est défini sur une image Debian, telle que Debian GNU/Linux 10 (Buster). Ces instructions utilisent des commandes uniquement disponibles dans Debian, comme apt-get.
    4. Cliquez sur Mise en réseau, disques, sécurité, gestion, location unique.
    5. Cliquez sur Gestion et copiez le script suivant dans le champ Script de démarrage.

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
    6. Cliquez sur Réseau.

      1. Pour Tags réseau, ajoutez network-lb-tcp-80.
      2. Pour Interfaces réseau, cliquez sur l'interface default et configurez les champs suivants :
        1. Réseau : lb-network
        2. Sous-réseau : lb-subnet
    7. Cliquez sur Créer.

  2. Créez un groupe d'instances géré. Accédez à la page Groupes d'instances de la console Google Cloud.

    Accéder à la page "Groupes d'instances"

    1. Cliquez sur Créer un groupe d'instances.
    2. Sélectionnez Nouveau groupe d'instances géré (sans état). Pour des informations plus détaillées, consultez la page Groupes d'instances gérés (MIG) sans état ou avec état.
    3. Dans le champ Nom, saisissez ig-us-tcp-80.
    4. Pour l'emplacement, sélectionnez Zone unique.
    5. Pour la région, sélectionnez us-central1.
    6. Pour la zone, sélectionnez us-central1-a.
    7. Pour le paramètre Modèle d'instance, sélectionnez ig-us-template-tcp-80.
    8. Spécifiez le nombre d'instances que vous souhaitez créer au sein du groupe.

      Pour cet exemple, spécifiez les options suivantes sous Autoscaling :

      • Dans le champ Mode autoscaling, sélectionnez Off:do not autoscale.
      • Dans le champ Nombre maximal d'instances, saisissez 2.
    9. Cliquez sur Créer.

gcloud

Les instructions gcloud de ce guide supposent que vous utilisez Cloud Shell ou un autre environnement avec bash installé.

  1. Créez un modèle d'instance de VM avec le serveur HTTP à l'aide de la commande gcloud compute instance-templates create.

    Pour gérer le trafic IPv4 et IPv6, utilisez la commande suivante.

    gcloud compute instance-templates create ig-us-template-tcp-80 \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --ipv6-network-tier=PREMIUM \
    --stack-type=IPv4_IPv6 \
    --tags=network-lb-tcp-80 \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    

    Si vous souhaitez gérer le trafic IPv4 uniquement, utilisez la commande suivante.

    gcloud compute instance-templates create ig-us-template-tcp-80 \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --tags=network-lb-tcp-80 \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    
  2. Créez un groupe d'instances géré dans la zone à l'aide de la commande gcloud compute instance-groups managed create.

    gcloud compute instance-groups managed create ig-us-tcp-80 \
        --zone us-central1-a \
        --size 2 \
        --template ig-us-template-tcp-80
    

Créer le groupe d'instances pour le trafic TCP (sur le port 8080), UDP, ESP et ICMP

Console

  1. Créez un modèle d'instance. Dans Google Cloud Console, accédez à la page Modèles d'instances.

    Accéder à la page Modèles d'instances

    1. Cliquez sur Create instance template (Créer un modèle d'instance).
    2. Dans le champ Nom, saisissez ig-us-template-l3-default.
    3. Assurez-vous que le disque de démarrage est défini sur une image Debian, telle que Debian GNU/Linux 10 (Buster). Ces instructions utilisent des commandes uniquement disponibles dans Debian, comme apt-get.
    4. Cliquez sur Mise en réseau, disques, sécurité, gestion, location unique.
    5. Cliquez sur Gestion et copiez le script suivant dans le champ Script de démarrage. Le script de démarrage configure également le serveur Apache pour qu'il écoute sur le port 8080 au lieu du port 80.

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      sed -ire 's/^Listen 80$/Listen 8080/g' /etc/apache2/ports.conf
      systemctl restart apache2
      
    6. Cliquez sur Réseau.

      1. Pour Tags réseau, ajoutez network-lb-l3-default.
      2. Pour Interfaces réseau, cliquez sur l'interface default et configurez les champs suivants :
        1. Réseau : lb-network
        2. Sous-réseau : lb-subnet
    7. Cliquez sur Créer.

  2. Créez un groupe d'instances géré. Accédez à la page Groupes d'instances de la console Google Cloud.

    Accéder à la page "Groupes d'instances"

    1. Cliquez sur Créer un groupe d'instances.
    2. Choisissez Nouveau groupe d'instances géré (sans état). Pour des informations plus détaillées, consultez la page Groupes d'instances gérés (MIG) sans état ou avec état.
    3. Dans le champ Nom, saisissez ig-us-l3-default.
    4. Pour l'emplacement, sélectionnez Zone unique.
    5. Pour la région, sélectionnez us-central1.
    6. Pour la zone, sélectionnez us-central1-c.
    7. Pour le paramètre Modèle d'instance, sélectionnez ig-us-template-l3-default.
    8. Spécifiez le nombre d'instances que vous souhaitez créer au sein du groupe.

      Pour cet exemple, spécifiez les options suivantes sous Autoscaling :

      • Dans le champ Mode autoscaling, sélectionnez Off:do not autoscale.
      • Dans le champ Nombre maximal d'instances, saisissez 2.
    9. Cliquez sur Créer.

gcloud

Les instructions gcloud de ce guide supposent que vous utilisez Cloud Shell ou un autre environnement avec bash installé.

  1. Créez un modèle d'instance de VM avec le serveur HTTP à l'aide de la commande gcloud compute instance-templates create.

    Le script de démarrage configure également le serveur Apache pour qu'il écoute sur le port 8080 au lieu du port 80.

    Pour gérer le trafic IPv4 et IPv6, utilisez la commande suivante.

    gcloud compute instance-templates create ig-us-template-l3-default \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --ipv6-network-tier=PREMIUM \
    --stack-type=IPv4_IPv6 \
    --tags=network-lb-l3-default \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
    systemctl restart apache2'
    

    Si vous souhaitez gérer le trafic IPv4 uniquement, utilisez la commande suivante.

    gcloud compute instance-templates create ig-us-template-l3-default \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --tags=network-lb-l3-default \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
    systemctl restart apache2'
    
  2. Créez un groupe d'instances géré dans la zone à l'aide de la commande gcloud compute instance-groups managed create.

    gcloud compute instance-groups managed create ig-us-l3-default \
        --zone us-central1-c \
        --size 2 \
        --template ig-us-template-l3-default
    

Configurer des règles de pare-feu

Créez les règles de pare-feu suivantes :

  • Règles de pare-feu autorisant le trafic TCP externe à atteindre des instances de backend dans le groupe d'instances ig-us-tcp-80 sur le port 80 (à l'aide du tag cible network-lb-tcp-80). Créez des règles de pare-feu distinctes pour autoriser le trafic IPv4 et IPv6.
  • Règles de pare-feu autorisant un autre trafic externe (TCP sur le port 8080, UDP, ESP et ICMP) à atteindre des instances backend dans le groupe d'instances ig-us-l3-default (à l'aide du tag cible network-lb-l3-default). Créez des règles de pare-feu distinctes pour autoriser le trafic IPv4 et IPv6.

Cet exemple crée des règles de pare-feu permettant au trafic de toutes les plages sources d'atteindre vos instances backend sur les ports configurés. Si vous souhaitez créer des règles de pare-feu distinctes qui sont spécifiques aux vérifications d'état, utilisez les plages d'adresses IP sources décrites dans la section Présentation des vérifications d'état : plages d'adresses IP de vérification et règles de pare-feu.

Console

  1. Dans la console Google Cloud, accédez à la page Règles d'administration.
    Accéder à la page "Stratégies de pare-feu"
  2. Pour permettre au trafic TCP IPv4 d'atteindre les backends du groupe d'instances ig-us-tcp-80, créez la règle de pare-feu suivante :
    1. Cliquez sur Créer une règle de pare-feu.
    2. Saisissez le nom allow-network-lb-tcp-80-ipv4.
    3. Sélectionnez le réseau auquel s'applique la règle de pare-feu (par défaut).
    4. Sous Cibles, sélectionnez Tags cibles spécifiés.
    5. Dans le champ Tags cibles, saisissez network-lb-tcp-80.
    6. Définissez Filtre source sur Plages IPv4.
    7. Définissez le champ Plages IPv4 sources sur 0.0.0.0/0 pour autoriser tout trafic, quelle que soit l'adresse IP source. Cela permet à la fois au trafic externe et aux test de vérification d'état d'atteindre les instances backend.
    8. Dans Protocoles et ports, sélectionnez Protocoles et ports spécifiés. Cochez la case tcp et saisissez comme port 80.
    9. Cliquez sur Créer. L'affichage de la nouvelle règle de pare-feu dans la console peut prendre un certain temps. Vous devrez peut-être cliquer sur Actualiser pour qu'elle apparaisse.
  3. Pour permettre au trafic IPv4 UDP, ESP et ICMP d'atteindre les backends du groupe d'instances ig-us-l3-default, créez la règle de pare-feu suivante :
    1. Cliquez sur Créer une règle de pare-feu.
    2. Saisissez le nom allow-network-lb-l3-default-ipv4.
    3. Sélectionnez le réseau auquel s'applique la règle de pare-feu (par défaut).
    4. Sous Cibles, sélectionnez Tags cibles spécifiés.
    5. Dans le champ Tags cibles, saisissez network-lb-l3-default.
    6. Définissez Filtre source sur Plages IPv4.
    7. Définissez le champ Plages IPv4 sources sur 0.0.0.0/0 pour autoriser tout trafic, quelle que soit l'adresse IP source. Cela permet à la fois au trafic externe et aux test de vérification d'état d'atteindre les instances backend.
    8. Dans Protocoles et ports, sélectionnez Protocoles et ports spécifiés.
      1. Cochez la case TCP et saisissez 8080.
      2. Cochez la case UDP.
      3. Cochez la case Autre, puis saisissez esp, icmp.
    9. Cliquez sur Créer. L'affichage de la nouvelle règle de pare-feu dans la console peut prendre un certain temps. Vous devrez peut-être cliquer sur Actualiser pour qu'elle apparaisse.
  4. Pour permettre au trafic TCP IPv6 d'atteindre les backends du groupe d'instances ig-us-tcp-80, créez la règle de pare-feu suivante :
    1. Cliquez sur Créer une règle de pare-feu.
    2. Saisissez le nom allow-network-lb-tcp-80-ipv6.
    3. Sélectionnez le réseau auquel s'applique la règle de pare-feu (par défaut).
    4. Sous Cibles, sélectionnez Tags cibles spécifiés.
    5. Dans le champ Tags cibles, saisissez network-lb-tcp-80.
    6. Définissez Filtre source sur Plages IPv6.
    7. Définissez le champ Plages d'adresses IPv6 sources sur ::/0 pour autoriser tout trafic, quelle que soit la source. Cela permet à la fois au trafic externe et aux test de vérification d'état d'atteindre les instances backend.
    8. Dans Protocoles et ports, sélectionnez Protocoles et ports spécifiés. Cochez la case à côté de TCP, puis saisissez 80.
    9. Cliquez sur Créer. L'affichage de la nouvelle règle de pare-feu dans la console peut prendre un certain temps. Vous devrez peut-être cliquer sur Actualiser pour qu'elle apparaisse.
  5. Pour permettre au trafic IPv6 UDP, ESP et ICMPv6 d'atteindre les backends du groupe d'instances ig-us-l3-default, créez la règle de pare-feu suivante : Cette règle de pare-feu permet également aux tests de vérification d'état TCP d'atteindre les instances sur le port 8080.
    1. Cliquez sur Créer une règle de pare-feu.
    2. Saisissez le nom allow-network-lb-l3-default-ipv6.
    3. Sélectionnez le réseau auquel s'applique la règle de pare-feu (par défaut).
    4. Sous Cibles, sélectionnez Tags cibles spécifiés.
    5. Dans le champ Tags cibles, saisissez network-lb-l3-default.
    6. Définissez Filtre source sur Plages IPv6.
    7. Définissez le champ Plages d'adresses IPv6 sources sur ::/0 pour autoriser tout trafic, quelle que soit la source. Cela permet à la fois au trafic externe et aux test de vérification d'état d'atteindre les instances backend.
    8. Dans Protocoles et ports, sélectionnez Protocoles et ports spécifiés.
      1. Cochez la case à côté de TCP, puis saisissez 8080.
      2. Cochez la case à côté de UDP.
      3. Cochez la case à côté de Autres, puis saisissez esp, 58.
    9. Cliquez sur Créer. L'affichage de la nouvelle règle de pare-feu dans la console peut prendre un certain temps. Vous devrez peut-être cliquer sur Actualiser pour qu'elle apparaisse.

gcloud

  1. Pour permettre au trafic TCP IPv4 d'atteindre les backends du groupe d'instances ig-us-tcp-80, créez la règle de pare-feu suivante :

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv4 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=0.0.0.0/0
    
  2. Pour permettre au trafic IPv4 UDP, ESP et ICMP d'atteindre les backends du groupe d'instances ig-us-l3-default, créez la règle de pare-feu suivante : Cette règle de pare-feu permet également aux tests de vérification d'état TCP d'atteindre les instances sur le port 8080.

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv4 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,icmp \
        --source-ranges=0.0.0.0/0
    
  3. Pour permettre au trafic TCP IPv6 d'atteindre les backends du groupe d'instances ig-us-tcp-80, créez la règle de pare-feu suivante :

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv6 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=::/0
    
  4. Pour permettre au trafic IPv6 UDP, ESP et ICMPv6 d'atteindre les backends du groupe d'instances ig-us-l3-default, créez la règle de pare-feu suivante : Cette règle de pare-feu permet également aux tests de vérification d'état TCP d'atteindre les instances sur le port 8080.

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv6 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,58 \
        --source-ranges=::/0
    

Configurer les équilibreurs de charge

La prochaine étape consiste à configurer les équilibreurs de charge. Configurez un équilibreur de charge pour gérer le trafic TCP sur le port 80, et un autre pour gérer le trafic TCP sur le port 8080, ainsi que le trafic UDP, ESP et ICMP. Les deux équilibreurs de charge utilisent la même adresse IP externe avec leurs règles de transfert.

Lorsque vous configurez un équilibreur de charge, vos instances de VM backend reçoivent des paquets destinés à l'adresse IP externe statique configurée. Si vous utilisez une image fournie par Compute Engine, vos instances sont automatiquement configurées pour gérer cette adresse IP. Si vous utilisez une autre image, vous devez configurer cette adresse en tant qu'alias sur eth0 ou en tant qu'adresse de rebouclage sur chaque instance.

Console

gcloud

  1. Réservez une adresse IP externe statique.

    Pour le trafic IPv4 : créez une adresse IP externe statique pour vos équilibreurs de charge.

    gcloud compute addresses create network-lb-ipv4 \
        --region us-central1
    

    Pour le trafic IPv6 : créez une plage d'adresses IPv6 externe statique pour vos équilibreurs de charge. Le sous-réseau utilisé doit être un sous-réseau à double pile avec une plage de sous-réseau IPv6 externe.

    gcloud compute addresses create network-lb-ipv6 \
        --region us-central1 \
        --subnet lb-subnet \
        --ip-version IPV6 \
        --endpoint-type NETLB
    
  2. Créez une vérification d'état TCP pour le port 80. Cette vérification d'état permet de vérifier l'état des backends dans le groupe d'instances ig-us-tcp-80.

    gcloud compute health-checks create tcp tcp-health-check-80 \
        --region us-central1 \
        --port 80
    
  3. Créez une vérification d'état TCP pour le port 8080. Cette vérification d'état permet de vérifier l'état des backends dans le groupe d'instances ig-us-l3-default.

    gcloud compute health-checks create tcp tcp-health-check-8080 \
        --region us-central1 \
        --port 8080
    
  4. Créez le premier équilibreur de charge pour le trafic TCP sur le port 80.

    1. Créez le service de backend avec le protocole défini sur TCP.

      gcloud compute backend-services create backend-service-tcp-80 \
          --protocol TCP \
          --health-checks tcp-health-check-80 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. Ajoutez le groupe d'instances backend au service de backend.

      gcloud compute backend-services add-backend backend-service-tcp-80 \
          --instance-group ig-us-tcp-80 \
          --instance-group-zone us-central1-a \
          --region us-central1
      
    3. Pour le trafic IPv4 : créez une règle de transfert pour acheminer le trafic TCP entrant sur le port 80 vers le service de backend. TCP est le protocole de règle de transfert par défaut. Il n'a pas besoin d'être défini explicitement.

      Utilisez l'adresse IP réservée à l'étape 1 comme adresse IP externe statique de l'équilibreur de charge.

      gcloud compute forwarding-rules create forwarding-rule-tcp-80-ipv4 \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports 80 \
          --address network-lb-ipv4 \
          --backend-service backend-service-tcp-80
      
    4. Pour le trafic IPv6 : créez une règle de transfert pour acheminer le trafic TCP entrant sur le port 80 vers le service de backend. TCP est le protocole de règle de transfert par défaut. Il n'a pas besoin d'être défini explicitement.

      Utilisez la plage d'adresses IPv6 réservée à l'étape 1 comme adresse IP externe statique de l'équilibreur de charge. Le sous-réseau utilisé doit être un sous-réseau à double pile avec une plage de sous-réseau IPv6 externe.

      gcloud compute forwarding-rules create forwarding-rule-tcp-80-ipv6 \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports 80 \
          --backend-service backend-service-tcp-80
      
  5. Créez le deuxième équilibreur de charge pour le trafic TCP sur le port 8080, ainsi que le trafic UDP, ESP et ICMP.

    1. Créez le service de backend avec le protocole défini sur UNSPECIFIED.

      gcloud compute backend-services create backend-service-l3-default \
          --protocol UNSPECIFIED \
          --health-checks tcp-health-check-8080 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. Ajoutez le groupe d'instances backend au service de backend.

      gcloud compute backend-services add-backend backend-service-l3-default \
          --instance-group ig-us-l3-default \
          --instance-group-zone us-central1-c \
          --region us-central1
      
    3. Pour le trafic IPv4 : créez une règle de transfert en définissant le protocole sur L3_DEFAULT pour gérer le trafic de tous les protocoles IP compatibles restants (TCP sur le port 8080, UDP, ESP et ICMP). Tous les ports doivent être configurés avec des règles de transfert L3_DEFAULT.

      Utilisez la même adresse IPv4 externe que celle utilisée pour l'équilibreur de charge précédent.

      gcloud compute forwarding-rules create forwarding-rule-l3-default-ipv4 \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --address network-lb-ipv4 \
          --backend-service backend-service-l3-default
      
    4. Pour le trafic IPv6 : créez une règle de transfert en définissant le protocole sur L3_DEFAULT pour gérer le trafic de tous les protocoles IP compatibles restants (TCP sur le port 8080, UDP, ESP et ICMP). Tous les ports doivent être configurés avec des règles de transfert L3_DEFAULT.

      Utilisez la plage d'adresses IPv6 réservée à l'étape 1 comme adresse IP externe statique de l'équilibreur de charge. Le sous-réseau utilisé doit être un sous-réseau à double pile avec une plage de sous-réseau IPv6 externe.

      gcloud compute forwarding-rules create forwarding-rule-l3-default-ipv6 \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --backend-service backend-service-l3-default
      

Tester l'équilibreur de charge

Maintenant que le service d'équilibrage de charge est configuré, vous pouvez commencer à envoyer le trafic vers l'adresse IP externe de l'équilibreur de charge et surveiller le trafic qui est distribué aux instances backend.

Rechercher l'adresse IP externe de l'équilibreur de charge

Console

  1. Sur la page Équilibrage de charge avancé, accédez à l'onglet Règles de transfert.
    Accéder à l'onglet Règles de transfert
  2. Localisez les règles de transfert utilisées par l'équilibreur de charge.
  3. Dans la colonne Adresse IP, notez l'adresse IP externe répertoriée pour chaque règle de transfert IPv4 et IPv6.

gcloud: IPv4

Saisissez la commande suivante pour afficher l'adresse IP externe de la règle de transfert utilisée par l'équilibreur de charge.

gcloud compute forwarding-rules describe forwarding-rule-tcp-80-ipv4 \
    --region us-central1

Dans cet exemple, nous utilisons la même adresse IPv4 pour les deux règles de transfert. Vous pouvez donc utiliser forwarding-rule-l3-default-ipv4.

gcloud: IPv6

Saisissez la commande suivante pour afficher l'adresse IPv6 externe de la règle de transfert forwarding-rule-tcp-80-ipv6 utilisée par l'équilibreur de charge.

gcloud compute forwarding-rules describe forwarding-rule-tcp-80-ipv6 \
    --region us-central1

Dans cet exemple, nous utilisons la même adresse IP pour les deux règles de transfert IPv6. Vous pouvez donc utiliser forwarding-rule-l3-default-ipv6.

Envoyer du trafic vers l'équilibreur de charge

Cette procédure envoie le trafic externe à l'équilibreur de charge. Exécutez les tests suivants pour vous assurer que le trafic TCP sur le port 80 est équilibré en charge par le groupe d'instances ig-us-tcp-80, tandis que le reste du trafic (TCP sur le port 8080, UDP, ESP et ICMP) est géré par le groupe d'instances ig-us-l3-default.

Vérifier le comportement avec des requêtes TCP sur le port 80

  1. Envoyez des requêtes Web (via TCP sur le port 80) à l'équilibreur de charge à l'aide de curl pour contacter son adresse IP.

    • À partir de clients disposant d'une connectivité IPv4, exécutez la commande suivante:

      $ while true; do curl -m1 IP_ADDRESS; done
      
    • À partir de clients disposant d'une connectivité IPv6, exécutez la commande suivante:

      $ while true; do curl -m1 http://IPV6_ADDRESS; done
      

      Par exemple, si l'adresse IPv6 attribuée est [2001:db8:1:1:1:1:1:1/96], la commande doit se présenter comme suit :

      $ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]; done
      
  2. Notez le texte renvoyé par la commande curl. Le nom de la VM de backend qui génère la réponse est affiché dans ce texte, par exemple : Page served from: VM_NAME. Les réponses ne doivent provenir que des instances du groupe d'instances ig-us-tcp-80.

    En cas d'échec au début de la phase de réponse, il vous faudra probablement patienter environ 30 secondes pour que la configuration soit entièrement chargée et que vos instances soient identifiées comme saines avant de réessayer :

Vérifier le comportement avec des requêtes TCP sur le port 8080

Envoyez des requêtes Web (via TCP sur le port 8080) à l'équilibreur de charge à l'aide de curl pour contacter son adresse IP.

  • À partir de clients disposant d'une connectivité IPv4, exécutez la commande suivante:

    $ while true; do curl -m1 IPV4_ADDRESS:8080; done
    
  • À partir de clients disposant d'une connectivité IPv6, exécutez la commande suivante:

    $ while true; do curl -m1 http://IPV6_ADDRESS; done
    

    Par exemple, si l'adresse IPv6 attribuée est [2001:db8:1:1:1:1:1:1/96], la commande doit se présenter comme suit:

    $ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]:8080; done
    

Notez le texte renvoyé par la commande curl. Les réponses ne doivent provenir que des instances du groupe d'instances ig-us-l3-default.

Cela montre que tout le trafic envoyé à l'adresse IP de l'équilibreur de charge sur le port 8080 n'est traité que par les backends du groupe d'instances ig-us-l3-default.

Vérifier le comportement avec des requêtes ICMP

Pour vérifier le comportement avec le trafic ICMP, vous devez capturer la sortie de la commande tcpdump pour confirmer que seules les VM de backend du groupe d'instances ig-us-l3-default gèrent les requêtes ICMP envoyées à l'équilibreur de charge.

  1. Connectez-vous en SSH aux VM de backend.

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

    2. Dans la liste des instances de machines virtuelles, cliquez sur SSH sur la ligne de l'instance à laquelle vous souhaitez vous connecter.

  2. Exécutez la commande suivante pour utiliser tcpdump afin de commencer à écouter le trafic ICMP.

    sudo tcpdump icmp -w ~/icmpcapture.pcap -s0 -c 10000
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    

    Laissez la fenêtre SSH ouverte.

  3. Répétez les étapes 1 et 2 pour les quatre VM de backend.

  4. Envoyez des requêtes ICMP à l'équilibreur de charge.

    Pour tester les réponses IPv4, utilisez ping pour contacter l'adresse IPv4 de l'équilibreur de charge.

    ping IPV4_ADDRESS
    

    Pour tester les réponses IPv6, utilisez ping6 pour contacter l'adresse IPv6 de l'équilibreur de charge.

    ping6 IPV6_ADDRESS
    

    Par exemple, si l'adresse IPv6 attribuée est [2001:db8:1:1:1:1:1:1/96], la commande doit se présenter comme suit:

    ping6 2001:db8:1:1:1:1:1:1
    
  5. Revenez à la fenêtre SSH de chaque VM et arrêtez la commande de capture tcpdump. Pour cela, vous pouvez utiliser Ctrl+C.

  6. Pour chaque VM, vérifiez la sortie de la commande tcpdump dans le fichier icmpcapture.pcap.

    sudo tcpdump -r ~/icmpcapture.pcap -n
    

    Pour les VM de backend du groupe d'instances ig-us-l3-default, les entrées de fichier doivent s'afficher comme suit :

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    22:13:07.814486 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 1, length 64
    22:13:07.814513 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 1, length 64
    22:13:08.816150 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 2, length 64
    22:13:08.816175 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 2, length 64
    22:13:09.817536 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 3, length 64
    22:13:09.817560 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 3, length 64
    ...
    

    Pour les VM de backend du groupe d'instances ig-us-tcp-80, vous devez constater qu'aucun paquet n'a été reçu et que le fichier doit être vide :

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    

Étapes suivantes