Questo documento mostra come creare un bilanciatore del carico di rete passthrough esterno globale per bilanciare il traffico tra i backend NEG zonali di cui è stato eseguito il deployment in più regioni.
Prima di iniziare
Assicurati che la tua configurazione soddisfi i seguenti prerequisiti.
Installa Google Cloud CLI
Le istruzioni di questa guida utilizzano Google Cloud CLI per configurare un bilanciatore del carico di rete passthrough esterno globale. Per installarla, vedi Installa gcloud CLI.
Ruoli obbligatori
Se hai creato il progetto, ti viene concesso il
ruolo Proprietario
(roles/owner). Per impostazione predefinita, il ruolo Proprietario (roles/owner) o
il ruolo Editor (roles/editor) include le autorizzazioni necessarie
per seguire questo documento.
Se non sei il creatore del progetto, le autorizzazioni richieste devono essere concesse al principal appropriato. Ad esempio, un'entità può essere un Account Google (per gli utenti finali) o un service account.
Per ottenere le autorizzazioni necessarie per configurare un bilanciatore del carico di rete pass-through esterno globale con backend di gruppi di istanze VM, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Crea una rete VPC, una subnet e componenti di bilanciamento del carico:
Ruolo Compute Network Admin (
roles/compute.networkAdmin) -
Crea regole firewall:
Ruolo Compute Security Admin (
roles/compute.securityAdmin) -
Crea istanze VM:
Ruolo Compute Instance Admin (
roles/compute.instanceAdmin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Per saperne di più su ruoli e autorizzazioni per Cloud Load Balancing, consulta Ruoli e autorizzazioni. Per saperne di più sulla definizione delle policy IAM con concessioni condizionali per le regole di forwarding, consulta Condizioni IAM per le regole di forwarding.
Panoramica della configurazione
Il seguente diagramma mostra un bilanciatore del carico di rete passthrough esterno globale con backend NEG zonali di cui è stato eseguito il deployment nelle regioni us-west1 e europe-west2.
Per capire come funziona un bilanciatore del carico di rete passthrough esterno globale,
consulta la sezione Architettura
nella guida alla panoramica.
In questo esempio, sono configurati i seguenti componenti:
Quattro VM di backend:
vm-us-1evm-us-2in zonaus-west1-avm-eu-1evm-eu-2in zonaeurope-west2-a
Due NEG di zona con
GCE_VM_IPendpoint:- Collega
nic0divm-us-1evm-us-2al NEG nella zonaus-west1-a - Collega
nic0divm-eu-1evm-eu-2al NEG nella zonaeurope-west2-a
- Collega
Un singolo bilanciatore del carico di rete passthrough esterno globale per bilanciare il traffico
TCP:80tra i quattro endpoint di rete.
Configura la rete e le subnet
L'esempio utilizza una rete VPC in modalità personalizzata denominata lb-network
con subnet in due regioni diverse.
Puoi configurare un bilanciatore del carico di rete passthrough esterno globale in modo che abbia endpoint di rete GCE_VM_IP che possono fare riferimento all'interfaccia di rete di una VM il cui tipo di stack può essere solo IPv4 o dual-stack.
La tabella seguente riepiloga la compatibilità tra i tipi di traffico del bilanciatore del carico, le interfacce di rete delle VM di backend e i tipi di stack delle subnet VPC. Assicurati di avere familiarità con i requisiti di compatibilità dell'interfaccia di rete della VM di backend con le subnet VPC descritti nella guida all'architettura del bilanciatore del carico di rete passthrough esterno globale.
| Tipo di traffico del bilanciatore del carico | Tipo di stack dell'interfaccia di rete della VM di backend | Tipo di stack della subnet VPC |
|---|---|---|
| Solo traffico IPv4 | IPV4_ONLY |
IPV4_ONLY o IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| Solo traffico IPv6 | IPV6_ONLY |
IPV6_ONLY o IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| Traffico IPv4 e IPv6 | IPV4_IPV6 |
IPV4_IPV6 |
gcloud
Crea la rete VPC. In questo esempio, la rete VPC si chiama
lb-network.gcloud compute networks create lb-network --subnet-mode=custom
All'interno della rete VPC (
lb-network), crea subnet in due regioni.Crea una subnet denominata
lb-subnet-usper gli endpoint di rete nella regioneus-west1.Per creare una subnet solo IPv4, utilizza il seguente comando:
gcloud compute networks subnets create lb-subnet-us \ --stack-type=IPV4_ONLY \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1Per creare una subnet dual-stack, utilizza il seguente comando:
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-west1Crea una subnet denominata
lb-subnet-euper gli endpoint di rete nella regioneeurope-west2.Solo per il traffico IPv4, utilizza il seguente comando per creare una subnet solo IPv4:
gcloud compute networks subnets create lb-subnet-eu \ --stack-type=IPV4_ONLY \ --network=lb-network \ --range=10.1.3.0/24 \ --region=europe-west2Per il traffico IPv4 e IPv6, utilizza il seguente comando per creare una subnet dual-stack:
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
Crea regole firewall
Per configurare in modo sicuro l'ambiente di produzione, devi creare due regole firewall separate:
Regola firewall per il controllo di integrità, configurata per consentire il traffico in entrata da:
- Gli intervalli IP dei controlli di integrità di Google e
- il protocollo IP e le porte configurati nel controllo di integrità
Regola firewall per il traffico utente, configurata per consentire il traffico in entrata da:
- gli intervalli IP di origine client specifici che devono accedere al bilanciatore del carico e
- il protocollo IP e le porte configurati nelle regole di forwarding
Tieni presente quanto segue:
Se la tua applicazione serve tutti gli utenti di internet senza alcuna limitazione, configura gli intervalli IP di origine
0.0.0.0/0per il traffico IPv4 e::/0per il traffico IPv6.Se hai configurato il controllo di integrità per eseguire il probe del protocollo e delle porte IP del bilanciamento del carico, puoi configurare una singola regola firewall unendo le regole firewall per il controllo di integrità e il traffico utente.
gcloud
Crea una regola firewall che consenta al traffico TCP da tutti gli intervalli di origine di raggiungere le istanze VM di backend sulla porta 80. Questa porta e questo protocollo vengono utilizzati sia per il bilanciamento del carico che per il controllo di integrità.
Per consentire tutto il traffico IPv4, esegui questo comando:
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/0Per consentire tutto il traffico IPv6, esegui questo comando:
gcloud compute firewall-rules create firewall-allow-traffic-ipv6 \ --network=lb-network \ --target-tags=allow-traffic \ --allow=tcp:80 \ --source-ranges=::/0
Crea VM di backend
Per questo esempio di bilanciamento del carico, crea quattro VM come evidenziato nella sezione Panoramica della configurazione.
In questo esempio, l'interfaccia nic0 della VM è associata alla rete VPC lb-network e a una delle subnet, ovvero lb-subnet-us o lb-subnet-eu. L'interfaccia di rete a cui fa riferimento l'endpoint GCE_VM_IP deve trovarsi nella stessa subnet VPC associata al NEG di zona.
La tabella seguente riepiloga la compatibilità tra i tipi di traffico del bilanciatore del carico, le interfacce di rete delle VM di backend e i tipi di stack delle subnet VPC. Assicurati di avere familiarità con i requisiti di compatibilità dell'interfaccia di rete della VM di backend con le subnet VPC descritti nella guida all'architettura del bilanciatore del carico di rete passthrough esterno globale.
| Tipo di traffico del bilanciatore del carico | Tipo di stack dell'interfaccia di rete della VM di backend | Tipo di stack della subnet VPC |
|---|---|---|
| Solo traffico IPv4 | IPV4_ONLY |
IPV4_ONLY o IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| Solo traffico IPv6 | IPV6_ONLY |
IPV6_ONLY o IPV4_IPV6 |
IPV4_IPV6 |
IPV4_IPV6 |
|
| Traffico IPv4 e IPv6 | IPV4_IPV6 |
IPV4_IPV6 |
gcloud
Crea le quattro VM eseguendo il comando gcloud compute instances create
quattro volte, utilizzando le seguenti quattro combinazioni per
VM_NAME, REGION,
ZONE e SUBNET.
Lo script Bash è identico per tutte e quattro le 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 |
Per creare VM di backend con interfacce di rete solo IPv4, utilizza il seguente comando.
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'
Per creare VM di backend con interfacce di rete dual stack, utilizza il seguente comando.
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'
Crea NEG a livello di zona con endpoint GCE_VM_IP
Per questo esempio di bilanciamento del carico, crea due NEG zonali con endpoint GCE_VM_IP.
- NEG a livello di zona
neg-usnella zonaus-west1-a. Il NEG zonale è composto da due endpoint di rete:- Collega
nic0divm-us-1evm-us-2al NEG a livello di zonaneg-us
- Collega
- NEG a livello di zona
neg-euineurope-west2-a. Il NEG zonale è composto da due endpoint di rete:- Collega
nic0divm-eu-1evm-eu-2al NEG a livello di zonaneg-eu
- Collega
Quando crei un nuovo NEG zonale con endpoint GCE_VM_IP, devi associare esplicitamente il NEG a una subnet VPC prima di poter aggiungere endpoint al NEG. Il bilanciatore del carico invia i pacchetti all'interfaccia di rete che si trova nella subnet VPC associata al NEG. In questo esempio, gli endpoint del NEG di zona punteranno a nic0 delle VM.
gcloud
Crea un NEG di zona
GCE_VM_IPdenominatoneg-usnella zonaus-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-usAggiungi endpoint al NEG zonale
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'Crea un NEG di zona
GCE_VM_IPdenominatoneg-eunella zonaeurope-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-euAggiungi endpoint al NEG zonale
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'
Prenota indirizzi IP esterni globali
Un bilanciatore del carico di rete passthrough esterno globale richiede due indirizzi IP esterni globali, uno per ogni gruppo di disponibilità. Questi due indirizzi IP vengono poi collegati alla regola di forwarding del bilanciatore del carico.
Per un bilanciatore del carico di rete passthrough esterno globale, gli indirizzi IP della regola di forwarding sono completamente disaccoppiati dalle subnet VPC. Gli indirizzi IP appartengono a pool di indirizzi IP esterni globali di proprietà di Google o a prefissi delegati pubblici IPv4 esterni globali di gruppi di disponibilità distinti e non sono associati ad alcuna subnet VPC.
Quando configuri una regola di forwarding IPv6, gli indirizzi IP della regola di forwarding
vengono allocati come prefissi /96.
gcloud
Per il traffico IPv4:
Prenota il primo indirizzo IP esterno globale denominato
lb-ipv4-ag0nel gruppo di disponibilità 0.gcloud beta compute addresses create lb-ipv4-ag0 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \ --ip-version=IPV4Prenota il secondo indirizzo IP esterno globale
lb-ipv4-ag1nel gruppo di disponibilità 1.gcloud beta compute addresses create lb-ipv4-ag1 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \ --ip-version=IPV4
Per il traffico IPv6:
Prenota il primo indirizzo IP esterno globale denominato
lb-ipv6-ag0nel gruppo di disponibilità 0.gcloud beta compute addresses create lb-ipv6-ag0 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP0 \ --ip-version=IPV6Prenota il secondo indirizzo IP esterno globale
lb-ipv6-ag1nel gruppo di disponibilità 1.gcloud beta compute addresses create lb-ipv6-ag1 \ --global \ --purpose=PASSTHROUGH_LOAD_BALANCER_AVAILABILITY_GROUP1 \ --ip-version=IPV6
Configura il bilanciatore del carico
La configurazione di un bilanciatore del carico di rete passthrough esterno globale prevede la creazione di un controllo di integrità, un servizio di backend e una regola di forwarding.
gcloud
Crea un controllo di integrità TCP configurato per generare probe
TCP:80gcloud compute health-checks create tcp hc-tcp-80 \ --global \ --port=80
Crea un servizio di backend globale con lo schema di bilanciamento del carico
EXTERNAL_PASSTHROUGH.gcloud beta compute backend-services create lb-backend-service \ --load-balancing-scheme=EXTERNAL_PASSTHROUGH \ --health-checks=hc-tcp-80 \ --global
Aggiungi i NEG di zona come backend al servizio di backend.
Aggiungi il NEG zonale nella zona
us-west1-aal servizio di 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 \ --globalAggiungi il NEG zonale nella zona
europe-west2-aal servizio di 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 \ --globalCrea una regola di forwarding globale per gestire il traffico
TCP:80. Devi creare due regole di forwarding per gestire il traffico IPv4 e IPv6.Assicurati che la versione IP della regola di forwarding corrisponda al tipo di stack delle interfacce di rete VM di backend.
La regola di forwarding fa riferimento agli indirizzi IP di ogni gruppo di disponibilità.
Per il traffico 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
Per il traffico 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
testa il bilanciatore del carico
Ottieni gli indirizzi IP prenotati collegati alla regola di forwarding.
gcloud beta compute forwarding-rules describe lb-forwarding-rule-ipv4 \ --globalVengono restituiti due indirizzi IP, uno per ogni gruppo di disponibilità. Questi indirizzi IP sono denominati
IP_ADDRESS_AVAILABILITY_GROUP_0eIP_ADDRESS_AVAILABILITY_GROUP_1.Inviare traffico a uno dei due indirizzi IP.
curl http://IP_ADDRESS_AVAILABILITY_GROUP_0
curl http://IP_ADDRESS_AVAILABILITY_GROUP_1
Dovresti vedere le risposte delle VM di backend in regioni diverse a seconda della tua posizione e dell'integrità del backend.
Controlla la tabella di routing locale per gli indirizzi IP del bilanciatore del carico
Le tabelle di routing locali delle VM di backend contengono gli indirizzi IP del bilanciatore del carico di rete passthrough esterno globale.
Per controllare le route locali sulla VM di backend, connettiti alla VM di backend utilizzando SSH ed esegui questo comando:
ip route list table local
L'output è il seguente:
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
Nell'esempio precedente, 136.124.69.214 e 136.124.83.205 sono gli indirizzi IP assegnati alla regola di forwarding del bilanciatore del carico. Le voci di riga
local 136.124.69.214 dev ens4 proto 66 scope host e local 136.124.83.205
dev ens4 proto 66 scope host nella tabella di routing locale della VM consentono
ai pacchetti indirizzati agli indirizzi IP del bilanciatore del carico di essere accettati dal
backend. L' Cloud de Confiance ambiente guest è responsabile dell'aggiunta di questa voce.
La voce della tabella di routing locale nella VM di backend accetta il pacchetto per la consegna all'host locale, dove lo stack di rete lo consegna all'applicazione in ascolto. I pacchetti di risposta dell'applicazione vengono quindi inviati direttamente al client.
Tieni presente che l'indirizzo IP del bilanciatore del carico non è effettivamente configurato sull'interfaccia di rete della VM. Per verificarlo, esegui questo comando:
ip addr list
L'output è il seguente. Gli indirizzi IP (136.124.69.214 e
136.124.83.205) vengono visualizzati nella tabella di routing locale, ma non sono configurati
nell'interfaccia di rete.
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