L'esempio presuppone che tu abbia più server web in esecuzione su istanze Compute Engine e bilancia le nuove connessioni TCP tra di essi. Questo esempio utilizza un controllo di integrità HTTP legacy in modo che le nuove connessioni vengano inviate solo alle VM di backend integre.
Prima di iniziare, leggi la panoramica del bilanciatore del carico di rete passthrough esterno regionale per informazioni concettuali sui bilanciatori del carico di rete passthrough esterni regionali.
Prima di iniziare
Installa Google Cloud CLI. Per una panoramica completa dello strumento,
consulta la Guida allo strumento gcloud. Puoi trovare i comandi relativi al
bilanciamento del carico nel gcloud compute
gruppo di comandi.
Puoi anche ottenere informazioni dettagliate su qualsiasi comando gcloud utilizzando il flag --help:
gcloud compute http-health-checks create --help
Se non hai mai eseguito Google Cloud CLI, esegui prima
gcloud init per l'autenticazione.
Inoltre, devi creare un indirizzo IP esterno statico per il bilanciatore del carico. Se utilizzi un'immagine fornita da Compute Engine, le istanze di macchine virtuali (VM) vengono configurate automaticamente per gestire questo indirizzo IP. Se utilizzi un'altra immagine, dovrai configurare questo indirizzo come alias su eth0 o come loopback su ogni istanza.
Questa guida presuppone che tu abbia familiarità con bash.
Configurazione delle istanze VM di Compute Engine
Per questo scenario di bilanciamento del carico, creerai tre istanze VM di Compute Engine e installerai Apache su ciascuna. Aggiungerai una regola firewall che consenta al traffico HTTP di raggiungere le istanze.
Le istanze che partecipano come VM di backend per i bilanciatori del carico di rete passthrough esterni regionali devono eseguire l'ambiente guest Linux, l'ambiente guest Windows, o altri processi appropriati che forniscono funzionalità equivalenti.
Configurazione delle istanze di backend
Console
Nella console Google Cloud , vai alla pagina Istanze VM.
Fai clic su Crea istanza.
Imposta Nome su
www1.Imposta la regione su us-central1.
Imposta la zona su us-central1-b.
In Disco di avvio, l'immagine del sistema operativo predefinita di Debian GNU/Linux 12 (bookworm) è già selezionata.
Fai clic su Opzioni avanzate.
Fai clic su Networking e configura il seguente campo:
- In Tag di rete, inserisci
network-lb-tag.
- In Tag di rete, inserisci
Fai clic su Gestione. Inserisci il seguente script nel campo Script di avvio.
#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html
- Fai clic su Crea.
Crea un'istanza denominata
www2con le stesse impostazioni, ad eccezione di quanto segue script inserito nel campo Automazione, Script di avvio.#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html
Crea un'istanza denominata
www3con le stesse impostazioni, ad eccezione dello script seguente inserito nel campo Automazione, Script di avvio.#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html
gcloud
I comandi riportati di seguito vengono eseguiti sul sistema locale e presuppongono un prompt dei comandi bash.
Per visualizzare i nomi, gli attributi e lo stato delle immagini del sistema operativo, utilizza il comando gcloud compute images list.
Crea tre nuove macchine virtuali in una determinata zona e assegna lo stesso tag a tutte e tre. Questo esempio imposta la zona su us-central1-b. L'impostazione del campo
tagsconsente di fare riferimento a tutte queste istanze contemporaneamente, come accadrebbe con una regola firewall. Questi comandi installano anche Apache su ogni istanza e assegnano a ciascuna una home page univoca.gcloud compute instances create www1 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"gcloud compute instances create www2 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www2</h1></body></html>' | tee /var/www/html/index.html"gcloud compute instances create www3 \ --image-family debian-12 \ --image-project debian-cloud \ --zone us-central1-b \ --tags network-lb-tag \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo service apache2 restart echo '<!doctype html><html><body><h1>www3</h1></body></html>' | tee /var/www/html/index.html"
api
Crea l'istanza www1 nella zona us-central1-b con il
instances.insert
metodo
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances
{
"canIpForward": false,
"deletionProtection": false,
"disks": [
{
"type": "PERSISTENT",
"boot": true,
"mode": "READ_WRITE",
"autoDelete": true,
"deviceName": "www1",
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/debian-12-buster-v20220719",
"diskType": "projects/[PROJECT_ID]/zones/us-central1-b/diskTypes/pd-standard",
"diskSizeGb": "10"
}
}
],
"machineType": "projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2",
"metadata": {
"items": [
{
"key": "startup-script",
"value": "sudo apt-get update\nsudo apt-get install apache2 -y\nsudo a2ensite default-ssl\nsudo a2enmod ssl\nsudo service apache2 restart\necho '<!doctype html><html><body><h1>www1</h1></body></html>' | tee /var/www/html/index.html"
}
]
},
"name": "www1",
"networkInterfaces": [
{
"network": "projects/[PROJECT_ID]/global/networks/default",
"subnetwork": "projects/[PROJECT_ID]/regions/us-central1/subnetworks/default"
}
],
"tags": {
"items": [
"network-lb-tag"
]
}
}
Crea istanze denominate www2 e www3 con le stesse impostazioni, ad eccezione di www1 nei campi deviceName, value e name.
Creazione di una regola firewall per consentire il traffico esterno a queste istanze VM
Console
Nella console Google Cloud , vai alla pagina Policy del firewall.
Fai clic su Crea regola firewall.
Inserisci un Nome di
www-firewall-network-lb.Seleziona la rete per la quale è valida la regola firewall (Predefinita).
In Destinazioni, seleziona Tag di destinazione specificati.
Nel campo Tag di destinazione, inserisci
network-lb-tag.Imposta Filtro di origine su Intervalli IPv4.
Imposta gli intervalli IPv4 di origine su
0.0.0.0/0, che consente il traffico da qualsiasi origine.In Protocolli e porte specificati, seleziona la casella di controllo TCP e inserisci
80.Fai clic su Crea. La visualizzazione della nuova regola firewall nella console potrebbe richiedere qualche istante oppure potrebbe essere necessario fare clic su Aggiorna per visualizzare la regola.
gcloud
gcloud compute firewall-rules create www-firewall-network-lb \
--target-tags network-lb-tag --allow tcp:80
api
Crea una regola firewall che consenta tutto il traffico all'interno della subnet con il
firewalls.insert
** metodo**
POST https://compute.googleapis.com/compute/projects/[PROJECT_ID]/global/firewalls
{
"name": "www-firewall-network-lb",
"direction": "INGRESS",
"priority": 1000,
"targetTags": [
"network-lb-tag"
],
"allowed": [
{
"IPProtocol": "tcp",
"ports": [
"80"
]
}
],
"sourceRanges": [
"0.0.0.0/0"
]
}
Ottenere gli indirizzi IP esterni delle istanze e verificare che siano in esecuzione
Console
Nella console Google Cloud , vai alla pagina Istanze VM.
Visualizza gli indirizzi delle istanze nella colonna IP esterno.
Verifica che le istanze siano in esecuzione cercando un segno di spunta verde a sinistra del nome dell'istanza. Se non vedi un segno di spunta verde, consulta la pagina Risoluzione dei problemi generali per le istanze.
gcloud
Elenca le istanze per ottenere i relativi indirizzi IP dalla colonna
EXTERNAL_IP.gcloud compute instances list
Verifica che ogni istanza sia in esecuzione.
Nella riga di comando, esegui
curlutilizzando l'indirizzo IP esterno di ogni istanza per verificare che tutte le istanze rispondano.curl http://[IP_ADDRESS]
api
Ottieni informazioni sull'istanza www1 con il
instances.get
metodo
Assicurati che il campo status indichi RUNNING e cerca l'indirizzo IP esterno nel campo natIP.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1
{
"kind": "compute#instance",
"id": "6734015273571474749",
"creationTimestamp": "2018-11-09T11:45:23.487-08:00",
"name": "www1",
"description": "",
"tags": {
"items": [
"network-lb-tag"
],
"fingerprint": "9GVlO4gPawg="
},
"machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/machineTypes/e2-standard-2",
"status": "RUNNING",
"zone": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b",
"canIpForward": false,
"networkInterfaces": [
{
"kind": "compute#networkInterface",
"network": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/subnetworks/default",
"networkIP": "10.128.0.2",
"name": "nic0",
"accessConfigs": [
{
"kind": "compute#accessConfig",
"type": "ONE_TO_ONE_NAT",
"name": "External NAT",
"natIP": "35.192.37.233",
"networkTier": "PREMIUM"
}
],
"fingerprint": "lxD5f5ua_sw="
}
],
"disks": [
{
"kind": "compute#attachedDisk",
"type": "PERSISTENT",
"mode": "READ_WRITE",
"source": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/disks/www1",
"deviceName": "www1",
"index": 0,
"boot": true,
"autoDelete": true,
"licenses": [
"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-buster"
],
"interface": "SCSI",
"guestOsFeatures": [
{
"type": "VIRTIO_SCSI_MULTIQUEUE"
}
]
}
],
"metadata": {
"kind": "compute#metadata",
"fingerprint": "IyHRmHoJx6E=",
"items": [
{
"key": "startup-script",
"value": "#! /bin/bash\n sudo apt-get update\n sudo apt-get install apache2 -y\n sudo service apache2 restart\n echo '\u003c!doctype html\u003e\u003chtml\u003e\u003cbody\u003e\u003ch1\u003ewww1\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e' | tee /var/www/html/index.html"
}
]
},
"serviceAccounts": [
{
"email": "674259759219-compute@developer.gserviceaccount.com",
"scopes": [
"https://www.googleapis.com/auth/devstorage.read_only",
"https://www.googleapis.com/auth/logging.write",
"https://www.googleapis.com/auth/monitoring.write",
"https://www.googleapis.com/auth/servicecontrol",
"https://www.googleapis.com/auth/service.management.readonly",
"https://www.googleapis.com/auth/trace.append"
]
}
],
"selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/www1",
"scheduling": {
"onHostMaintenance": "MIGRATE",
"automaticRestart": true,
"preemptible": false
},
"cpuPlatform": "Intel Haswell",
"labelFingerprint": "42WmSpB8rSM=",
"startRestricted": false,
"deletionProtection": false
}
Ripeti questa chiamata API per www2 e www3.
Configurazione del servizio di bilanciamento del carico
Ora configura il servizio di bilanciamento del carico.
Una volta configurato il servizio di bilanciamento del carico, le istanze di macchine virtuali riceveranno i pacchetti destinati all'indirizzo IP esterno statico configurato. Se utilizzi un'immagine fornita da Compute Engine, le istanze vengono configurate automaticamente per gestire questo indirizzo IP. Se utilizzi un'altra immagine, dovrai configurare questo indirizzo come alias su eth0 o come loopback su ogni istanza.
Console
Non puoi utilizzare la Google Cloud console per creare bilanciatori del carico di rete passthrough esterni regionali basati su pool di destinazione. Utilizza invece gcloud o l'API REST.
gcloud
Crea un indirizzo IP esterno statico per il bilanciatore del carico
gcloud compute addresses create network-lb-ip-1 \ --region us-central1Aggiungi una risorsa di controllo di integrità HTTP legacy
Questo esempio utilizza le impostazioni predefinite per il meccanismo di controllo di integrità, ma puoi anche personalizzare il controllo di integrità autonomamente.
gcloud compute http-health-checks create basic-check
Aggiungi un pool di destinazione
Aggiungi un pool di destinazione nella stessa regione delle istanze di macchine virtuali. Utilizza il controllo di integrità creato nel passaggio precedente per questo pool di destinazione.
gcloud compute target-pools create www-pool \ --region us-central1 --http-health-check basic-checkAggiungi le istanze al pool di destinazione
gcloud compute target-pools add-instances www-pool \ --instances www1,www2,www3 \ --instances-zone us-central1-bLe istanze all'interno di un pool di destinazione devono appartenere alla stessa regione, ma possono essere distribuite in zone diverse della stessa regione. Ad esempio, puoi avere istanze nella zona
us-central1-fe istanze nella zonaus-central1-bin un unico pool di destinazione perché si trovano nella stessa regione,us-central1.Aggiungi una regola di forwarding
Aggiungi una regola di forwarding che gestisce un indirizzo IP esterno e un intervallo di porte che rimanda al pool di destinazione. Per il campo
--address, utilizza l'indirizzo IP numerico o il nome completo.gcloud compute forwarding-rules create www-rule \ --region us-central1 \ --ports 80 \ --address network-lb-ip-1 \ --target-pool www-pool
api
Crea un indirizzo IP esterno statico per il bilanciatore del carico
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID/regions/us-central1/addresses { "name": "network-lb-ip-1" }Aggiungi un controllo di integrità HTTP legacy
Questo esempio utilizza le impostazioni predefinite per il meccanismo di controllo di integrità, ma puoi anche personalizzarlo autonomamente.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks { "name": "basic-check" }Aggiungi un pool di destinazione
Aggiungi un pool di destinazione nella stessa regione delle istanze di macchine virtuali. Utilizza il controllo di integrità creato nel passaggio precedente per questo pool di destinazione.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools { "name": "www-pool", "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks/basic-check" ] }Aggiungi le istanze al pool di destinazione
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-pool/addInstance { "instances": [ { "instance": "projects/[PROJECT_ID]/zones/us-central1-b/instances/www1" } ] }Ripeti questa chiamata API per le istanze
www2ewww3.Le istanze all'interno di un pool di destinazione devono appartenere alla stessa regione, ma possono essere distribuite in zone diverse della stessa regione. Ad esempio, puoi avere istanze nella zona
us-central1-fe istanze nella zonaus-central1-bin un unico pool di destinazione perché si trovano nella stessa regione,us-central1.Aggiungi una regola di forwarding
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules { "name": "www-rule", "portRange": "80", "loadBalancingScheme": "EXTERNAL", "target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb" }
Invio di traffico alle istanze
Una volta configurato il servizio di bilanciamento del carico, puoi iniziare a inviare traffico alla regola di forwarding e osservare la distribuzione del traffico su diverse istanze.
Ricerca dell'indirizzo IP esterno della regola di forwarding
Console
- Vai alla scheda Regole di forwarding nella pagina di bilanciamento del carico Avanzate
nella Google Cloud console.
Vai alla scheda Regole di forwarding - Individua
www-rule, la regola di forwarding utilizzata dal bilanciatore del carico. - Nella colonna Indirizzo IP per
www-rule, prendi nota dell'indirizzo IP esterno elencato.
gcloud
Inserisci il seguente comando per visualizzare l'indirizzo IP esterno della regola di forwarding www-rule utilizzata dal bilanciatore del carico.
gcloud compute forwarding-rules describe www-rule --region us-central1
api
Visualizza l'indirizzo IP esterno della regola di forwarding www-rule con il
forwardingRules.get
metodo
Nell'output, cerca il campo IPAddress.
GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule
{
"kind": "compute#forwardingRule",
"id": "5133886346582800002",
"creationTimestamp": "2018-11-09T14:21:33.574-08:00",
"name": "www-rule",
"description": "",
"region": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1",
"IPAddress": "35.232.228.9",
"IPProtocol": "TCP",
"portRange": "80-80",
"target": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/targetPools/www-network-lb",
"selfLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-central1/forwardingRules/www-rule",
"loadBalancingScheme": "EXTERNAL",
"networkTier": "PREMIUM"
}ICMP non supportato per le istanze di backend
I bilanciatori del carico di rete passthrough esterni regionali non inviano pacchetti ICMP alle istanze di backend. Se invii un pacchetto ICMP, ad esempio con ping o traceroute, la risposta non proviene dalle istanze di backend del bilanciatore del carico.
Google Cloud L'infrastruttura potrebbe inviare una risposta ICMP, anche se hai regole firewall che vietano il traffico ICMP sulle istanze di backend del bilanciatore del carico. Questo comportamento non può essere modificato.
Utilizzo del comando curl per accedere all'indirizzo IP esterno
La risposta del comando curl si alterna in modo casuale tra le tre istanze.
Se la risposta iniziale non va a buon fine, potrebbe essere necessario attendere circa 30 secondi affinché la configurazione venga caricata completamente e le istanze vengano contrassegnate come integre prima di riprovare:
$ while true; do curl -m1 IP_ADDRESS; done
Passaggi successivi
- Per scoprire come funzionano i bilanciatori del carico di rete passthrough esterni regionali con i pool di destinazione, consulta la panoramica del bilanciatore del carico di rete passthrough esterno regionale basato su pool di destinazione.
- Per scoprire come funzionano i bilanciatori del carico di rete passthrough esterni regionali con i servizi di backend regionali anziché con i pool di destinazione, consulta:
- Panoramica del bilanciatore del carico di rete passthrough esterno regionale con servizi di backend
- Configura un bilanciatore del carico di rete passthrough esterno regionale con un servizio di backend
- Esegui la migrazione di un bilanciatore del carico di rete passthrough esterno regionale da un pool di destinazione a un servizio di backend
- Per configurare la protezione DDoS di rete avanzata per un bilanciatore del carico di rete passthrough esterno regionale utilizzando Cloud Armor, consulta Configura la protezione DDoS di rete avanzata.
- Per scoprire di più sui problemi e sulle soluzioni alternative quando utilizzi un bilanciatore del carico di rete passthrough esterno regionale per il traffico UDP, consulta Utilizza UDP con i bilanciatori del carico di rete passthrough esterni regionali.
- Per eliminare le risorse in modo da non ricevere addebiti, consulta Eseguire la pulizia di una configurazione di bilanciamento del carico.