Ce document explique comment créer un équilibreur de charge réseau passthrough externe global pour équilibrer le trafic entre des backends NEG zonaux déployés dans plusieurs régions.
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 un équilibreur de charge réseau passthrough externe mondial avec des backends NEG zonaux déployés dans les régions us-west1 et europe-west2.
Pour comprendre le fonctionnement d'un équilibreur de charge réseau passthrough externe global, consultez la section Architecture du guide de présentation.
Dans cet exemple, les composants suivants sont configurés :
Quatre VM de backend :
vm-us-1etvm-us-2dans la zoneus-west1-avm-eu-1etvm-eu-2dans la zoneeurope-west2-a
Deux NEG zonaux avec des points de terminaison
GCE_VM_IP:- Associez
nic0devm-us-1etvm-us-2au NEG dans la zoneus-west1-a. - Associez
nic0devm-eu-1etvm-eu-2au NEG dans la zoneeurope-west2-a.
- Associez
Un seul équilibreur de charge réseau passthrough externe mondial pour équilibrer le trafic
TCP:80entre les quatre points de terminaison réseau.
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.
Vous pouvez configurer un équilibreur de charge réseau passthrough externe global pour qu'il comporte GCE_VM_IP points de terminaison réseau pouvant faire référence à l'interface réseau d'une VM dont le type de pile peut être IPv4 uniquement ou à double pile.
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 |
gcloud
Créez le 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 points de terminaison du réseau 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-west1Créez un sous-réseau nommé
lb-subnet-eupour les points de terminaison du réseau dans la régioneurope-west2.Pour le trafic IPv4 uniquement, utilisez la commande suivante pour créer un sous-réseau IPv4 uniquement :
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV4_ONLY \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2Pour 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-eu \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=EXTERNAL \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2
Créer des règles de pare-feu
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 d'état.
Pour autoriser tout le trafic IPv4, exécutez la commande suivante :
gcloud compute firewall-rules create firewall-allow-traffic-ipv4 \ --network=lb-network \ --target-tags=allow-traffic \ --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 firewall-allow-traffic-ipv6 \ --network=lb-network \ --target-tags=allow-traffic \ --allow=tcp:80 \ --source-ranges=::/0
Créer des VM de backend
Pour cet exemple d'équilibrage de charge, vous allez créer quatre VM, comme indiqué dans la section Présentation de la configuration.
Dans cet exemple, l'interface nic0 de la VM est associée au réseau VPC lb-network et à l'un des sous-réseaux, lb-subnet-us ou lb-subnet-eu. L'interface réseau référencée par le point de terminaison GCE_VM_IP doit se trouver dans le même sous-réseau VPC associé au NEG zonal.
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 |
gcloud
Créez quatre VM en exécutant la commande gcloud compute instances create quatre fois, en utilisant les quatre combinaisons suivantes pour VM_NAME, REGION, ZONE et SUBNET.
Le script Bash est identique pour les quatre VM.
| VM_NAME | REGION | ZONE | SUBNET |
|---|---|---|---|
vm-us-1 |
us-west1 |
us-west1-a |
lb-subnet-us |
vm-us-2 |
us-west1 |
us-west1-a |
lb-subnet-us |
vm-eu-1 |
europe-west2 |
europe-west2-a |
lb-subnet-eu |
vm-eu-2 |
europe-west2 |
europe-west2-a |
lb-subnet-eu |
Pour créer des VM de backend avec des interfaces réseau IPv4 uniquement, utilisez la commande suivante.
gcloud compute instances create VM_NAME \
--zone=ZONE \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-traffic \
--network-interface=network=lb-network,subnet=SUBNET,stack-type=IPV4_ONLY \
--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 instances create VM_NAME \
--zone=ZONE \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-traffic \
--network-interface=network=lb-network,subnet=SUBNET,stack-type=IPV4_IPV6,ipv6-network-tier=PREMIUM \
--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 NEG zonaux avec des points de terminaison GCE_VM_IP
Pour cet exemple d'équilibrage de charge, vous allez créer deux NEG zonaux avec des points de terminaison GCE_VM_IP.
- NEG zonal
neg-usdans la zoneus-west1-a. Le NEG zonal se compose de deux points de terminaison réseau :- Associez
nic0devm-us-1etvm-us-2au NEG zonalneg-us.
- Associez
- NEG zonal
neg-eudanseurope-west2-a. Le NEG zonal se compose de deux points de terminaison du réseau :- Associez
nic0devm-eu-1etvm-eu-2au NEG zonalneg-eu.
- Associez
Lorsque vous créez un NEG zonal avec des points de terminaison GCE_VM_IP, vous devez explicitement associer le NEG à un sous-réseau VPC avant de pouvoir lui attribuer des points de terminaison. L'équilibreur de charge transmet les paquets à l'interface réseau du sous-réseau VPC associé au NEG. Dans cet exemple, les points de terminaison du NEG zonal vont pointer vers nic0 des VM.
gcloud
Créez un NEG zonal
GCE_VM_IPappeléneg-usdans la zoneus-west1-a.gcloud compute network-endpoint-groups create neg-us \ --network-endpoint-type=gce-vm-ip \ --zone=us-west1-a \ --network=lb-network \ --subnet=lb-subnet-usAjoutez des points de terminaison au NEG zonal
neg-us.gcloud compute network-endpoint-groups update neg-us \ --zone=us-west1-a \ --add-endpoint='instance=vm-us-1' \ --add-endpoint='instance=vm-us-2'Créez un NEG zonal
GCE_VM_IPappeléneg-eudans la zoneeurope-west2-a.gcloud compute network-endpoint-groups create neg-eu \ --network-endpoint-type=gce-vm-ip \ --zone=europe-west2-a \ --network=lb-network \ --subnet=lb-subnet-euAjoutez des points de terminaison au NEG zonal
neg-eu.gcloud compute network-endpoint-groups update neg-eu \ --zone=europe-west2-a \ --add-endpoint='instance=vm-eu-1' \ --add-endpoint='instance=vm-eu-2'
Réserver des adresses IP externes globales
Un équilibreur de charge réseau passthrough externe global nécessite deux adresses IP externes globales, une pour chaque groupe de disponibilité. Ces deux adresses IP sont ensuite associées à la règle de transfert de l'équilibreur de charge.
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 l'équilibreur de charge
Pour configurer un équilibreur de charge réseau passthrough externe global, vous devez créer une vérification de l'état, un service de backend et une règle de transfert.
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 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --health-checks=hc-tcp-80 \ --global
Ajoutez les NEG zonaux en tant que backends au service de backend.
Ajoutez le NEG zonal dans la zone
us-west1-aau service de backend.gcloud beta compute backend-services add-backend lb-backend-service \ --network-endpoint-group=neg-us \ --network-endpoint-group-zone=us-west1-a \ --balancing-mode=RATE \ --max-rate-per-endpoint=100000 \ --globalAjoutez le NEG zonal dans la zone
europe-west2-aau service de backend.gcloud beta compute backend-services add-backend lb-backend-service \ --network-endpoint-group=neg-eu \ --network-endpoint-group-zone=europe-west2-a \ --balancing-mode=RATE \ --max-rate-per-endpoint=100000 \ --globalCréez une règle de transfert globale pour diffuser le trafic
TCP:80. 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-ipv4 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service \ --global \ --ip-addresses=lb-ipv4-ag0,lb-ipv4-ag1
Pour le trafic IPv6 :
gcloud beta compute forwarding-rules create lb-forwarding-rule-ipv6 \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --ip-protocol=TCP \ --ports=80 \ --backend-service=lb-backend-service \ --global \ --ip-addresses=lb-ipv6-ag0,lb-ipv6-ag1
Tester l'équilibreur de charge
Obtenez les adresses IP réservées associées à la règle de transfert.
gcloud beta compute forwarding-rules describe lb-forwarding-rule-ipv4 \ --globalDeux adresses IP sont renvoyées, une pour chaque groupe de disponibilité. Ces adresses IP sont appelées
IP_ADDRESS_AVAILABILITY_GROUP_0etIP_ADDRESS_AVAILABILITY_GROUP_1.Envoyez du trafic vers l'une ou l'autre des adresses IP.
curl http://IP_ADDRESS_AVAILABILITY_GROUP_0
curl http://IP_ADDRESS_AVAILABILITY_GROUP_1
Vous devriez voir des réponses des VM de backend dans différentes régions en fonction de votre emplacement et de l'état du backend.
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' Cloud de Confiance 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