Configurare il bilanciamento del carico TCP/UDP interno con NEG di zona

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questa guida illustra come eseguire il deployment di un bilanciatore del carico TCP/UDP interno con backend di gruppo di endpoint di rete (NEG) di zona. I NEG di zona sono risorse a livello di zona che rappresentano raccolte di indirizzi IP o combinazioni di indirizzo IP/porta per le risorse Google Cloud all'interno di una singola subnet. I NEG ti consentono di creare raggruppamenti logici di indirizzi IP o combinazioni di indirizzi IP/porta che rappresentano servizi software anziché intere VM.

Prima di seguire questa guida, acquisisci familiarità con quanto segue:

Il bilanciamento del carico TCP/UDP interno supporta solo i NEG di zona con endpoint GCE_VM_IP.

Autorizzazioni

Per seguire questa guida, devi creare le istanze e modificare una rete in un progetto. Devi essere proprietario o editor del progetto oppure devi avere tutti i seguenti ruoli IAM di Compute Engine:

Attività Ruolo obbligatorio
Crea reti, subnet e componenti del bilanciatore del carico Amministratore rete
Aggiungere e rimuovere regole firewall Amministratore della sicurezza
Creare istanze Amministratore istanze Compute

Per saperne di più, consulta le seguenti guide:

Panoramica della configurazione

Questa guida illustra come configurare e testare un bilanciatore del carico TCP/UDP interno con backend NEG di zona GCE_VM_IP. I passaggi di questa sezione descrivono come configurare quanto segue:

  1. Una rete VPC di esempio denominata lb-network con una subnet personalizzata
  2. Regole firewall che consentono le connessioni in entrata alle VM di backend
  3. Quattro VM:
    • VM vm-a1 e vm-a2 nella zona us-west1-a
    • VM vm-c1 e vm-c2 nella zona us-west1-c
  4. Due NEG di zona di backend, neg-a nella zona us-west1-a e neg-c nella zona us-west1-c. Ogni NEG avrà i seguenti endpoint:
    • neg-a contiene questi due endpoint:
      • Indirizzo IP interno della VM vm-a1
      • Indirizzo IP interno della VM vm-a2
    • neg-c contiene questi due endpoint:
      • Indirizzo IP interno della VM vm-c1
      • Indirizzo IP interno della VM vm-c2
  5. Una VM client (vm-client) in us-west1-a per testare le connessioni
  6. I seguenti componenti interni del bilanciatore del carico TCP/UDP:
    • Un servizio di backend interno nell'area geografica us-west1 per gestire la distribuzione delle connessioni ai due NEG di zona
    • Una regola di forwarding interno e un indirizzo IP interno per il frontend del bilanciatore del carico.

L'architettura utilizzata in questo esempio ha il seguente aspetto:

Configurazione del bilanciamento del carico TCP/UDP interno con NEG di zona
Configurazione del bilanciamento del carico TCP/UDP interno con NEG di zona

Configurazione di una rete, di una regione e di una subnet

L'esempio di bilanciatore del carico TCP/UDP interno descritto in questa pagina è stato creato in una rete VPC in modalità personalizzata denominata lb-network.

Le VM di backend, i NEG di zona e i componenti del bilanciatore del carico di questo esempio si trovano in questa regione e nella subnet:

  • Regione: us-west1
  • Subnet: lb-subnet, con intervallo di indirizzi IP principali 10.1.2.0/24

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

console

  1. Vai alla pagina Reti VPC in Google Cloud Console.
    Vai alla pagina Rete VPC
  2. Fai clic su Crea rete VPC.
  3. Inserisci un Nome di lb-network.
  4. Nella sezione Subnet:
    • Imposta la Modalità di creazione subnet su Personalizzata.
    • Nella sezione Nuova subnet, inserisci le seguenti informazioni:
      • Nome: lb-subnet
      • Regione: us-west1
      • Intervallo di indirizzi IP: 10.1.2.0/24
      • Fai clic su Fine.
  5. Fai clic su Crea.

gcloud

  1. Crea la rete VPC personalizzata:

    gcloud compute networks create lb-network --subnet-mode=custom
    
    1. All'interno della rete lb-network, crea una subnet per le VM di backend nell'area geografica us-west1:
    gcloud compute networks subnets create lb-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

Configurazione delle regole del firewall

In questo esempio vengono utilizzate le seguenti regole firewall:

  • fw-allow-lb-access: una regola in entrata, applicabile a tutti i target nella rete VPC, che consente il traffico dalle origini nell'intervallo 10.1.2.0/24. Questa regola consente il traffico in entrata da qualsiasi client situato in lb-subnet.

  • fw-allow-ssh: una regola in entrata, applicabile alle istanze in fase di bilanciamento del carico, che consente la connettività SSH in entrata sulla porta TCP 22 da qualsiasi indirizzo. Puoi scegliere un intervallo IP di origine più restrittivo per questa regola; ad esempio, puoi specificare solo gli intervalli IP del sistema da cui verranno avviate le sessioni SSH. In questo esempio viene utilizzato il tag di destinazione allow-ssh per identificare le VM a cui deve essere applicata.

Senza queste regole firewall, la regola default nega in entrata blocca il traffico in entrata verso le istanze di backend.

console

  1. Vai alla pagina Firewall in Google Cloud Console.
    Vai alla pagina Firewall
  2. Fai clic su Crea regola firewall e inserisci le informazioni seguenti per creare la regola per consentire il traffico nella subnet:
    • Nome: fw-allow-lb-access
    • Rete: lb-network
    • Priorità: 1000
    • Direzione del traffico: in entrata
    • Azione in caso di corrispondenza: Consenti
    • Destinazioni: tutte le istanze nella rete.
    • Filtro di origine: Intervalli IPv4
    • Intervalli IPv4 di origine: 10.1.2.0/24
    • Protocolli e porte: consenti tutto
  3. Fai clic su Crea.
  4. Fai di nuovo clic su Crea regola firewall per creare la regola per consentire le connessioni SSH in entrata:
    • Nome: fw-allow-ssh
    • Rete: lb-network
    • Priorità: 1000
    • Direzione del traffico: in entrata
    • Azione in caso di corrispondenza: Consenti
    • Target: tag target specificati
    • Tag di destinazione: allow-ssh
    • Filtro di origine: Intervalli IPv4
    • Intervalli IPv4 di origine: 0.0.0.0/0
    • Protocolli e porte: scegli Protocolli e porte specificati, quindi digita: tcp:22
  5. Fai clic su Crea.
  6. Fai clic su Crea regola firewall una terza volta per creare la regola per consentire i controlli di integrità di Google Cloud:
    • Nome: fw-allow-health-check
    • Rete: lb-network
    • Priorità: 1000
    • Direzione del traffico: in entrata
    • Azione in caso di corrispondenza: Consenti
    • Target: tag target specificati
    • Tag di destinazione: allow-health-check
    • Filtro di origine: Intervalli IPv4
    • Intervalli IPv4 di origine: 130.211.0.0/22 e 35.191.0.0/16
    • Protocolli e porte: consenti tutto
  7. Fai clic su Crea.

gcloud

  1. Crea la regola firewall fw-allow-lb-access per consentire la comunicazione con la subnet:

    gcloud compute firewall-rules create fw-allow-lb-access \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. Crea la regola firewall fw-allow-ssh per consentire la connettività SSH alle VM con tag di rete allow-ssh. Quando ometti source-ranges, Google Cloud interpreta la regola in modo da indicare qualsiasi origine.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. Crea la regola fw-allow-health-check per consentire i controlli di integrità di Google Cloud.

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    

Creazione di VM e gruppi di endpoint di rete

Per dimostrare la natura a livello di area geografica del bilanciamento del carico TCP/UDP interno, in questo esempio vengono usati due backend NEG di zona, neg-a e neg-c, nelle zone us-west1-a e us- west1-c. Il traffico viene bilanciato in base al carico sia nei NEG che negli endpoint all'interno di ogni NEG.

Creazione delle VM in corso...

Per supportare questo esempio, ciascuna delle quattro VM esegue un server web Apache che ascolta le seguenti porte TCP: 80, 8008, 8080, 8088, 443 e 8443.

A ogni VM è assegnato un indirizzo IP interno in lb-subnet e un indirizzo IP esterno (pubblico) temporaneo. Puoi rimuovere gli indirizzi IP esterni in un secondo momento.

Gli indirizzi IP esterni non sono obbligatori per le VM di backend, ma sono utili per questo esempio perché consentono alle VM di scaricare Apache da Internet e semplificano la connessione tramite SSH. Per impostazione predefinita, Apache è configurato per l'associazione a qualsiasi indirizzo IP. I bilanciatori del carico TCP/UDP interni distribuiscono i pacchetti mantenendo l'IP di destinazione.

Assicurati che il software server in esecuzione sulle tue VM sia in ascolto sull'indirizzo IP della regola di forwarding interno del bilanciatore del carico.

Per maggiore semplicità, queste VM di backend eseguono Debian Debian GNU/Linux 10.

console

Crea VM

  1. Vai alla pagina Istanze VM in Google Cloud Console.
    Vai alla pagina Istanze VM
  2. Ripeti i passaggi seguenti per creare quattro VM, utilizzando le seguenti combinazioni di nome e zona.
    • Nome: vm-a1, zona: us-west1-a
    • Nome: vm-a2, zona: us-west1-a
    • Nome: vm-c1, zona: us-west1-c
    • Nome: vm-c2, zona: us-west1-c
  3. Fai clic su Crea istanza.
  4. Imposta il Nome come indicato nel passaggio 2.
  5. Per Area geografica, scegli us-west1, quindi scegli una Zona come indicato nel passaggio 2.
  6. Nella sezione Disco di avvio, assicurati che siano selezionati il sistema operativo Debian e la versione 10 (buster) per le opzioni del disco di avvio. Fai clic su Scegli per modificare l'immagine, se necessario.
  7. Fai clic su Gestione, sicurezza, dischi, networking, single-tenancy e apporta le seguenti modifiche:

    • Fai clic su Networking e aggiungi i seguenti tag di rete: allow-ssh e allow-health-check
    • Fai clic su Modifica in Interfacce di rete e apporta le seguenti modifiche, poi fai clic su Fine:
      • Rete: lb-network
      • Subnet: lb-subnet
      • IP interno principale: temporaneo (automatico)
      • IP esterno: temporaneo
    • Fai clic su Gestione. Nel campo Script di avvio, copia e incolla i seguenti contenuti dello script. I contenuti dello script sono identici per tutte e quattro le VM:

      #! /bin/bash
      if [ -f /etc/startup_script_completed ]; then
      exit 0
      fi
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      file_ports="/etc/apache2/ports.conf"
      file_http_site="/etc/apache2/sites-available/000-default.conf"
      file_https_site="/etc/apache2/sites-available/default-ssl.conf"
      http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
      http_vh_prts="*:80 *:8008 *:8080 *:8088"
      https_listen_prts="Listen 443\nListen 8443"
      https_vh_prts="*:443 *:8443"
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      prt_conf="$(cat "$file_ports")"
      prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
      prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
      echo "$prt_conf" | tee "$file_ports"
      http_site_conf="$(cat "$file_http_site")"
      http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
      echo "$http_site_conf_2" | tee "$file_http_site"
      https_site_conf="$(cat "$file_https_site")"
      https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
      echo "$https_site_conf_2" | tee "$file_https_site"
      systemctl restart apache2
      touch /etc/startup_script_completed
      
  8. Fai clic su Crea.

gcloud

Crea le quattro VM eseguendo quattro volte il comando seguente, utilizzando queste quattro combinazioni per [VM-NAME] e [ZONE]. I contenuti dello script sono identici per tutte e quattro le VM.

  • [VM-NAME] di vm-a1 e [ZONE] di us-west1-a
  • [VM-NAME] di vm-a2 e [ZONE] di us-west1-a
  • [VM-NAME] di vm-c1 e [ZONE] di us-west1-c
  • [VM-NAME] di vm-c2 e [ZONE] di us-west1-c

    gcloud compute instances create VM-NAME \
        --zone=ZONE \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --metadata=startup-script='#! /bin/bash
    if [ -f /etc/startup_script_completed ]; then
    exit 0
    fi
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    file_ports="/etc/apache2/ports.conf"
    file_http_site="/etc/apache2/sites-available/000-default.conf"
    file_https_site="/etc/apache2/sites-available/default-ssl.conf"
    http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
    http_vh_prts="*:80 *:8008 *:8080 *:8088"
    https_listen_prts="Listen 443\nListen 8443"
    https_vh_prts="*:443 *:8443"
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    prt_conf="$(cat "$file_ports")"
    prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
    prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
    echo "$prt_conf" | tee "$file_ports"
    http_site_conf="$(cat "$file_http_site")"
    http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
    echo "$http_site_conf_2" | tee "$file_http_site"
    https_site_conf="$(cat "$file_https_site")"
    https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
    echo "$https_site_conf_2" | tee "$file_https_site"
    systemctl restart apache2
    touch /etc/startup_script_completed'
    

Creazione di NEG di zona GCE_VM_IP

I NEG (neg-a e neg-c) devono essere creati nelle stesse zone delle VM create nel passaggio precedente.

console

Non puoi utilizzare Google Cloud Console per creare o gestire i NEG di zona di GCE_VM_IP. Usa invece l'API REST o gcloud.

gcloud

  1. Crea un GCE_VM_IP NEG di zona denominato neg-a in us-west1-a utilizzando il comando gcloud compute network-endpoint-groups create:

    gcloud compute network-endpoint-groups create neg-a \
        --network-endpoint-type=gce-vm-ip \
        --zone=us-west1-a \
        --network=lb-network \
        --subnet=lb-subnet
    
  2. Aggiungi endpoint a neg-a:

    gcloud compute network-endpoint-groups update neg-a \
        --zone=us-west1-a \
        --add-endpoint='instance=vm-a1' \
        --add-endpoint='instance=vm-a2'
    
  3. Crea un GCE_VM_IP NEG di zona denominato neg-c in us-west1-c utilizzando il comando gcloud compute network-endpoint-groups create:

    gcloud compute network-endpoint-groups create neg-c \
        --network-endpoint-type=gce-vm-ip \
        --zone=us-west1-c \
        --network=lb-network \
        --subnet=lb-subnet
    
  4. Aggiungi endpoint a neg-c:

    gcloud compute network-endpoint-groups update neg-c \
        --zone=us-west1-c \
        --add-endpoint='instance=vm-c1' \
        --add-endpoint='instance=vm-c2'
    

Creazione di una VM client

Questo esempio crea una VM client (vm-client) nella stessa regione delle VM di backend (server). Il client viene utilizzato per convalidare la configurazione del bilanciatore del carico e dimostrare il comportamento previsto come descritto nella sezione test.

console

  1. Vai alla pagina Istanze VM in Google Cloud Console.
    Vai alla pagina Istanze VM
  2. Fai clic su Crea istanza.
  3. Imposta il Nome su vm-client.
  4. Imposta la zona su us-west1-a.
  5. Fai clic su Gestione, sicurezza, dischi, networking, single-tenancy e apporta le seguenti modifiche:
    • Fai clic su Networking e aggiungi il tag allow-ssh a Tag di rete.
    • Fai clic sul pulsante di modifica in Interfacce di rete e apporta le seguenti modifiche, poi fai clic su Fine:
      • Rete: lb-network
      • Subnet: lb-subnet
      • IP interno principale: temporaneo (automatico)
      • IP esterno: temporaneo
  6. Fai clic su Crea.

gcloud

La VM client può trovarsi in qualsiasi zona della stessa area geografica del bilanciatore del carico e può utilizzare qualsiasi subnet della stessa area geografica. In questo esempio, il client si trova nella zona us-west1-a e utilizza la stessa subnet delle VM di backend.

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

Configurazione dei componenti del bilanciatore del carico

Questi passaggi configurano tutti i componenti del bilanciatore del carico TCP/UDP interni:

  • Servizio di backend: per questo esempio, devi passare il traffico HTTP attraverso il bilanciatore del carico. Di conseguenza, dovrai utilizzare TCP, non UDP.

  • Regola di forwarding: questo esempio crea una singola regola di forwarding interno.

  • Indirizzo IP interno: in questo esempio devi specificare un indirizzo IP interno, 10.1.2.99, quando crei la regola di forwarding.

console

gcloud

  1. Creare un nuovo controllo di integrità HTTP a livello di regione.

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. Crea il servizio di backend:

    gcloud compute backend-services create bs-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  3. Aggiungi i due NEG di zona, neg-a e neg-c, al servizio di backend:

    gcloud compute backend-services add-backend bs-ilb \
        --region=us-west1 \
        --network-endpoint-group=neg-a \
        --network-endpoint-group-zone=us-west1-a
    
    gcloud compute backend-services add-backend bs-ilb \
        --region=us-west1 \
        --network-endpoint-group=neg-c \
        --network-endpoint-group-zone=us-west1-c
    
  4. Crea una regola di forwarding per il servizio di backend. Quando crei la regola di forwarding, specifica 10.1.2.99 per l'indirizzo IP interno nella subnet.

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=80,8008,8080,8088 \
        --backend-service=bs-ilb \
        --backend-service-region=us-west1
    

Test

Questo test contatta il bilanciatore del carico da una VM client separata, ovvero da una VM di backend del bilanciatore del carico. Il comportamento previsto prevede che il traffico venga distribuito tra le quattro VM di backend perché non è stata configurata alcuna affinità sessione.

  1. Connetterti all'istanza VM del client.

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. Effettua una richiesta web al bilanciatore del carico utilizzando curl per contattare il relativo indirizzo IP. Ripeti la richiesta per vedere che le risposte provengono da diverse VM di backend. Il nome della VM che genera la risposta viene visualizzato nel testo nella risposta HTML, in base al contenuto di /var/www/html/index.html su ogni VM di backend. Le risposte previste sono le seguenti: Page served from: vm-a1, Page served from: vm-a2 e così via.

    curl http://10.1.2.99
    

    La regola di forwarding è configurata per gestire le porte 80, 8008, 8080 e 8088. Per inviare il traffico a queste altre porte, aggiungi i due punti (:) e il numero della porta dopo l'indirizzo IP, in questo modo:

    curl http://10.1.2.99:8008
    

Passaggi successivi