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

Ce document vous explique comment créer un équilibreur de charge réseau passthrough externe global pour équilibrer le trafic TCP, UDP, ESP, GRE, ICMP et ICMPv6.

Vous pouvez utiliser une telle configuration pour :

  • Équilibrer la charge du trafic qui utilise des protocoles IP autres que TCP ou UDP.

  • Diffuser plusieurs protocoles avec un seul équilibreur de charge Par exemple, les services IPSec gèrent généralement une certaine combinaison de trafic IKE basé sur ESP et UDP, et de trafic NAT-T.

Avant de commencer

Assurez-vous que votre configuration remplit les conditions préalables suivantes.

Installer Google Cloud CLI

Les instructions de ce guide utilisent la Google Cloud CLI pour configurer un équilibreur de charge réseau passthrough externe mondial. Pour l'installer, consultez Installer gcloud CLI.

Rôles requis

Si vous êtes le créateur du projet, vous disposez du rôle Propriétaire (roles/owner). Par défaut, le rôle Propriétaire (roles/owner) ou le rôle Éditeur (roles/editor) incluent les autorisations nécessaires pour suivre ce document.

Si vous n'êtes pas le créateur du projet, les autorisations requises doivent être accordées au compte principal approprié sur le projet. Par exemple, un compte principal peut être un compte Google (pour les utilisateurs finaux) ou un compte de service.

Pour obtenir les autorisations nécessaires pour configurer un équilibreur de charge réseau externe global avec des backends de groupe d'instances de VM, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Pour en savoir plus sur les rôles et les autorisations pour Cloud Load Balancing, consultez Rôles et autorisations. Pour en savoir plus sur la définition de stratégies IAM avec des autorisations conditionnelles pour les règles de transfert, consultez Conditions IAM pour les règles de transfert.

Vue d'ensemble de la configuration

Le schéma suivant montre deux équilibreurs de charge réseau passthrough externes globaux pour la même paire d'adresses IP, chacun servant un ensemble différent de protocoles et de ports IP. Pour comprendre le fonctionnement d'un équilibreur de charge réseau passthrough externe global, consultez la section Architecture du guide de présentation.

  1. Équilibreur de charge TCP sur le port 80

    La règle de transfert de cet équilibreur de charge est configurée pour capturer uniquement le trafic TCP arrivant spécifiquement sur le port 80.

    • Lorsqu'un paquet arrive à l'adresse IP d'une règle de transfert,Google Cloud vérifie d'abord s'il s'agit d'un paquet TCP et si son port de destination est exactement 80.
    • Si ces conditions sont remplies, ce paquet est capturé par cette règle de transfert TCP spécifique et acheminé vers un backend en fonction du service de backend référencé.
  2. Équilibreur de charge L3_DEFAULT pour le trafic TCP:8080 et UDP

    La règle de transfert de cet équilibreur de charge utilise le protocole L3_DEFAULT et est configurée pour accepter le trafic sur tous les ports. Dans cette configuration, elle sert de règle générique pour gérer le trafic que la première règle de transfert ne gère pas (comme UDP, ICMP et tout le trafic TCP autre que le port 80).

    • Si un paquet arrive à une adresse IP de règle de transfert qui ne correspond pas à la règle spécifique au trafic TCP arrivant sur le port 80 (par exemple, s'il s'agit de trafic UDP, d'un ping ICMP ou de trafic TCP sur le port 8080 ou 443), ce paquet est capturé par la règle de transfert L3_DEFAULT.
    • Ajoutez une règle de pare-feu pour autoriser uniquement le trafic TCP:8080 et UDP à atteindre les instances de VM de backend. Ainsi, même si la règle de transfert L3_DEFAULT capture tout le trafic de protocole IP sur tous les ports, la règle de pare-feu limite le trafic à équilibrage de charge au trafic TCP:8080 et UDP.
    • Le paquet est ensuite acheminé vers un backend en fonction du service de backend référencé.

    Google Cloud donne la priorité à la règle TCP plus spécifique sur le port 80 avant de laisser le trafic restant transiter vers une règle L3_DEFAULT sur la même adresse IP.

Deux équilibreurs de charge réseau passthrough externes globaux envoient le trafic vers des backends de groupes d'instances de VM déployés dans les régions `us-west1` et `europe-west2`.
Deux équilibreurs de charge réseau passthrough externes mondiaux pour la même paire d'adresses IP, chacun servant un ensemble différent de protocoles et de ports IP (cliquez pour agrandir).

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

L'exemple utilise un réseau VPC en mode personnalisé nommé lb-network avec des sous-réseaux dans deux régions différentes.

Le tableau suivant récapitule la compatibilité entre les types de trafic de l'équilibreur de charge, les interfaces réseau des VM de backend et les types de pile de sous-réseau VPC. Assurez-vous de bien connaître les exigences de compatibilité de l'interface réseau de la VM de backend avec les sous-réseaux VPC décrites dans le guide d'architecture de l'équilibreur de charge réseau passthrough externe global.

Type de trafic de l'équilibreur de charge Type de pile de l'interface réseau de la VM de backend Type de pile du sous-réseau VPC
Trafic IPv4 uniquement IPV4_ONLY IPV4_ONLY ou IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Trafic IPv6 uniquement IPV6_ONLY IPV6_ONLY ou IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Trafic IPv4 et IPv6 IPV4_IPV6 IPV4_IPV6

Les backends utilisés dans cet exemple sont situés dans les régions et sous-réseaux suivants. Bien que vous puissiez choisir la plage d'adresses IPv4 configurée sur le sous-réseau, Google Cloud attribue automatiquement une plage d'adresses IPv6/64à l'ensemble du sous-réseau.

  • Région : us-west1

    • Sous-réseau : lb-subnet-us, avec plage d'adresses IPv4 principale 10.1.2.0/24.
  • Région : europe-west2

    • Sous-réseau : lb-subnet-eu, avec plage d'adresses IPv4 principale 10.1.3.0/24.

gcloud

  1. Créez un réseau VPC. Dans cet exemple, le réseau VPC est nommé lb-network.

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Dans le réseau VPC (lb-network), créez des sous-réseaux dans deux régions.

    Créez un sous-réseau nommé lb-subnet-us pour les backends dans la région us-west1.

    Pour créer un sous-réseau IPv4 uniquement, utilisez la commande suivante :

    gcloud compute networks subnets create lb-subnet-us \
        --stack-type=IPV4_ONLY \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

    Pour créer un sous-réseau à double pile, exécutez la commande suivante :

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

    Pour créer un sous-réseau IPv6 uniquement, utilisez la commande suivante :

    gcloud compute networks subnets create lb-subnet-us \
        --stack-type=IPV6_ONLY \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --region=us-west1
    

    Créez un sous-réseau nommé lb-subnet-eu pour les backends dans la région europe-west2.

    Pour créer un sous-réseau IPv4 uniquement, utilisez la commande suivante :

    gcloud compute networks subnets create lb-subnet-eu \
        --stack-type=IPV4_ONLY \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=europe-west2
    

    Pour créer un sous-réseau à double pile, utilisez la commande suivante :

    gcloud compute networks subnets create lb-subnet-eu \
        --stack-type=IPV4_IPV6 \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=europe-west2
    

    Pour créer un sous-réseau IPv6 uniquement, utilisez la commande suivante :

    gcloud compute networks subnets create lb-subnet-eu \
        --stack-type=IPV6_ONLY \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.3.0/24 \
        --region=europe-west2
    

Réserver des adresses IP externes globales

Réservez deux adresses IP externes globales, une pour chaque groupe de disponibilité. Comme indiqué dans la présentation de la configuration, les deux équilibreurs de charge réseau passthrough externes globaux partagent la même paire d'adresses IP.

Pour un équilibreur de charge réseau passthrough externe global, les adresses IP des règles de transfert sont complètement dissociées des sous-réseaux VPC. Les adresses IP appartiennent à des pools d'adresses IP externes globales appartenant à Google ou à des préfixes délégués publics IPv4 externes globaux BYOIP provenant de groupes de disponibilité distincts. Elles ne sont associées à aucun sous-réseau VPC.

Lorsque vous configurez une règle de transfert IPv6, les adresses IP de la règle de transfert sont allouées en tant que préfixes /96.

gcloud

Pour le trafic IPv4 :

  1. Réservez la première adresse IP externe globale nommée lb-ipv4-ag0 dans le groupe de disponibilité 0.

    gcloud beta compute addresses create lb-ipv4-ag0 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \
        --ip-version=IPV4
    
  2. Réservez la deuxième adresse IP externe globale lb-ipv4-ag1 dans le groupe de disponibilité 1.

    gcloud beta compute addresses create lb-ipv4-ag1 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \
        --ip-version=IPV4
    

Pour le trafic IPv6 :

  1. Réservez la première adresse IP externe globale nommée lb-ipv6-ag0 dans le groupe de disponibilité 0.

    gcloud beta compute addresses create lb-ipv6-ag0 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \
        --ip-version=IPV6
    
  2. Réservez la deuxième adresse IP externe globale lb-ipv6-ag1 dans le groupe de disponibilité 1.

    gcloud beta compute addresses create lb-ipv6-ag1 \
        --global \
        --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \
        --ip-version=IPV6
    

Configurer un équilibreur de charge pour le trafic TCP sur le port 80

Suivez les étapes de cette section pour configurer un équilibreur de charge réseau passthrough externe global qui capture le trafic TCP sur le port 80.

Créer des règles de pare-feu pour autoriser uniquement le trafic TCP:80

Pour configurer votre environnement de production de manière sécurisée, vous devez créer deux règles de pare-feu distinctes :

  • Règle de pare-feu de vérification de l'état, configurée pour autoriser le trafic entrant provenant des éléments suivants :

  • Règle de pare-feu pour le trafic utilisateur, configurée pour autoriser le trafic entrant provenant des éléments suivants :

    • les plages d'adresses IP sources spécifiques des clients qui doivent accéder à votre équilibreur de charge ;
    • le protocole IP et les ports configurés dans vos règles de transfert.

Veuillez noter les points suivants :

  • Si votre application est diffusée à tous les utilisateurs d'Internet sans aucune limite, configurez les plages d'adresses IP sources 0.0.0.0/0 pour le trafic IPv4 et ::/0 pour le trafic IPv6.

  • Si vous avez configuré votre vérification de l'état l'état pour qu'elle vérifie le protocole et les ports de votre équilibrage de charge IP, vous pouvez configurer une seule règle de pare-feu en fusionnant les règles de pare-feu de vérification de l'état et de trafic utilisateur.

gcloud

Créez une règle de pare-feu qui autorise le trafic TCP de toutes les plages sources à atteindre vos instances de VM de backend sur le port 80. Ce port et ce protocole sont utilisés à la fois pour l'équilibrage de charge et la vérification de l'état.

  • Pour autoriser tout le trafic IPv4, exécutez la commande suivante :

      gcloud compute firewall-rules create allow-traffic-tcp-80-ipv4 \
          --network=lb-network \
          --target-tags=allow-traffic-tcp-80 \
          --allow=tcp:80 \
          --source-ranges=0.0.0.0/0
    
  • Pour autoriser tout le trafic IPv6, exécutez la commande suivante :

      gcloud compute firewall-rules create allow-traffic-tcp-80-ipv6 \
          --network=lb-network \
          --target-tags=allow-traffic-tcp-80 \
          --allow=tcp:80 \
          --source-ranges=::/0
    

Créer des instances de VM de backend

Pour cet exemple d'équilibrage de charge, créez des groupes d'instances gérés dans les zones us-west1-a et europe-west2-a. Le groupe d'instances géré se compose d'instances de VM qui hébergent les serveurs de backend de l'équilibreur de charge. À des fins de démonstration, les backends exécutent le serveur Apache sur le port 80. En réponse aux requêtes des clients, ils diffusent leurs propres noms d'hôte.

Le groupe d'instances fait référence à un modèle d'instance, qui est utilisé pour créer des VM de backend.

Le tableau suivant récapitule la compatibilité entre les types de trafic de l'équilibreur de charge, les interfaces réseau des VM de backend et les types de pile de sous-réseau VPC. Assurez-vous de bien connaître les exigences de compatibilité de l'interface réseau de la VM de backend avec les sous-réseaux VPC décrites dans le guide d'architecture de l'équilibreur de charge réseau passthrough externe global.

Type de trafic de l'équilibreur de charge Type de pile de l'interface réseau de la VM de backend Type de pile du sous-réseau VPC
Trafic IPv4 uniquement IPV4_ONLY IPV4_ONLY ou IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Trafic IPv6 uniquement IPV6_ONLY IPV6_ONLY ou IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Trafic IPv4 et IPv6 IPV4_IPV6 IPV4_IPV6

Créer un modèle d'instance

Dans cet exemple, vous allez créer des modèles d'instance régionaux dans les régions us-west1 et europe-west2.

gcloud

  1. Créez un modèle d'instance dans la région us-west1.

    Pour créer des VM de backend avec des interfaces réseau IPv4 uniquement, utilisez la commande suivante.

    gcloud compute instance-templates create ig-template-us-tcp-80 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-tcp-80 \
        --image-family=debian-12 \
        --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'
    

    Pour créer des VM de backend avec des interfaces réseau à double pile, utilisez la commande suivante.

    gcloud compute instance-templates create ig-template-us-tcp-80 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-tcp-80 \
        --image-family=debian-12 \
        --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'
    

    Pour créer des VM de backend avec des interfaces réseau IPv6 uniquement, utilisez la commande suivante.

    gcloud compute instance-templates create ig-template-us-tcp-80 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-tcp-80 \
        --image-family=debian-12 \
        --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 modèle d'instance dans la région europe-west2.

    Pour créer des VM de backend avec des interfaces réseau IPv4 uniquement, utilisez la commande suivante.

    gcloud compute instance-templates create ig-template-eu-tcp-80 \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-tcp-80 \
        --image-family=debian-12 \
        --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'
    

    Pour créer des VM de backend avec des interfaces réseau à double pile, utilisez la commande suivante.

    gcloud compute instance-templates create ig-template-eu-tcp-80 \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-tcp-80 \
        --image-family=debian-12 \
        --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'
    

    Pour créer des VM de backend avec des interfaces réseau IPv6 uniquement, utilisez la commande suivante.

    gcloud compute instance-templates create ig-template-eu-tcp-80 \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-tcp-80 \
        --image-family=debian-12 \
        --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'
    

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

Dans cet exemple, vous allez créer deux groupes d'instances gérés zonaux : l'un dans la zone us-west1-a et l'autre dans la zone europe-west2-a.

gcloud

  1. Créez un groupe d'instances géré dans la zone us-west1-a.

    gcloud compute instance-groups managed create ig-us-tcp-80 \
      --template=ig-template-us-tcp-80 \
      --size=2 \
      --zone=us-west1-a
    
  2. Créez un groupe d'instances géré dans la zone europe-west2-a.

    gcloud compute instance-groups managed create ig-eu-tcp-80 \
      --template=ig-template-eu-tcp-80 \
      --size=2 \
      --zone=europe-west2-a
    

Créer les composants Cloud Load Balancing

Pour créer les composants Cloud Load Balancing d'un équilibreur de charge réseau passthrough externe global, procédez comme suit.

gcloud

  1. Créez une vérification de l'état TCP configurée pour générer des tests TCP:80.

    gcloud compute health-checks create tcp hc-tcp-80 \
      --global \
      --port=80
    
  2. Créez un service de backend global avec le schéma d'équilibrage de charge EXTERNAL_PASSTHROUGH.

    gcloud beta compute backend-services create lb-backend-service-tcp-80 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --health-checks=hc-tcp-80 \
      --global
    
  3. Ajoutez les groupes d'instances en tant que backends au service de backend.

    Ajoutez le groupe d'instances dans la zone us-west1-a au service de backend.

    gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \
        --instance-group=ig-us-tcp-80 \
        --instance-group-zone=us-west1-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    

    Ajoutez le groupe d'instances dans la zone europe-west2-a au service de backend.

    gcloud beta compute backend-services add-backend lb-backend-service-tcp-80 \
        --instance-group=ig-eu-tcp-80 \
        --instance-group-zone=europe-west2-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    
  4. Créez une règle de transfert globale pour diffuser le trafic TCP:80.

    Assurez-vous que la version IP de votre règle de transfert correspond au type de pile des interfaces réseau de vos VM de backend.

    La règle de transfert fait référence aux adresses IP de chaque groupe de disponibilité.

    Pour le trafic IPv4 :

    gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv4 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=TCP \
      --ports=80 \
      --backend-service=lb-backend-service-tcp-80 \
      --global \
      --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
    

    Pour le trafic IPv6 :

    gcloud beta compute forwarding-rules create lb-forwarding-rule-tcp-80-ipv6 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=TCP \
      --ports=80 \
      --backend-service=lb-backend-service-tcp-80 \
      --global \
      --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
    

Configurer un équilibreur de charge pour le trafic TCP:8080 et UDP

Suivez les étapes de cette section pour configurer un équilibreur de charge réseau passthrough externe mondial afin de diffuser le trafic TCP:8080 et UDP.

Créer des règles de pare-feu pour autoriser uniquement le trafic TCP:8080 et UDP

Pour configurer votre environnement de production de manière sécurisée, vous devez créer deux règles de pare-feu distinctes :

  • Règle de pare-feu de vérification de l'état, configurée pour autoriser le trafic entrant provenant des éléments suivants :

  • Règle de pare-feu pour le trafic utilisateur, configurée pour autoriser le trafic entrant provenant des éléments suivants :

    • les plages d'adresses IP sources spécifiques des clients qui doivent accéder à votre équilibreur de charge ;
    • le protocole IP et les ports configurés dans vos règles de transfert.

Veuillez noter les points suivants :

  • Si votre application est diffusée à tous les utilisateurs d'Internet sans aucune limite, configurez les plages d'adresses IP sources 0.0.0.0/0 pour le trafic IPv4 et ::/0 pour le trafic IPv6.

  • Si vous avez configuré votre vérification de l'état l'état pour qu'elle vérifie le protocole et les ports de votre équilibrage de charge IP, vous pouvez configurer une seule règle de pare-feu en fusionnant les règles de pare-feu de vérification de l'état et de trafic utilisateur.

gcloud

Créez une règle de pare-feu qui autorise le trafic TCP:8080 et UDP de toutes les plages sources à atteindre vos instances de VM de backend. Ces protocoles sont utilisés pour l'équilibrage de charge, tandis que le port TCP 8080 est également utilisé pour la vérification de l'état.

  1. Pour permettre au trafic IPv4 d'atteindre les backends des groupes d'instances ig-us-l3-default et ig-eu-l3-default, créez la règle de pare-feu suivante :

    gcloud compute firewall-rules create allow-traffic-l3-default-ipv4 \
        --network=lb-network \
        --target-tags=allow-traffic-l3-default \
        --allow=tcp:8080,udp \
        --source-ranges=0.0.0.0/0
    
  2. Pour permettre au trafic IPv6 d'atteindre les backends des groupes d'instances ig-us-l3-default et ig-eu-l3-default, créez la règle de pare-feu suivante.

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

Créer des instances de VM de backend

Pour cet exemple d'équilibrage de charge, créez des groupes d'instances gérés dans les zones us-west1-a et europe-west2-a. Le groupe d'instances géré se compose d'instances de VM qui hébergent les serveurs de backend de l'équilibreur de charge. À des fins de démonstration, les backends diffusent leurs propres noms d'hôte. Le script de démarrage configure également le serveur Apache pour qu'il écoute sur le port 8080 au lieu du port 80.

Le groupe d'instances fait référence à un modèle d'instance, qui est utilisé pour créer des VM de backend.

Le tableau suivant récapitule la compatibilité entre les types de trafic de l'équilibreur de charge, les interfaces réseau des VM de backend et les types de pile de sous-réseau VPC. Assurez-vous de bien connaître les exigences de compatibilité de l'interface réseau de la VM de backend avec les sous-réseaux VPC décrites dans le guide d'architecture de l'équilibreur de charge réseau passthrough externe global.

Type de trafic de l'équilibreur de charge Type de pile de l'interface réseau de la VM de backend Type de pile du sous-réseau VPC
Trafic IPv4 uniquement IPV4_ONLY IPV4_ONLY ou IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Trafic IPv6 uniquement IPV6_ONLY IPV6_ONLY ou IPV4_IPV6
IPV4_IPV6 IPV4_IPV6
Trafic IPv4 et IPv6 IPV4_IPV6 IPV4_IPV6

Créer un modèle d'instance

Dans cet exemple, vous allez créer des modèles d'instance régionaux dans les régions us-west1 et europe-west2.

gcloud

  1. Créez un modèle d'instance dans la région us-west1.

    Pour créer des VM de backend avec des interfaces réseau IPv4 uniquement, utilisez la commande suivante.

    gcloud compute instance-templates create ig-template-us-l3-default \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-l3-default \
        --image-family=debian-12 \
        --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'
    

    Pour créer des VM de backend avec des interfaces réseau à double pile, utilisez la commande suivante.

    gcloud compute instance-templates create ig-template-us-l3-default \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-l3-default \
        --image-family=debian-12 \
        --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'
    

    Pour créer des VM de backend avec des interfaces réseau IPv6 uniquement, utilisez la commande suivante.

    gcloud compute instance-templates create ig-template-us-l3-default \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet-us \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-l3-default \
        --image-family=debian-12 \
        --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 modèle d'instance dans la région europe-west2.

    Pour créer des VM de backend avec des interfaces réseau IPv4 uniquement, utilisez la commande suivante.

    gcloud compute instance-templates create ig-template-eu-l3-default \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --stack-type=IPV4_ONLY \
        --tags=allow-traffic-l3-default \
        --image-family=debian-12 \
        --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'
    

    Pour créer des VM de backend avec des interfaces réseau à double pile, utilisez la commande suivante.

    gcloud compute instance-templates create ig-template-eu-l3-default \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --tags=allow-traffic-l3-default \
        --image-family=debian-12 \
        --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'
    

    Pour créer des VM de backend avec des interfaces réseau IPv6 uniquement, utilisez la commande suivante.

    gcloud compute instance-templates create ig-template-eu-l3-default \
        --region=europe-west2 \
        --network=lb-network \
        --subnet=lb-subnet-eu \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV6_ONLY \
        --tags=allow-traffic-l3-default \
        --image-family=debian-12 \
        --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'
    

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

Dans cet exemple, vous allez créer deux groupes d'instances gérés zonaux : l'un dans la zone us-west1-a et l'autre dans la zone europe-west2-a.

gcloud

  1. Créez un groupe d'instances géré dans la zone us-west1-a.

    gcloud compute instance-groups managed create ig-us-l3-default \
      --template=ig-template-us-l3-default \
      --size=2 \
      --zone=us-west1-a
    
  2. Créez un groupe d'instances géré dans la zone europe-west2-a.

    gcloud compute instance-groups managed create ig-eu-l3-default \
      --template=ig-template-eu-l3-default \
      --size=2 \
      --zone=europe-west2-a
    

Créer les composants Cloud Load Balancing

Pour créer les composants Cloud Load Balancing d'un équilibreur de charge réseau passthrough externe global, procédez comme suit.

gcloud

  1. Créez une vérification de l'état TCP configurée pour générer des tests TCP:8080.

    gcloud compute health-checks create tcp hc-tcp-8080 \
      --global \
      --port=8080
    
  2. Créez un service de backend global avec le schéma d'équilibrage de charge EXTERNAL_PASSTHROUGH.

    gcloud beta compute backend-services create lb-backend-service-l3-default \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --health-checks=hc-tcp-8080 \
      --global
    
  3. Ajoutez les groupes d'instances en tant que backends au service de backend.

    Ajoutez le groupe d'instances dans la zone us-west1-a au service de backend.

    gcloud beta compute backend-services add-backend lb-backend-service-l3-default \
        --instance-group=ig-us-l3-default \
        --instance-group-zone=us-west1-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    

    Ajoutez le groupe d'instances dans la zone europe-west2-a au service de backend.

    gcloud beta compute backend-services add-backend lb-backend-service-l3-default \
        --instance-group=ig-eu-l3-default \
        --instance-group-zone=europe-west2-a \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.7 \
        --global
    
  4. Créez une règle de transfert globale avec son champ ip-protocol défini sur L3_DEFAULT pour gérer tout le trafic de protocole IP (trafic TCP autre que le port 80, UDP, ESP et ICMP). Vous devez créer deux règles de transfert pour gérer le trafic IPv4 et IPv6.

    Assurez-vous que la version IP de votre règle de transfert correspond au type de pile des interfaces réseau de vos VM de backend.

    La règle de transfert fait référence aux adresses IP de chaque groupe de disponibilité.

    Pour le trafic IPv4 :

    gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv4 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=L3_DEFAULT \
      --ports=all \
      --backend-service=lb-backend-service-l3-default \
      --global \
      --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
    

    Pour le trafic IPv6 :

    gcloud beta compute forwarding-rules create lb-forwarding-rule-l3-default-ipv6 \
      --load-balancing-scheme=EXTERNAL_PASSTHROUGH \
      --ip-protocol=L3_DEFAULT \
      --ports=all \
      --backend-service=lb-backend-service-l3-default \
      --global \
      --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
    

Tester l'équilibreur de charge

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

Obtenir les adresses IP externes de l'équilibreur de charge

  1. Obtenez les adresses IP réservées associées à la règle de transfert. La règle de transfert des deux équilibreurs de charge utilise la même paire d'adresses IP. Vous pouvez donc utiliser lb-forwarding-rule-tcp-80-ipv4 ou lb-forwarding-rule-l3-default-ipv4 pour afficher les adresses IP externes.

      gcloud compute forwarding-rules describe lb-forwarding-rule-tcp-80-ipv4 \
          --global
    

    Deux adresses IP sont renvoyées, une pour chaque groupe de disponibilité. Dans les étapes suivantes, ces adresses IP sont appelées IP_ADDRESS_AVAILABILITY_GROUP_0 et IP_ADDRESS_AVAILABILITY_GROUP_1.

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 vérifier que le trafic TCP sur le port 80 est équilibré en charge par les groupes d'instances ig-us-tcp-80 ou ig-eu-tcp-80, tandis que le reste du trafic (TCP:8080 et UDP) est équilibré en charge par les groupes d'instances ig-us-l3-default ou ig-eu-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_AVAILABILITY_GROUP_0; done
      

    Notez le texte renvoyé par la commande curl. Le texte affiche le nom de la VM de backend qui génère la réponse, par exemple Page served from: VM_NAME. Les réponses ne proviennent que des instances des groupes d'instances ig-us-tcp-80 ou ig-eu-tcp-80.

    Cela montre que le trafic TCP envoyé à l'adresse IP de l'équilibreur de charge sur le port 80 est géré par la règle de transfert TCP.

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 IP_ADDRESS_AVAILABILITY_GROUP_0:8080; done
    

    Notez le texte renvoyé par la commande curl. Les réponses ne proviennent que des instances des groupes d'instances ig-us-l3-default ou ig-eu-l3-default.

    Cela montre que le trafic TCP envoyé à l'adresse IP de l'équilibreur de charge sur le port 8080 est géré par la règle de transfert L3_DEFAULT.

Vérifier la table de routage locale pour les adresses IP de l'équilibreur de charge

Les tables de routage locales des VM de backend contiennent les adresses IP de l'équilibreur de charge réseau passthrough externe global.

Pour vérifier les routes locales sur la VM de backend, connectez-vous à votre VM de backend à l'aide de SSH et exécutez la commande suivante :

  ip route list table local

Voici le résultat :

local 10.1.2.5 dev ens4 proto kernel scope host src 10.1.2.5
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
local 136.124.69.214 dev ens4 proto 66 scope host
local 136.124.83.205 dev ens4 proto 66 scope host

Dans l'exemple précédent, 136.124.69.214 et 136.124.83.205 sont les adresses IP attribuées à la règle de transfert de l'équilibreur de charge. Les entrées de ligne local 136.124.69.214 dev ens4 proto 66 scope host et local 136.124.83.205 dev ens4 proto 66 scope host dans la table de routage locale de la VM permettent au backend d'accepter les paquets adressés aux adresses IP de l'équilibreur de charge. L' Google Cloud environnement invité est responsable de l'ajout de cette entrée.

L'entrée de la table de routage locale sur la VM de backend accepte le paquet pour la distribution à l'hôte local, où la pile réseau le distribue à l'application à l'écoute. Les paquets de réponse de l'application sont ensuite envoyés directement au client.

Notez que l'adresse IP de l'équilibreur de charge n'est pas configurée sur l'interface réseau de la VM. Pour le vérifier, exécutez la commande suivante :

  ip addr list

Voici le résultat : Les adresses IP (136.124.69.214 et 136.124.83.205) apparaissent dans la table de routage locale, mais ne sont pas configurées sur l'interface réseau.

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: ens4:  mtu 1460 qdisc fq_codel state UP group default qlen 1000
    link/ether 42:01:0a:01:02:0d brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 10.1.2.13/32 metric 100 scope global dynamic ens4
       valid_lft 84283sec preferred_lft 84283sec
    inet6 fe80::4001:aff:fe01:20d/64 scope link
       valid_lft forever preferred_lft forever

Étapes suivantes