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 :
-
Créez un réseau VPC, un sous-réseau et des composants d'équilibrage de charge : rôle Administrateur de réseau Compute (
roles/compute.networkAdmin) -
Créez des règles de pare-feu :
Rôle Administrateur de sécurité Compute (
roles/compute.securityAdmin) -
Créer des instances de VM : Rôle Administrateur d'instances Compute (
roles/compute.instanceAdmin)
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.
Équilibreur de charge
TCPsur le port 80La règle de transfert de cet équilibreur de charge est configurée pour capturer uniquement le trafic
TCParrivant spécifiquement sur le port80.- 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
TCPet si son port de destination est exactement80. - Si ces conditions sont remplies, ce paquet est capturé par cette règle de transfert
TCPspécifique et acheminé vers un backend en fonction du service de backend référencé.
- 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
Équilibreur de charge
L3_DEFAULTpour le traficTCP:8080etUDPLa règle de transfert de cet équilibreur de charge utilise le protocole
L3_DEFAULTet 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:8080etUDPà atteindre les instances de VM de backend. Ainsi, même si la règle de transfertL3_DEFAULTcapture tout le trafic de protocole IP sur tous les ports, la règle de pare-feu limite le trafic à équilibrage de charge au traficTCP:8080etUDP. - 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
TCPplus spécifique sur le port80avant de laisser le trafic restant transiter vers une règleL3_DEFAULTsur la même adresse IP.- 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
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.
- Sous-réseau :
Région :
europe-west2- Sous-réseau :
lb-subnet-eu, avec plage d'adresses IPv4 principale 10.1.3.0/24.
- Sous-réseau :
gcloud
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
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-uspour les backends dans la régionus-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-west1Pour 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-west1Pour 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-west1Créez un sous-réseau nommé
lb-subnet-eupour les backends dans la régioneurope-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-west2Pour 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-west2Pour 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 :
Réservez la première adresse IP externe globale nommée
lb-ipv4-ag0dans le groupe de disponibilité 0.gcloud beta compute addresses create lb-ipv4-ag0 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \ --ip-version=IPV4Réservez la deuxième adresse IP externe globale
lb-ipv4-ag1dans 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 :
Réservez la première adresse IP externe globale nommée
lb-ipv6-ag0dans le groupe de disponibilité 0.gcloud beta compute addresses create lb-ipv6-ag0 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \ --ip-version=IPV6Réservez la deuxième adresse IP externe globale
lb-ipv6-ag1dans 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 :
- les plages d'adresses IP pour les vérifications d'état de Google.
- le protocole IP et les ports configurés dans votre vérification de l'état.
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/0pour le trafic IPv4 et::/0pour 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/0Pour 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
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'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
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
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
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
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
Ajoutez les groupes d'instances en tant que backends au service de backend.
Ajoutez le groupe d'instances dans la zone
us-west1-aau 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 \ --globalAjoutez le groupe d'instances dans la zone
europe-west2-aau 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 \ --globalCré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 :
- les plages d'adresses IP pour les vérifications d'état de Google.
- le protocole IP et les ports configurés dans votre vérification de l'état.
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/0pour le trafic IPv4 et::/0pour 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.
Pour permettre au trafic IPv4 d'atteindre les backends des groupes d'instances
ig-us-l3-defaultetig-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/0Pour permettre au trafic IPv6 d'atteindre les backends des groupes d'instances
ig-us-l3-defaultetig-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
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'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
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
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
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
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
Ajoutez les groupes d'instances en tant que backends au service de backend.
Ajoutez le groupe d'instances dans la zone
us-west1-aau 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 \ --globalAjoutez le groupe d'instances dans la zone
europe-west2-aau 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 \ --globalCréez une règle de transfert globale avec son champ
ip-protocoldéfini surL3_DEFAULTpour 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
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-ipv4oulb-forwarding-rule-l3-default-ipv4pour afficher les adresses IP externes.gcloud compute forwarding-rules describe lb-forwarding-rule-tcp-80-ipv4 \ --globalDeux 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_0etIP_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
Envoyez des requêtes Web (via TCP sur le port 80) à l'équilibreur de charge à l'aide de
curlpour 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 exemplePage served from: VM_NAME. Les réponses ne proviennent que des instances des groupes d'instancesig-us-tcp-80ouig-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'instancesig-us-l3-defaultouig-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
- Documentation de référence de l'API Cloud Load Balancing et de gcloud CLI
- Nettoyer une configuration d'équilibrage de charge