Questo tutorial utilizza un esempio per mostrarti come eseguire il deployment di un bilanciatore del carico di rete passthrough interno come hop successivo a cui vengono inoltrati i pacchetti lungo il percorso fino alla destinazione finale. Utilizza i tag di rete per configurare le istanze client specifiche a cui si applica il percorso.
Questa guida presuppone che tu abbia familiarità con il funzionamento di un il bilanciatore del carico di rete passthrough interno, i suoi componenti correlati come le regole firewall e l'integrità e come i bilanciatori del carico di rete passthrough interni vengono utilizzati come hop successivi per inoltrare i pacchetti un percorso.
Con il bilanciatore del carico di rete passthrough interno come funzionalità di hop successivo, puoi integrare ad alta disponibilità e con scale out. Per farlo, devi configurare una route statica personalizzata e impostare l'hop successivo sul bilanciatore del carico. distribuisce il traffico per il prefisso di destinazione al pool di di appliance VM di terze parti sottoposte a controllo di integrità. Hai a disposizione diverse opzioni per selezionare i hop successivi per supportare l'alta disponibilità di queste appliance di terze parti:
- Specifica un indirizzo IP come hop successivo: utilizza l'indirizzo IP interno. associato alla regola di forwarding come hop successivo. L'indirizzo IP virtuale di questo bilanciatore del carico può essere appreso tra i peer senza dover esportare la route personalizzata tramite i peer.
- Utilizza tag di rete: puoi specificare un tag di rete in modo che il bilanciatore del carico di rete passthrough interno come route dell'hop successivo si applica solo alle istanze client che che sono state configurate con il tag. In questo modo puoi selezionare le istanze client da compilare con il bilanciatore del carico di rete passthrough interno taggato come route hop successivo e l'insieme di appliance a cui indirizzare il traffico. Non è necessario separare le diverse istanze client in VPC distinti, ognuno che rimanda al bilanciatore del carico di rete passthrough interno preferito che fa da front-end a un insieme di appliance. Route codificate non vengono esportate né importate tramite il peering di rete VPC.
- Configura più route per lo stesso prefisso di destinazione: con i tag puoi specificare più route per la stessa destinazione con bilanciatori del carico interni diversi come hop successivi. Sebbene ECMP non sia supportato (stessa destinazione, stessi tag, hop successivi diversi), puoi utilizzare tag diversi o priorità diverse per le stesse route di destinazione.
Panoramica della configurazione
I gruppi di istanze gestite che utilizzano VM con un singolo NIC sono definiti in regioni diverse, con istanze Linux configurate per eseguire la traduzione SNAT di tutto il traffico in uscita su internet (flusso di traffico in uscita da nord a sud). Il failover regionale viene attivato manualmente. Questo tutorial mostra anche la connettività est-ovest con hashing simmetrico utilizzando un bilanciatore del carico di rete passthrough interno come hop successivo.
I passaggi in questa sezione descrivono come configurare quanto segue:
- Esempi di reti VPC con subnet personalizzate
- Regole firewall che consentono le connessioni in entrata alle VM di backend
- Gruppi di istanze gestite di backend che eseguono il deployment di gateway NAT
- VM client per testare le connessioni
- I seguenti componenti del bilanciatore del carico di rete passthrough interno:
- Un controllo di integrità per il servizio di backend
- Un servizio di backend interno
- Una regola di inoltro interna e un indirizzo IP per il frontend del bilanciatore del carico
L'architettura di questo esempio ha il seguente aspetto:
Mentre segui i passaggi di questo tutorial, sostituisci REGION_A e REGION_B con le rispettive regioni che vuoi utilizzare per questo esempio.
Crea le reti e le subnet VPC
Crea una rete VPC denominata
hub-vpc
.gcloud compute networks create hub-vpc --subnet-mode custom
Crea una subnet in
hub-vpc
in REGION_A.gcloud compute networks subnets create hub-subnet-a \ --network hub-vpc \ --range 10.0.0.0/24 \ --region REGION_A
Crea una subnet in
hub-vpc
in region B.gcloud compute networks subnets create hub-subnet-b \ --network hub-vpc \ --range 10.0.1.0/24 \ --region REGION_B
Crea una rete VPC denominata
spoke1-vpc
.gcloud compute networks create spoke1-vpc --subnet-mode custom
Crea una subnet in
spoke1-vpc
.gcloud compute networks subnets create spoke1-subnet1 \ --network spoke1-vpc \ --range 192.168.0.0/24 \ --region REGION_A
Crea una rete VPC denominata
spoke2-vpc
.gcloud compute networks create spoke2-vpc --subnet-mode custom
Crea una subnet in
spoke2-vpc
.gcloud compute networks subnets create spoke2-subnet1 \ --network spoke2-vpc \ --range 192.168.1.0/24 \ --region REGION_A
Configurazione delle regole del firewall
Configura le seguenti regole del firewall per consentire il traffico TCP, UDP e ICMP verso di raggiungere le istanze dagli intervalli di origine specificati.
gcloud compute firewall-rules create hub-vpc-web-ping-dns \ --network hub-vpc \ --allow tcp:80,tcp:443,icmp,udp:53 \ --source-ranges 10.0.0.0/24,10.0.1.0/24,192.168.0.0/24,192.168.1.0/24
gcloud compute firewall-rules create spoke1-vpc-web-ping-dns \ --network spoke1-vpc \ --allow tcp:80,tcp:443,icmp,udp:53 \ --source-ranges 10.0.0.0/24,10.0.1.0/24,192.168.0.0/24,192.168.1.0/24
gcloud compute firewall-rules create spoke2-vpc-web-ping-dns \ --network spoke2-vpc \ --allow tcp:80,tcp:443,icmp,udp:53 \ --source-ranges 10.0.0.0/24,10.0.1.0/24,192.168.0.0/24,192.168.1.0/24
Crea una regola firewall per consentire ai probe del controllo di integrità di accedere alle istanze su
hub-vpc
.gcloud compute firewall-rules create hub-vpc-health-checks \ --network hub-vpc \ --allow tcp:80 \ --target-tags natgw \ --source-ranges 130.211.0.0/22,35.191.0.0/16
Crea regole firewall per consentire l'accesso SSH alle istanze su tutte le subnet. Se preferisci utilizzare Identity-Aware Proxy per l'inoltro TCP (opzione consigliata), segui questi passaggi per attivare SSH.
gcloud compute firewall-rules create hub-vpc-allow-ssh \ --network hub-vpc \ --allow tcp:22
gcloud compute firewall-rules create spoke1-vpc-allow-ssh \ --network spoke1-vpc \ --allow tcp:22
gcloud compute firewall-rules create spoke2-vpc-allow-ssh \ --network spoke2-vpc \ --allow tcp:22
Configura il peering di rete VPC
Crea un peering da
hub-vpc
aspoke1-vpc
.gcloud compute networks peerings create hub-to-spoke1 \ --network hub-vpc \ --peer-network spoke1-vpc \ --peer-project PROJECT_ID \ --export-custom-routes
Crea un peering da
spoke1-vpc
ahub-vpc
.gcloud compute networks peerings create spoke1-to-hub \ --network spoke1-vpc \ --peer-network hub-vpc \ --peer-project PROJECT_ID \ --import-custom-routes
Crea un peering da
hub-vpc
aspoke2-vpc
.gcloud compute networks peerings create hub-to-spoke2 \ --network hub-vpc \ --peer-network spoke2-vpc \ --peer-project PROJECT_ID \ --export-custom-routes
Crea un peering da
spoke2-vpc
ahub-vpc
.gcloud compute networks peerings create spoke2-to-hub \ --network spoke2-vpc \ --peer-network hub-vpc \ --peer-project PROJECT_ID \ --import-custom-routes
Crea VM gateway NAT e risorse di bilanciamento del carico nella regione A
Crea il backend del gruppo di istanze gestite in REGION_A. Quindi, crea le risorse di bilanciamento del carico e i percorsi dell'hop successivo.
Creare un gruppo di istanze gestite
Crea un modello di istanza per eseguire il deployment di un gateway NAT in region A.
gcloud compute instance-templates create hub-natgw-region-a-template \ --network hub-vpc \ --subnet hub-subnet-a \ --region REGION_A \ --machine-type n1-standard-2 \ --can-ip-forward \ --tags natgw \ --metadata startup-script='#! /bin/bash # Enable IP forwarding: echo 1 > /proc/sys/net/ipv4/ip_forward echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/20-iptables.conf # iptables configuration iptables -t nat -F sudo iptables -t nat -A POSTROUTING ! -d 192.168.0.0/16 -j MASQUERADE iptables-save # Use a web server to pass the health check for this example. # You should use a more complete test in production. apt-get update apt-get install apache2 tcpdump -y a2ensite default-ssl a2enmod ssl echo "Example web page to pass health check" | \ tee /var/www/html/index.html \ systemctl restart apache2'
Crea il gruppo di istanze in REGION_A.
gcloud compute instance-groups managed create hub-natgw-region-a-mig \ --region REGION_A \ --size=2 \ --template=hub-natgw-region-a-template
Crea il bilanciatore del carico
Per creare un bilanciatore del carico in REGION_A, segui questi passaggi.
Creare un controllo di integrità.
gcloud compute health-checks create http natgw-ilbnhop-health-check \ --port=80
Creare il servizio di backend.
gcloud compute backend-services create hub-natgw-region-a-be \ --load-balancing-scheme=internal \ --protocol tcp \ --region REGION_A\ --health-checks=natgw-ilbnhop-health-check
Aggiungi il gruppo di istanze gestite come backend.
gcloud compute backend-services add-backend hub-natgw-region-a-be \ --instance-group=hub-natgw-region-a-mig \ --instance-group-region=REGION_A
Crea la regola di forwarding.
gcloud compute forwarding-rules create hub-natgw-region-a \ --load-balancing-scheme=internal \ --network=hub-vpc \ --subnet=hub-subnet-a \ --address=10.0.0.10 \ --ip-protocol=TCP \ --ports=all \ --allow-global-access \ --backend-service=hub-natgw-region-a-be \ --backend-service-region=REGION_A
Crea i route per l'hop successivo
Crea il bilanciatore del carico di rete passthrough interno come route dell'hop successivo con la rete predefinita
tag ilbanh-region-a
.
gcloud compute routes create spoke1-natgw-region-a \ --network=spoke1-vpc \ --destination-range=0.0.0.0/0 \ --next-hop-ilb=10.0.0.10 \ --tags=ilbanh-region-a \ --priority 800
gcloud compute routes create spoke2-natgw-region-a \ --network=spoke2-vpc \ --destination-range=0.0.0.0/0 \ --next-hop-ilb=10.0.0.10 \ --tags=ilbanh-region-a \ --priority 800
Testa la connettività
Crea istanze client per testare la connettività.
Crea un'istanza client di test in
spoke1-vpc
.gcloud compute instances create spoke1-client \ --subnet=spoke1-subnet1 --no-address --zone ZONE_A \ --tags=ilbanh-region-a \ --metadata startup-script='#! /bin/bash apt-get update apt-get install tcpdump -y'
Crea un'istanza client di test in
spoke2-vpc
.gcloud compute instances create spoke2-client \ --subnet=spoke2-subnet1 --no-address --zone ZONE_A \ --tags=ilbanh-region-a \ --metadata startup-script='#! /bin/bash apt-get update apt-get install tcpdump -y'
Convalidare i flussi di traffico nord-sud e est-ovest
Assicurati che le VM del gateway NAT siano in esecuzione e scrivi il codice assegnato indirizzi IP esterni:
gcloud compute instances list --filter="status:RUNNING AND name~natgw"
Verifica che il bilanciatore del carico sia in stato di esecuzione e che le route siano state create come previsto:
gcloud compute backend-services get-health hub-natgw-region-a-be --region REGION_A
backend: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/regions/us-central1/instanceGroups/hub-natgw-region-a-mig status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/regions/us-central1/forwardingRules/hub-natgw-region-a forwardingRuleIp: 10.0.0.10 healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/zones/us-central1-b/instances/<INSTANCE_NAME> ipAddress: 10.0.0.5 port: 80 - forwardingRule: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/regions/us-central1/forwardingRules/hub-natgw-region-a forwardingRuleIp: 10.0.0.10 healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/zones/us-central1-f/instances/<INSTANCE_NAME> ipAddress: 10.0.0.6 port: 80 kind: compute#backendServiceGroupHealth
Verifica che il bilanciatore del carico di rete passthrough interno come route dell'hop successivo venga aggiunto allo spoke I VPC con la priorità prevista e che hanno come target indirizzo IP del bilanciatore del carico di rete passthrough interno:
gcloud compute routes list --filter="name~natgw"
Vai alla console Google Cloud e stabilisci connessioni SSH al le VM gateway NAT in schede diverse.
Avvia
tcpdump
in ciascuna di queste sessioni SSH utilizzando il seguente comando:sudo tcpdump -n net 192.168.0.0/16
Vai alla console Google Cloud e stabilisci una nuova connessione SSH alla VM
spoke1-client
. Quindi, utilizza il seguente comando per eseguire un ping sull'indirizzo IP internospoke2-client
.ping SPOKE2_CLIENT_INTERNAL_IP
Passa alle finestre SSH del gateway NAT e verifica di poter vedere i pacchetti ICMP come segue:
16:51:28.411260 IP 192.168.0.2 > 192.168.1.2: ICMP echo request, id 1684, seq 492, length 64 16:51:28.411676 IP 192.168.1.2 > 192.168.0.2: ICMP echo reply, id 1684, seq 492, length 64
Dovresti riuscire a eseguire correttamente il ping della VM client, il che dimostra quanto segue:
- Il traffico est-ovest è abilitato tramite i gateway NAT. Tieni presente che il peering tra reti virtuali di spoke non è supportato.
- Hashing simmetrico sia abilitato e funzioni come previsto, poiché i client possono comunicare tramite i propri indirizzi IP di origine, senza richiedere la traduzione SNAT.
- Tutti i protocolli sono supportati con il bilanciatore del carico di rete passthrough interno come hop successivo.
Arresta gli output tcpdump sulle VM del gateway NAT e osserva il
iptables
statistiche:watch sudo iptables -t nat -nvL
Torna alla VM
spoke1-client
ed esegui il seguente comando più volte. L'output mostra l'indirizzo IP pubblico di origine utilizzato per connettersi al sito web.curl ifconfig.io
Dovresti vedere gli indirizzi IP di entrambe le VM gateway NAT come indirizzi IP di origine. Ciò dimostra che il bilanciatore del carico di rete passthrough interno distribuisce il traffico in base all'affinità predefinita (hashing a 5 tuple).
Torna alla VM gateway NAT per verificare che i contatori dei pacchetti siano aumentati.
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 105 11442 MASQUERADE all -- * * 0.0.0.0/0 !192.168.0.0/16 Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Crea VM gateway NAT e risorse di bilanciamento del carico nella regione B
Crea il backend del gruppo di istanze gestite in region B. Quindi, crea le risorse di bilanciamento del carico e i percorsi dell'hop successivo.
Creare un gruppo di istanze gestite
Crea un modello di istanza per eseguire il deployment di un gateway NAT in region B.
gcloud compute instance-templates create hub-natgw-region-b-template \ --network hub-vpc \ --subnet hub-subnet-b --region REGION_B \ --machine-type n1-standard-2 --can-ip-forward \ --tags natgw \ --metadata startup-script='#! /bin/bash # Enable IP forwarding: echo 1 > /proc/sys/net/ipv4/ip_forward echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/20-iptables.conf # iptables configuration iptables -t nat -F sudo iptables -t nat -A POSTROUTING ! -d 192.168.0.0/16 -j MASQUERADE iptables-save # Use a web server to pass the health check for this example. # You should use a more complete test in production. apt-get update apt-get install apache2 tcpdump -y a2ensite default-ssl a2enmod ssl echo "Example web page to pass health check" | \ tee /var/www/html/index.html \ systemctl restart apache2'
Crea il gruppo di istanze in region B.
gcloud compute instance-groups managed create hub-natgw-region-b-mig \ --region REGION_B \ --size=2 \ --template=hub-natgw-region-b-template
crea il bilanciatore del carico
Esegui questi passaggi per creare un bilanciatore del carico nella regione B.
Crea il servizio di backend.
gcloud compute backend-services create hub-natgw-region-b-be \ --load-balancing-scheme=internal \ --protocol tcp \ --region REGION_B\ --health-checks=natgw-ilbnhop-health-check
Aggiungi il gruppo di istanze gestite come backend.
gcloud compute backend-services add-backend hub-natgw-region-b-be \ --instance-group=hub-natgw-region-b-mig \ --instance-group-region=REGION_B
Crea la regola di forwarding.
gcloud compute forwarding-rules create hub-natgw-region-b \ --load-balancing-scheme=internal \ --network=hub-vpc \ --subnet=hub-subnet-b \ --address=10.0.1.10 \ --ip-protocol=TCP \ --ports=all \ --allow-global-access \ --backend-service=hub-natgw-region-b-be \ --backend-service-region=REGION_B
Crea i route per l'hop successivo
Crea il bilanciatore del carico di rete passthrough interno come route dell'hop successivo con la rete predefinita
tag ilbanh-region-a
.
gcloud compute routes create spoke1-natgw-region-b \ --network=spoke1-vpc \ --destination-range=0.0.0.0/0 \ --next-hop-ilb=10.0.1.10 \ --tags=ilbanh-region-a \ --priority 900
gcloud compute routes create spoke2-natgw-region-b \ --network=spoke2-vpc \ --destination-range=0.0.0.0/0 \ --next-hop-ilb=10.0.1.10 \ --tags=ilbanh-region-a \ --priority 900
Convalida failover a livello di regione
Assicurati che le VM del gateway NAT siano in esecuzione e scrivi il codice assegnato IP esterni:
gcloud compute instances list --filter="status:RUNNING AND name~natgw"
Verifica che il bilanciatore del carico sia in stato di esecuzione e che le route siano create come previsto:
gcloud compute backend-services get-health hub-natgw-region-b-be --region REGION_B
backend: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/regions/us-west2/instanceGroups/hub-natgw-region-b-mig status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/regions/us-west2/forwardingRules/hub-natgw-region-b forwardingRuleIp: 10.0.1.10 healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/zones/us-west2-a/instances/<INSTANCE_NAME> ipAddress: 10.0.1.3 port: 80 - forwardingRule: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/regions/us-west2/forwardingRules/hub-natgw-region-b forwardingRuleIp: 10.0.1.10 healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/<PROJECT_ID>/zones/us-west2-b/instances/<INSTANCE_NAME> ipAddress: 10.0.1.2 port: 80 kind: compute#backendServiceGroupHealth
Verifica che il bilanciatore del carico di rete passthrough interno come route dell'hop successivo venga aggiunto allo spoke I VPC con la priorità prevista e che hanno come target indirizzo IP del bilanciatore del carico di rete passthrough interno:
gcloud compute routes list --filter="name~natgw"
Ora puoi convalidare il failover regionale eliminando le route con priorità elevata e annotando cosa succede. Passa alla VM
spoke1-client
ed esegui il seguente comando per inviare una richiesta curl ogni secondo. Questo comando indica l'indirizzo IP esterno in uso:while true; do echo -n `date` && echo -n ' - ' && curl ifconfig.io --connect-timeout 1; done
Solo gli indirizzi IP esterni assegnati ai gateway NAT in region A dovrebbe essere visualizzato perché è la priorità elevata percorso. Lascia in esecuzione il comando
curl
e passa a Cloud Shell per Elimina la route al bilanciatore del carico di rete passthrough interno in region A per verificare il risultato:gcloud -q compute routes delete spoke1-natgw-region-a
In region B vengono visualizzati gli indirizzi IP esterni assegnati alle VM gateway NAT, probabilmente con un tempo di riposo minimo, il che dimostra che il failover regionale è andato a buon fine.
Liberare le risorse
Rimuovi il bilanciatore del carico di rete passthrough interno come route dell'hop successivo:
gcloud -q compute routes delete spoke1-natgw-region-b gcloud -q compute routes delete spoke2-natgw-region-a gcloud -q compute routes delete spoke2-natgw-region-b
Rimuovi i backend e le risorse del bilanciatore del carico di rete passthrough interno:
gcloud -q compute forwarding-rules delete hub-natgw-region-a \ --region REGION_A gcloud -q compute backend-services delete hub-natgw-region-a-be \ --region REGION_A gcloud -q compute instance-groups managed delete hub-natgw-region-a-mig \ --region REGION_A gcloud -q compute instance-templates delete hub-natgw-region-a-template gcloud -q compute forwarding-rules delete hub-natgw-region-b \ --region REGION_B gcloud -q compute backend-services delete hub-natgw-region-b-be \ --region REGION_B gcloud -q compute instance-groups managed delete hub-natgw-region-b-mig \ --region REGION_B gcloud -q compute instance-templates delete hub-natgw-region-b-template gcloud -q compute health-checks delete natgw-ilbnhop-health-check
Elimina le VM client:
gcloud -q compute instances delete spoke1-client \ --zone=ZONE_A gcloud -q compute instances delete spoke2-client \ --zone=ZONE_A
Elimina i peering di rete VPC, le regole firewall, le subnet e le VPC:
gcloud -q compute networks peerings delete spoke2-to-hub \ --network spoke2-vpc gcloud -q compute networks peerings delete spoke1-to-hub \ --network spoke1-vpc gcloud -q compute networks peerings delete hub-to-spoke1 \ --network hub-vpc gcloud -q compute networks peerings delete hub-to-spoke2 \ --network hub-vpc gcloud -q compute firewall-rules delete spoke2-vpc-web-ping-dns gcloud -q compute firewall-rules delete spoke1-vpc-web-ping-dns gcloud -q compute firewall-rules delete hub-vpc-web-ping-dns gcloud -q compute firewall-rules delete hub-vpc-health-checks gcloud -q compute firewall-rules delete hub-vpc-allow-ssh gcloud -q compute firewall-rules delete spoke1-vpc-allow-ssh gcloud -q compute firewall-rules delete spoke2-vpc-allow-ssh gcloud -q compute networks subnets delete spoke1-subnet1 \ --region REGION_A gcloud -q compute networks subnets delete spoke2-subnet1 \ --region REGION_A gcloud -q compute networks subnets delete hub-subnet-a \ --region REGION_A gcloud -q compute networks subnets delete hub-subnet-b \ --region REGION_B gcloud -q compute networks delete spoke1-vpc gcloud -q compute networks delete spoke2-vpc gcloud -q compute networks delete hub-vpc
Passaggi successivi
- Consulta i concetti del failover per i bilanciatori del carico di rete passthrough interni per informazioni importanti sul failover.
- Per informazioni sulla configurazione del logging e del monitoraggio per il bilanciatore del carico di rete passthrough interno, consulta Logging e monitoraggio del bilanciatore del carico di rete passthrough interno.
- Consulta la sezione Bilanciatori del carico di rete passthrough interni e reti connesse per informazioni su come accedere ai bilanciatori del carico di rete passthrough interni dalle reti peer collegate alla tua rete VPC.
- Vedi Risolvere i problemi dei bilanciatori del carico di rete passthrough interni per e informazioni su come risolvere i problemi relativi al bilanciatore del carico di rete passthrough interno.