Configura un bilanciatore del carico di rete passthrough esterno per più protocolli IP

Questa guida fornisce istruzioni per creare bilanciatori del carico di rete passthrough esterni basati su servizi di backend che bilanciano il carico del traffico TCP, UDP, ESP, GRE, ICMP e ICMPv6. Puoi usare questa configurazione per bilanciare il carico del traffico che utilizza protocolli IP diversi da TCP o UDP. I bilanciatori del carico di rete passthrough esterni basati su pool di destinazione non supportano questa funzionalità.

Per configurare un bilanciatore del carico di rete passthrough esterno per protocolli IP diversi da TCP o UDP, devi creare una regola di forwarding con protocollo impostato su L3_DEFAULT. Questa regola di forwarding punta a un servizio di backend con protocollo impostato su UNSPECIFIED.

In questo esempio, utilizziamo due bilanciatori del carico di rete passthrough esterni per distribuire il traffico tra VM di backend in due gruppi di istanze gestite a livello di zona nella regione us-central1. Entrambi i bilanciatori del carico ricevono traffico allo stesso indirizzo IP esterno.

Un bilanciatore del carico ha una regola di forwarding con protocollo TCP e porta 80, mentre l'altro ha una regola di forwarding con protocollo L3_DEFAULT. Il traffico TCP in arrivo all'indirizzo IP sulla porta 80 è gestito dalla regola di forwarding TCP. Tutto il resto del traffico che non corrisponde alla regola di forwarding specifica per TCP viene gestito dalla regola di forwarding L3_DEFAULT.

Bilanciatore del carico di rete passthrough esterno con gruppi di istanze gestite a livello di zona
Bilanciatore del carico di rete passthrough esterno con gruppi di istanze gestite a livello di zona

Questo scenario distribuisce il traffico tra istanze in stato integro. A supporto di ciò, crei controlli di integrità TCP per garantire che il traffico venga inviato solo alle istanze in stato integro.

Il bilanciatore del carico di rete passthrough esterno è un bilanciatore del carico a livello di regione. Tutti i componenti del bilanciatore del carico devono trovarsi nella stessa regione.

Prima di iniziare

Installa Google Cloud CLI. Per una panoramica completa dello strumento, consulta la panoramica dell'interfaccia a riga di comando gcloud. I comandi relativi al bilanciamento del carico sono disponibili nel riferimento API e gcloud.

Se non hai già eseguito gcloud CLI, esegui prima il comando gcloud init per l'autenticazione.

Questa guida presuppone che tu conosca il bash.

Configura la rete e le subnet

L'esempio in questa pagina utilizza una rete VPC in modalità personalizzata denominata lb-network. Puoi utilizzare una rete VPC in modalità automatica se vuoi gestire solo il traffico IPv4. Tuttavia, il traffico IPv6 richiede una subnet in modalità personalizzata.

Il traffico IPv6 richiede anche una subnet dual-stack (stack-type impostata su IPv4_IPv6). Quando crei una subnet a doppio stack su una rete VPC in modalità personalizzata, scegli un tipo di accesso IPv6 per la subnet. Per questo esempio, impostiamo il parametro ipv6-access-type della subnet su EXTERNAL. Ciò significa che alle nuove VM in questa subnet possono essere assegnati sia indirizzi IPv4 esterni sia indirizzi IPv6 esterni.

I backend e i componenti del bilanciatore del carico utilizzati per questo esempio si trovano in questa regione e subnet:

  • Regione: us-central1
  • Subnet: lb-subnet, con intervallo di indirizzi IPv4 principale 10.1.2.0/24. Anche se scegli l'intervallo di indirizzi IPv4 configurato nella subnet, l'intervallo di indirizzi IPv6 viene assegnato automaticamente. Google fornisce un blocco CIDR IPv6 di dimensione fissa (/64).

Per creare la rete e la subnet di esempio, segui questi passaggi.

Console

Per supportare il traffico IPv4 e IPv6, segui questi passaggi:

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

    Vai a Reti VPC

  2. Fai clic su Crea rete VPC.

  3. Inserisci un Nome pari a lb-network.

  4. Nella sezione Subnet:

    • Imposta Modalità di creazione subnet su Personalizzata.
    • Nella sezione Nuova subnet, configura i seguenti campi e fai clic su Fine:
      • Nome: lb-subnet
      • Regione: us-central1
      • Tipo di stack IP: IPv4 e IPv6 (stack doppio)
      • Intervallo IPv4: 10.1.2.0/24
        Sebbene sia possibile configurare un intervallo di indirizzi IPv4 per la subnet, non puoi scegliere l'intervallo di indirizzi IPv6 per la subnet. Google fornisce un blocco CIDR IPv6 di dimensione fissa (/64).
      • Tipo di accesso IPv6: esterno
  5. Fai clic su Crea.

Per supportare solo il traffico IPv4, segui la procedura riportata di seguito:

  1. Nella console Google Cloud, vai alla pagina Reti VPC.

    Vai a Reti VPC

  2. Fai clic su Crea rete VPC.

  3. Inserisci un Nome pari a lb-network.

  4. Nella sezione Subnet:

    • Imposta Modalità di creazione subnet su Personalizzata.
    • Nella sezione Nuova subnet, configura i seguenti campi e fai clic su Fine:
      • Nome: lb-subnet
      • Regione: us-central1
      • Tipo di stack IP: IPv4 (stack singolo)
      • Intervallo IPv4: 10.1.2.0/24
  5. Fai clic su Crea.

gcloud

  1. Crea la rete VPC in modalità personalizzata:

    gcloud compute networks create lb-network \
        --subnet-mode=custom
    
  2. All'interno della rete lb-network, crea una subnet per i backend nella regione us-central1.

    Per il traffico IPv4 e IPv6, utilizza il comando seguente per creare una subnet a doppio stack:

    gcloud compute networks subnets create lb-subnet \
      --stack-type=IPV4_IPv6 \
      --ipv6-access-type=EXTERNAL \
      --network=lb-network \
      --range=10.1.2.0/24 \
      --region=us-central1
    

    Per solo il traffico IPv4, utilizza il comando seguente:

    gcloud compute networks subnets create lb-subnet \
      --network=lb-network \
      --range=10.1.2.0/24 \
      --region=us-central1
    

Crea i gruppi di istanze gestite a livello di zona

Per questo scenario di bilanciamento del carico, devi creare due gruppi di istanze gestite a livello di zona di Compute Engine e installare un server web Apache su ogni istanza.

Per gestire il traffico sia IPv4 sia IPv6, configura le VM di backend in modo che siano a doppio stack. Imposta il valore stack-type della VM su IPv4_IPv6. Le VM ereditano anche l'impostazione ipv6-access-type (in questo esempio, EXTERNAL) dalla subnet. Per ulteriori dettagli sui requisiti IPv6, consulta Panoramica del bilanciatore del carico di rete passthrough esterno: regole di forwarding.

Per utilizzare le VM esistenti come backend, aggiorna le VM in modo che siano a doppio stack utilizzando il comando gcloud compute instances network-interfaces update.

Le istanze che partecipano come VM di backend per bilanciatori del carico di rete passthrough esterni devono eseguire l'ambiente guest Linux appropriato, l'ambiente guest Windows o altri processi che forniscono funzionalità equivalenti.

Crea il gruppo di istanze per il traffico TCP sulla porta 80

Console

  1. Creare un modello di istanza. Nella console Google Cloud, vai alla pagina Modelli di istanza.

    Vai a Modelli di istanza

    1. Fai clic su Crea modello istanza.
    2. In Nome, inserisci ig-us-template-tcp-80.
    3. Assicurati che il disco di avvio sia impostato su un'immagine Debian, ad esempio Debian GNU/Linux 10 (buster). Queste istruzioni utilizzano comandi disponibili solo su Debian, come apt-get.
    4. Espandi la sezione Opzioni avanzate.
    5. Espandi la sezione Gestione, quindi copia lo script seguente nel campo Script di avvio.

      #! /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
      
    6. Espandi la sezione Networking, quindi specifica quanto segue:

      1. In Tag di rete, aggiungi network-lb-tcp-80.
      2. In Interfacce di rete, fai clic sull'interfaccia predefinita e configura i seguenti campi:
        1. Rete: lb-network
        2. Subnet: lb-subnet
    7. Fai clic su Crea.

  2. Creare un gruppo di istanze gestite. Vai alla pagina Gruppi di istanze nella console Google Cloud.

    Vai a Gruppi di istanze

    1. Fai clic su Crea gruppo di istanze.
    2. Seleziona Nuovo gruppo di istanze gestite (stateless). Per ulteriori informazioni, consulta la pagina relativa a MIG stateless o stateful.
    3. In Nome, inserisci ig-us-tcp-80.
    4. In Località, seleziona Zona singola.
    5. In corrispondenza di Regione, seleziona us-central1.
    6. Per la Zona, seleziona us-central1-a.
    7. In Modello di istanza, seleziona ig-us-template-tcp-80.
    8. Specifica il numero di istanze che vuoi creare nel gruppo.

      Per questo esempio, specifica le seguenti opzioni in Scalabilità automatica:

      • In Modalità di scalabilità automatica, seleziona Off:do not autoscale.
      • In Numero massimo di istanze, inserisci 2.
    9. Fai clic su Crea.

gcloud

Le istruzioni gcloud in questa guida presuppongono che tu stia utilizzando Cloud Shell o un altro ambiente in cui è installato bash.

  1. Crea un modello di istanza VM con server HTTP utilizzando il comando gcloud compute instance-templates create.

    Per gestire sia il traffico IPv4 sia quello IPv6, utilizza il comando seguente.

    gcloud compute instance-templates create ig-us-template-tcp-80 \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --ipv6-network-tier=PREMIUM \
    --stack-type=IPv4_IPv6 \
    --tags=network-lb-tcp-80 \
    --image-family=debian-10 \
    --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'
    

    In alternativa, se vuoi gestire il traffico solo di traffico IPv4, utilizza il seguente comando.

    gcloud compute instance-templates create ig-us-template-tcp-80 \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --tags=network-lb-tcp-80 \
    --image-family=debian-10 \
    --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'
    
  2. Crea un gruppo di istanze gestite nella zona con il comando gcloud compute instance-groups managed create.

    gcloud compute instance-groups managed create ig-us-tcp-80 \
        --zone us-central1-a \
        --size 2 \
        --template ig-us-template-tcp-80
    

Crea il gruppo di istanze per TCP sulla porta 8080, UDP, ESP e sul traffico ICMP

Console

  1. Creare un modello di istanza. Nella console Google Cloud, vai alla pagina Modelli di istanza.

    Vai a Modelli di istanza

    1. Fai clic su Crea modello istanza.
    2. In Nome, inserisci ig-us-template-l3-default.
    3. Assicurati che il disco di avvio sia impostato su un'immagine Debian, ad esempio Debian GNU/Linux 10 (buster). Queste istruzioni utilizzano comandi disponibili solo su Debian, come apt-get.
    4. Espandi la sezione Opzioni avanzate.
    5. Espandi la sezione Gestione, quindi copia lo script seguente nel campo Script di avvio. Lo script di avvio configura anche il server Apache per l'ascolto sulla porta 8080 anziché sulla porta 80.

      #! /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
      
    6. Espandi la sezione Networking, quindi specifica quanto segue:

      1. In Tag di rete, aggiungi network-lb-l3-default.
      2. In Interfacce di rete, fai clic sull'interfaccia predefinita e configura i seguenti campi:
        1. Rete: lb-network
        2. Subnet: lb-subnet
    7. Fai clic su Crea.

  2. Creare un gruppo di istanze gestite. Vai alla pagina Gruppi di istanze nella console Google Cloud.

    Vai a Gruppi di istanze

    1. Fai clic su Crea gruppo di istanze.
    2. Scegli Nuovo gruppo di istanze gestite (stateless). Per ulteriori informazioni, consulta la pagina relativa a MIG stateless o stateful.
    3. In Nome, inserisci ig-us-l3-default.
    4. In Località, seleziona Zona singola.
    5. In corrispondenza di Regione, seleziona us-central1.
    6. Per la Zona, seleziona us-central1-c.
    7. In Modello di istanza, seleziona ig-us-template-l3-default.
    8. Specifica il numero di istanze che vuoi creare nel gruppo.

      Per questo esempio, specifica le seguenti opzioni in Scalabilità automatica:

      • In Modalità di scalabilità automatica, seleziona Off:do not autoscale.
      • In Numero massimo di istanze, inserisci 2.
    9. Fai clic su Crea.

gcloud

Le istruzioni gcloud in questa guida presuppongono che tu stia utilizzando Cloud Shell o un altro ambiente in cui è installato bash.

  1. Crea un modello di istanza VM con server HTTP utilizzando il comando gcloud compute instance-templates create.

    Lo script di avvio configura inoltre il server Apache per l'ascolto sulla porta 8080 anziché sulla porta 80.

    Per gestire sia il traffico IPv4 sia quello IPv6, utilizza il comando seguente.

    gcloud compute instance-templates create ig-us-template-l3-default \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --ipv6-network-tier=PREMIUM \
    --stack-type=IPv4_IPv6 \
    --tags=network-lb-l3-default \
    --image-family=debian-10 \
    --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'
    

    In alternativa, se vuoi gestire solo il traffico IPv4, utilizza il comando seguente.

    gcloud compute instance-templates create ig-us-template-l3-default \
    --region=us-central1 \
    --network=lb-network \
    --subnet=lb-subnet \
    --tags=network-lb-l3-default \
    --image-family=debian-10 \
    --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'
    
  2. Crea un gruppo di istanze gestite nella zona con il comando gcloud compute instance-groups managed create.

    gcloud compute instance-groups managed create ig-us-l3-default \
        --zone us-central1-c \
        --size 2 \
        --template ig-us-template-l3-default
    

Configura le regole firewall

Crea le seguenti regole firewall:

  • Regole firewall che consentono al traffico TCP esterno di raggiungere le istanze di backend nel gruppo di istanze ig-us-tcp-80 sulla porta 80 (utilizzando il tag di destinazione network-lb-tcp-80). Crea regole firewall separate per consentire il traffico IPv4 e IPv6.
  • Regole firewall che consentono a altro traffico esterno (TCP sulla porta 8080, UDP, ESP e ICMP) di raggiungere le istanze di backend nel gruppo di istanze ig-us-l3-default (utilizzando il tag di destinazione network-lb-l3-default). Crea regole firewall separate per consentire il traffico IPv4 e IPv6.

Questo esempio crea regole firewall che consentono al traffico da tutti gli intervalli di origine di raggiungere le istanze di backend sulle porte configurate. Se vuoi creare regole firewall separate specificamente per i probe di controllo di integrità, utilizza gli intervalli di indirizzi IP di origine indicati nella sezione Panoramica dei controlli di integrità: Probe intervalli IP e regole firewall.

Console

  1. Nella console Google Cloud, vai alla pagina Criteri firewall.
    Vai a Criteri firewall
  2. Per consentire al traffico TCP IPv4 di raggiungere i backend nel gruppo di istanze ig-us-tcp-80, crea la seguente regola firewall.
    1. Fai clic su Crea regola firewall.
    2. Inserisci un Nome pari a allow-network-lb-tcp-80-ipv4.
    3. Seleziona la Rete a cui si applica la regola firewall (Predefinito).
    4. In Destinazioni, seleziona Tag di destinazione specificati.
    5. Nel campo Tag di destinazione, inserisci network-lb-tcp-80.
    6. Imposta Filtro di origine su Intervalli IPv4.
    7. Imposta Intervalli IPv4 di origine su 0.0.0.0/0, che consente il traffico da qualsiasi origine. In questo modo, sia il traffico esterno sia i probe di controllo di integrità possono raggiungere le istanze di backend.
    8. In Protocolli e porte, seleziona Protocolli e porte specificati. A questo punto, seleziona la casella di controllo TCP e inserisci 80.
    9. Fai clic su Crea. Potrebbe essere necessario attendere un momento prima che nella console venga visualizzata la nuova regola firewall oppure potrebbe essere necessario fare clic su Aggiorna per visualizzare la regola.
  3. Per consentire al traffico IPv4 UDP, ESP e ICMP di raggiungere i backend nel gruppo di istanze ig-us-l3-default, crea la seguente regola firewall.
    1. Fai clic su Crea regola firewall.
    2. Inserisci un Nome pari a allow-network-lb-l3-default-ipv4.
    3. Seleziona la Rete a cui si applica la regola firewall (Predefinito).
    4. In Destinazioni, seleziona Tag di destinazione specificati.
    5. Nel campo Tag di destinazione, inserisci network-lb-l3-default.
    6. Imposta Filtro di origine su Intervalli IPv4.
    7. Imposta Intervalli IPv4 di origine su 0.0.0.0/0, che consente il traffico da qualsiasi origine. In questo modo, sia il traffico esterno sia i probe di controllo di integrità possono raggiungere le istanze di backend.
    8. In Protocolli e porte, seleziona Protocolli e porte specificati.
      1. Seleziona la casella di controllo TCP e inserisci 8080.
      2. Seleziona la casella di controllo UDP.
      3. Seleziona la casella di controllo Altro e inserisci esp, icmp.
    9. Fai clic su Crea. Potrebbe essere necessario attendere un momento prima che nella console venga visualizzata la nuova regola firewall oppure potrebbe essere necessario fare clic su Aggiorna per visualizzare la regola.
  4. Per consentire al traffico TCP IPv6 di raggiungere i backend nel gruppo di istanze ig-us-tcp-80, crea la seguente regola firewall.
    1. Fai clic su Crea regola firewall.
    2. Inserisci un Nome pari a allow-network-lb-tcp-80-ipv6.
    3. Seleziona la Rete a cui si applica la regola firewall (Predefinito).
    4. In Destinazioni, seleziona Tag di destinazione specificati.
    5. Nel campo Tag di destinazione, inserisci network-lb-tcp-80.
    6. Imposta Filtro di origine su Intervalli IPv6.
    7. Imposta gli Intervalli IPv6 di origine su ::/0, in modo da consentire il traffico da qualsiasi origine. In questo modo, sia il traffico esterno sia i probe di controllo di integrità possono raggiungere le istanze di backend.
    8. In Protocolli e porte, seleziona Protocolli e porte specificati. Fai clic sulla casella di controllo accanto a TCP e inserisci 80.
    9. Fai clic su Crea. Potrebbe essere necessario attendere un momento prima che nella console venga visualizzata la nuova regola firewall oppure potrebbe essere necessario fare clic su Aggiorna per visualizzare la regola.
  5. Per consentire al traffico IPv6 UDP, ESP e ICMPv6 di raggiungere i backend nel gruppo di istanze ig-us-l3-default, crea la seguente regola firewall. Questa regola firewall consente inoltre ai probe del controllo di integrità TCP di raggiungere le istanze sulla porta 8080.
    1. Fai clic su Crea regola firewall.
    2. Inserisci un Nome pari a allow-network-lb-l3-default-ipv6.
    3. Seleziona la Rete a cui si applica la regola firewall (Predefinito).
    4. In Destinazioni, seleziona Tag di destinazione specificati.
    5. Nel campo Tag di destinazione, inserisci network-lb-l3-default.
    6. Imposta Filtro di origine su Intervalli IPv6.
    7. Imposta gli Intervalli IPv6 di origine su ::/0, in modo da consentire il traffico da qualsiasi origine. In questo modo, sia il traffico esterno sia i probe di controllo di integrità possono raggiungere le istanze di backend.
    8. In Protocolli e porte, seleziona Protocolli e porte specificati.
      1. Fai clic sulla casella di controllo accanto a TCP e inserisci 8080.
      2. Fai clic sulla casella di controllo accanto a UDP.
      3. Fai clic sulla casella di controllo accanto ad Altro e inserisci esp, 58.
    9. Fai clic su Crea. Potrebbe essere necessario attendere un momento prima che nella console venga visualizzata la nuova regola firewall oppure potrebbe essere necessario fare clic su Aggiorna per visualizzare la regola.

gcloud

  1. Per consentire al traffico TCP IPv4 di raggiungere i backend nel gruppo di istanze ig-us-tcp-80, crea la seguente regola firewall.

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv4 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=0.0.0.0/0
    
  2. Per consentire al traffico IPv4 UDP, ESP e ICMP di raggiungere i backend nel gruppo di istanze ig-us-l3-default, crea la seguente regola firewall. Questa regola firewall consente inoltre ai probe del controllo di integrità TCP di raggiungere le istanze sulla porta 8080.

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv4 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,icmp \
        --source-ranges=0.0.0.0/0
    
  3. Per consentire al traffico TCP IPv6 di raggiungere i backend nel gruppo di istanze ig-us-tcp-80, crea la seguente regola firewall.

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv6 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=::/0
    
  4. Per consentire al traffico IPv6 UDP, ESP e ICMPv6 di raggiungere i backend nel gruppo di istanze ig-us-l3-default, crea la seguente regola firewall. Questa regola firewall consente inoltre ai probe del controllo di integrità TCP di raggiungere le istanze sulla porta 8080.

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv6 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,58 \
        --source-ranges=::/0
    

configura i bilanciatori del carico

Quindi, configura i bilanciatori del carico. Configurare un bilanciatore del carico per gestire il traffico TCP sulla porta 80 e un altro bilanciatore del carico per gestire il traffico TCP sulla porta 8080, UDP, ESP e ICMP. Entrambi i bilanciatori del carico utilizzeranno lo stesso indirizzo IP esterno con le regole di forwarding.

Quando configuri un bilanciatore del carico, le tue istanze VM di backend riceveranno i pacchetti destinati all'indirizzo IP esterno statico configurato. Se utilizzi un'immagine fornita da Compute Engine, le istanze sono configurate automaticamente per gestire questo indirizzo IP. Se utilizzi qualsiasi altra immagine, devi configurare questo indirizzo come alias su eth0 o come loopback su ogni istanza.

Console

gcloud

  1. Prenota un indirizzo IP esterno statico.

    Per il traffico IPv4: crea un indirizzo IP esterno statico per i bilanciatori del carico.

    gcloud compute addresses create network-lb-ipv4 \
        --region us-central1
    

    Per il traffico IPv6: crea un intervallo di indirizzi IPv6 esterno statico per i bilanciatori del carico. La subnet utilizzata deve essere una subnet a doppio stack con un intervallo di subnet IPv6 esterno.

    gcloud compute addresses create network-lb-ipv6 \
        --region us-central1 \
        --subnet lb-subnet \
        --ip-version IPV6 \
        --endpoint-type NETLB
    
  2. Crea un controllo di integrità TCP per la porta 80. Questo controllo di integrità viene utilizzato per verificare l'integrità dei backend nel gruppo di istanze ig-us-tcp-80.

    gcloud compute health-checks create tcp tcp-health-check-80 \
        --region us-central1 \
        --port 80
    
  3. Crea un controllo di integrità TCP per la porta 8080. Questo controllo di integrità viene utilizzato per verificare l'integrità dei backend nel gruppo di istanze ig-us-l3-default.

    gcloud compute health-checks create tcp tcp-health-check-8080 \
        --region us-central1 \
        --port 8080
    
  4. Crea il primo bilanciatore del carico per il traffico TCP sulla porta 80.

    1. Crea un servizio di backend con il protocollo impostato su TCP.

      gcloud compute backend-services create backend-service-tcp-80 \
          --protocol TCP \
          --health-checks tcp-health-check-80 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. Aggiungi il gruppo di istanza di backend al servizio di backend.

      gcloud compute backend-services add-backend backend-service-tcp-80 \
          --instance-group ig-us-tcp-80 \
          --instance-group-zone us-central1-a \
          --region us-central1
      
    3. Per il traffico IPv4: crea una regola di forwarding per instradare il traffico TCP in entrata sulla porta 80 al servizio di backend. TCP è il protocollo della regola di forwarding predefinita e non deve essere impostato esplicitamente.

      Utilizza l'indirizzo IP riservato nel passaggio 1 come indirizzo IP esterno statico del bilanciatore del carico.

      gcloud compute forwarding-rules create forwarding-rule-tcp-80-ipv4 \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports 80 \
          --address network-lb-ipv4 \
          --backend-service backend-service-tcp-80
      
    4. Per il traffico IPv6: crea una regola di forwarding per instradare il traffico TCP in entrata sulla porta 80 al servizio di backend. TCP è il protocollo della regola di forwarding predefinita e non deve essere impostato esplicitamente.

      Utilizza l'intervallo di indirizzi IPv6 riservato nel passaggio 1 come indirizzo IP esterno statico del bilanciatore del carico. La subnet utilizzata deve essere una subnet a doppio stack con un intervallo di subnet IPv6 esterno.

      gcloud compute forwarding-rules create forwarding-rule-tcp-80-ipv6 \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports 80 \
          --backend-service backend-service-tcp-80
      
  5. Crea il secondo bilanciatore del carico per TCP sulla porta 8080, sul traffico UDP, ESP e ICMP.

    1. Crea un servizio di backend con il protocollo impostato su UNSPECIFIED.

      gcloud compute backend-services create backend-service-l3-default \
          --protocol UNSPECIFIED \
          --health-checks tcp-health-check-8080 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. Aggiungi il gruppo di istanza di backend al servizio di backend.

      gcloud compute backend-services add-backend backend-service-l3-default \
          --instance-group ig-us-l3-default \
          --instance-group-zone us-central1-c \
          --region us-central1
      
    3. Per il traffico IPv4: crea una regola di forwarding con il protocollo impostato su L3_DEFAULT per gestire tutto il traffico dei protocolli IP supportati (TCP sulla porta 8080, UDP, ESP e ICMP). Tutte le porte devono essere configurate con L3_DEFAULT regole di forwarding.

      Utilizza lo stesso indirizzo IPv4 esterno che hai utilizzato per il bilanciatore del carico precedente.

      gcloud compute forwarding-rules create forwarding-rule-l3-default-ipv4 \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --address network-lb-ipv4 \
          --backend-service backend-service-l3-default
      
    4. Per il traffico IPv6: crea una regola di forwarding con il protocollo impostato su L3_DEFAULT per gestire tutto il traffico dei protocolli IP supportati (TCP sulla porta 8080, UDP, ESP e ICMP). Tutte le porte devono essere configurate con L3_DEFAULT regole di forwarding.

      Utilizza l'intervallo di indirizzi IPv6 riservato nel passaggio 1 come indirizzo IP esterno statico del bilanciatore del carico. La subnet utilizzata deve essere una subnet a doppio stack con un intervallo di subnet IPv6 esterno.

      gcloud compute forwarding-rules create forwarding-rule-l3-default-ipv6 \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --backend-service backend-service-l3-default
      

Testa il bilanciatore del carico

Ora che il servizio di bilanciamento del carico è configurato, puoi iniziare a inviare il traffico all'indirizzo IP esterno del bilanciatore del carico e osservare la distribuzione del traffico nelle istanze di backend.

Cerca l'indirizzo IP esterno del bilanciatore del carico

Console

  1. Nella pagina Bilanciamento del carico avanzato, vai alla scheda Regole di forwarding.
    Vai alla scheda Regole di forwarding
  2. Individua le regole di forwarding utilizzate dal bilanciatore del carico.
  3. Nella colonna Indirizzo IP, annota l'indirizzo IP esterno indicato per ogni regola di forwarding IPv4 e IPv6.

gcloud: IPv4

Inserisci il seguente comando per visualizzare l'indirizzo IP esterno della regola di forwarding utilizzata dal bilanciatore del carico.

gcloud compute forwarding-rules describe forwarding-rule-tcp-80-ipv4 \
    --region us-central1

Questo esempio utilizza lo stesso indirizzo IP per entrambe le regole di forwarding IPv4, quindi l'utilizzo di forwarding-rule-l3-default-ipv4 funzionerà anche.

gcloud: IPv6

Inserisci il seguente comando per visualizzare l'indirizzo IPv6 esterno della regola di forwarding forwarding-rule-tcp-80-ipv6 utilizzata dal bilanciatore del carico.

gcloud compute forwarding-rules describe forwarding-rule-tcp-80-ipv6 \
    --region us-central1

Questo esempio utilizza lo stesso indirizzo IP per entrambe le regole di forwarding IPv6, quindi funzionerà anche forwarding-rule-l3-default-ipv6.

Invia traffico al bilanciatore del carico

Questa procedura invia il traffico esterno al bilanciatore del carico. Esegui i seguenti test per assicurarti che il traffico TCP sulla porta 80 venga bilanciato dal carico del gruppo di istanze ig-us-tcp-80, mentre tutto il resto del traffico (TCP sulla porta 8080, UDP, ESP e ICMP) viene gestito dal gruppo di istanze ig-us-l3-default.

Verifica del comportamento con le richieste TCP sulla porta 80

  1. Effettua richieste web (tramite TCP sulla porta 80) al bilanciatore del carico utilizzando curl per contattare il relativo indirizzo IP.

    • Dai client con connettività IPv4, esegui questo comando:

      $ while true; do curl -m1 IP_ADDRESS; done
      
    • Dai client con connettività IPv6, esegui questo comando:

      $ while true; do curl -m1 http://IPV6_ADDRESS; done
      

      Ad esempio, se l'indirizzo IPv6 assegnato è [2001:db8:1:1:1:1:1:1/96], il comando dovrebbe avere il seguente aspetto:

      $ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]; done
      
  2. Prendi nota del testo restituito dal comando curl. Il nome della VM di backend che genera la risposta viene visualizzato nel testo, ad esempio: Page served from: VM_NAME. Le risposte dovrebbero provenire solo da istanze del gruppo di istanze ig-us-tcp-80.

    Se inizialmente la risposta non è andata a buon fine, prima di riprovare potrebbe essere necessario attendere circa 30 secondi prima che la configurazione sia caricata completamente e le istanze siano contrassegnate come integre.

Verifica del comportamento con le richieste TCP sulla porta 8080

Effettua richieste web (tramite TCP sulla porta 8080) al bilanciatore del carico utilizzando curl per contattare il relativo indirizzo IP.

  • Dai client con connettività IPv4, esegui questo comando:

    $ while true; do curl -m1 IPV4_ADDRESS:8080; done
    
  • Dai client con connettività IPv6, esegui questo comando:

    $ while true; do curl -m1 http://IPV6_ADDRESS; done
    

    Ad esempio, se l'indirizzo IPv6 assegnato è [2001:db8:1:1:1:1:1:1/96], il comando dovrebbe avere il seguente aspetto:

    $ while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]:8080; done
    

Prendi nota del testo restituito dal comando curl. Le risposte dovrebbero provenire solo da istanze presenti nel gruppo di istanze ig-us-l3-default.

Questo mostra che tutto il traffico inviato all'indirizzo IP del bilanciatore del carico sulla porta 8080 viene gestito solo dai backend nel gruppo di istanze ig-us-l3-default.

Verifica del comportamento con le richieste ICMP

Per verificare il comportamento con il traffico ICMP, acquisisci l'output del comando tcpdump per confermare che solo le VM di backend nel gruppo di istanze ig-us-l3-default gestiscono le richieste ICMP inviate al bilanciatore del carico.

  1. SSH alle VM di backend.

    1. Nella console Google Cloud, vai alla pagina Istanze VM.
      Vai alla pagina Istanze VM

    2. Nell'elenco delle istanze di macchine virtuali, fai clic su SSH nella riga dell'istanza a cui vuoi connetterti.

  2. Esegui questo comando per utilizzare tcpdump e iniziare ad ascoltare il traffico ICMP.

    sudo tcpdump icmp -w ~/icmpcapture.pcap -s0 -c 10000
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    

    Lascia aperta la finestra SSH.

  3. Ripeti i passaggi 1 e 2 per tutte e quattro le VM di backend.

  4. Effettua richieste ICMP al bilanciatore del carico.

    Per testare le risposte IPv4, utilizza ping per contattare l'indirizzo IPv4 del bilanciatore del carico.

    ping IPV4_ADDRESS
    

    Per testare le risposte IPv6, utilizza ping6 per contattare l'indirizzo IPv6 del bilanciatore del carico.

    ping6 IPV6_ADDRESS
    

    Ad esempio, se l'indirizzo IPv6 assegnato è [2001:db8:1:1:1:1:1:1/96], il comando dovrebbe avere il seguente aspetto:

    ping6 2001:db8:1:1:1:1:1:1
    
  5. Torna alla finestra SSH aperta di ogni VM e interrompi il comando di acquisizione tcpdump. Puoi utilizzare Ctrl+C per farlo.

  6. Per ogni VM, controlla l'output del comando tcpdump nel file icmpcapture.pcap.

    sudo tcpdump -r ~/icmpcapture.pcap -n
    

    Per le VM di backend nel gruppo di istanze ig-us-l3-default, dovresti vedere le voci di file come:

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    22:13:07.814486 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 1, length 64
    22:13:07.814513 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 1, length 64
    22:13:08.816150 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 2, length 64
    22:13:08.816175 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 2, length 64
    22:13:09.817536 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 3, length 64
    22:13:09.817560 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 3, length 64
    ...
    

    Per le VM di backend nel gruppo di istanze ig-us-tcp-80, dovresti vedere che non sono stati ricevuti pacchetti e che il file deve essere vuoto:

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    

Passaggi successivi