Configura un bilanciatore del carico di rete proxy esterno regionale con backend NEG a livello di zona

Un bilanciatore del carico di rete proxy esterno regionale è un bilanciatore del carico di livello 4 regionale e basato su proxy che ti consente di eseguire e scalare il traffico di servizio TCP in una singola regione dietro a un indirizzo IP regionale esterno. Questi bilanciatori del carico distribuiscono il traffico TCP esterno da internet ai backend nella stessa regione.

Questa guida contiene le istruzioni per configurare un bilanciatore del carico di rete proxy esterno regionale con un backend di gruppi di endpoint di rete (NEG) a livello di zona.

Prima di iniziare, esamina i seguenti documenti:

In questo esempio, utilizzeremo il bilanciatore del carico per distribuire il traffico TCP tra le VM di backend in due NEG a livello di zona nella regione us-west1. Ai fini dell'esempio, il servizio è un insieme di server Apache configurati per rispondere sulla porta 80.

In questo esempio, configurerai il deployment mostrato nel diagramma seguente.

Esempio di configurazione del bilanciatore del carico di rete proxy esterno regionale con backend NEG a livello di zona.
Configurazione di esempio del bilanciatore del carico di rete proxy esterno regionale con backend NEG a livello di zona.

Questo è un bilanciatore del carico a livello di regione. Tutti i componenti del bilanciatore del carico (gruppo di istanza di backend, servizio di backend, proxy di destinazione e regola di forwarding) devono trovarsi nella stessa regione.

Autorizzazioni

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

Attività Ruolo richiesto
Crea reti, subnet e componenti del bilanciatore del carico Amministratore rete Compute (roles/compute.networkAdmin)
Aggiungi e rimuovi regole firewall Amministratore sicurezza Compute (roles/compute.securityAdmin)
Creare istanze Amministratore istanze Compute (roles/compute.instanceAdmin)

Per ulteriori informazioni, consulta le seguenti guide:

Configurare la rete e le subnet

È necessaria una rete VPC con due subnet, una per i backend del bilanciatore del carico e l'altra per i proxy del bilanciatore del carico. È un bilanciatore del carico a livello di regione. Il traffico all'interno della rete VPC viene instradato al bilanciatore del carico se la sua origine si trova in una subnet nella stessa regione del bilanciatore del carico.

Questo esempio utilizza la seguente rete VPC, la regione e le subnet:

  • Rete: una rete VPC in modalità personalizzata denominata lb-network

  • Subnet per i backend: una subnet denominata backend-subnet nella regione us-west1 che utilizza 10.1.2.0/24 come intervallo di indirizzi IP principali

  • Subnet per proxy: una subnet denominata proxy-only-subnet nella regione us-west1 che utilizza 10.129.0.0/23 come intervallo di indirizzi IP principali

Crea la rete e la subnet per i backend

Console

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

    Vai a Reti VPC

  2. Fai clic su Crea rete VPC.

  3. In Nome, inserisci lb-network.

  4. Nella sezione Subnet, procedi nel seguente modo:

    1. Imposta Modalità di creazione subnet su Personalizzata.
    2. Nella sezione Nuova subnet, inserisci le informazioni seguenti:
      • Nome: backend-subnet
      • Regione: us-west1
      • Intervallo di indirizzi IP: 10.1.2.0/24
    3. Fai clic su Fine.
  5. Fai clic su Crea.

gcloud

  1. Per creare la rete VPC personalizzata, utilizza il comando gcloud compute networks create:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Per creare una subnet nella rete lb-network nella regione us-west1, utilizza il comando gcloud compute networks subnets create:

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

Crea la subnet solo proxy

Una subnet solo proxy fornisce un insieme di indirizzi IP che Google utilizza per eseguire i proxy Envoy per tuo conto. I proxy terminano le connessioni dal client e creano nuove connessioni ai backend.

Questa subnet solo proxy viene utilizzata da tutti i bilanciatori del carico basati su Envoy nella regione us-west1 della rete VPC lb-network.

Console

Se utilizzi la console Google Cloud, puoi attendere e creare la subnet solo proxy in un secondo momento nella pagina Bilanciamento del carico.

Se vuoi creare subito una subnet solo proxy, segui questi passaggi:

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

    Vai a Reti VPC

  2. Fai clic sul nome della rete VPC condiviso: lb-network.

  3. Fai clic su Aggiungi subnet.

  4. In Nome, inserisci proxy-only-subnet.

  5. In Regione, seleziona us-west1.

  6. Imposta Scopo su Proxy gestito a livello di regione.

  7. In Intervallo di indirizzi IP, inserisci 10.129.0.0/23.

  8. Fai clic su Aggiungi.

gcloud

Per creare una subnet solo proxy, utilizza il comando gcloud compute networks subnets create:

gcloud compute networks subnets create proxy-only-subnet \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=us-west1 \
    --network=lb-network \
    --range=10.129.0.0/23

Crea regole firewall

In questo esempio, creerai le seguenti regole firewall:

  • fw-allow-health-check. Una regola in entrata, applicabile alle istanze Google Cloud con bilanciamento del carico, che consente il traffico dal bilanciatore del carico e dai sistemi di controllo di integrità di Google Cloud (130.211.0.0/22 e 35.191.0.0/16). In questo esempio viene utilizzato il tag di destinazione allow-health-check per identificare le VM di backend a cui deve essere applicato.
  • fw-allow-ssh. Una regola in entrata 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 dei sistemi da cui avvii le sessioni SSH. Questo esempio utilizza il tag di destinazione allow-ssh per identificare le VM a cui deve essere applicato.
  • fw-allow-proxy-only-subnet. Una regola firewall allow in entrata per la subnet solo proxy che consente al bilanciatore del carico di comunicare con le istanze di backend sulla porta TCP 80. Questo esempio utilizza il tag di destinazione allow-proxy-only-subnet per identificare le VM di backend a cui deve essere applicato.

Console

  1. Nella console Google Cloud, vai alla pagina Criteri firewall.

    Vai a Criteri firewall

  2. Fai clic su Crea regola firewall, quindi completa i seguenti campi:

    • Nome: fw-allow-health-check
    • Rete: lb-network
    • Destinazioni: tag di destinazione 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:
      • Scegli Protocolli e porte specificati.
      • Seleziona la casella di controllo TCP, quindi inserisci 80 come numero di porta.
  3. Fai clic su Crea.

  4. Fai clic su Crea regola firewall una seconda volta per creare la regola e 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
    • Destinazioni: tag di destinazione 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.
      • Seleziona la casella di controllo TCP, quindi inserisci 22 come numero di porta.
  5. Fai clic su Crea.

  6. Fai clic su Crea regola firewall una terza volta per creare la regola in modo da consentire le connessioni in entrata dalla subnet solo proxy ai backend di Google Cloud:

    • Nome: fw-allow-proxy-only-subnet
    • Rete: lb-network
    • Priorità: 1000
    • Direzione del traffico: in entrata
    • Azione in caso di corrispondenza: Consenti
    • Destinazioni: tag di destinazione specificati
    • Tag di destinazione: allow-proxy-only-subnet
    • Filtro di origine: intervalli IPv4
    • Intervalli IPv4 di origine: 10.129.0.0/23
    • Protocolli e porte:
      • Scegli Protocolli e porte specificati.
      • Seleziona la casella di controllo TCP, quindi inserisci 80 come numero di porta.
  7. Fai clic su Crea.

gcloud

  1. Crea la regola fw-allow-health-check per consentire ai controlli di integrità di Google Cloud di raggiungere le istanze di backend sulla porta TCP 80:

    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:80
    
  2. Crea la regola firewall fw-allow-ssh per consentire la connettività SSH alle VM con il tag di rete allow-ssh. Se ometti source-ranges, Google Cloud interpreta la regola in modo che indichi 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 una regola firewall di autorizzazione in entrata per la subnet solo proxy per consentire al bilanciatore del carico di comunicare con le istanze di backend sulla porta TCP 80:

    gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-proxy-only-subnet \
        --source-ranges=10.129.0.0/23 \
        --rules=tcp:80
    

Prenota l'indirizzo IP del bilanciatore del carico

Prenotare un indirizzo IP esterno per il bilanciatore del carico. Questa procedura crea l'indirizzo IP del bilanciatore del carico nel livello Standard. I bilanciatori del carico di rete proxy esterni regionali supportano sia il livello Premium che Standard di Network Service Tiers. Tuttavia, la creazione di questo bilanciatore del carico nel livello Premium non è supportata nella console Google Cloud. Usa gcloud o l'API REST.

Console

  1. Nella console Google Cloud, vai alla pagina Prenota un indirizzo statico.

    Vai a Prenota un indirizzo statico

  2. Scegli un nome per il nuovo indirizzo.

  3. In Network Service Tiers, seleziona Standard.

  4. Per Versione IP, seleziona IPv4. Gli indirizzi IPv6 non sono supportati.

  5. In Tipo, seleziona A livello di regione.

  6. In Regione, seleziona us-west1.

  7. Lascia l'opzione Allegato a impostata su Nessuno. Dopo aver creato il bilanciatore del carico, questo indirizzo IP viene collegato alla regola di forwarding del bilanciatore del carico.

  8. Fai clic su Prenota per prenotare l'indirizzo IP.

gcloud

  1. Per prenotare un indirizzo IP esterno statico, utilizza il comando gcloud compute addresses create:

    gcloud compute addresses create ADDRESS_NAME  \
       --region=us-west1 \
       --network-tier=STANDARD
    

    Sostituisci ADDRESS_NAME con il nome che vuoi chiamare a questo indirizzo.

  2. Per visualizzare il risultato, utilizza il comando gcloud compute addresses describe:

    gcloud compute addresses describe ADDRESS_NAME
    

Configura il NEG a livello di zona

Configura un NEG a livello di zona con endpoint di tipo GCE_VM_IP_PORT nella regione us-west1. Prima crea le VM, quindi crea un NEG a livello di zona e aggiungi al NEG gli endpoint di rete delle VM.

Crea VM

Console

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

    Vai a Istanze VM

  2. Fai clic su Crea istanza.

  3. Imposta Nome su vm-a1.

  4. In Regione, seleziona us-west1.

  5. In Zona, seleziona us-west1-a.

  6. Nella sezione Disco di avvio, assicurati che il sistema operativo Debian e la versione 10 (buster) siano selezionati come opzioni del disco di avvio. Se necessario, fai clic su Scegli per cambiare l'immagine.

  7. Fai clic su Opzioni avanzate.

  8. Fai clic su Networking, quindi configura i seguenti campi:

    1. In Tag di rete, inserisci allow-ssh, allow-health-check e allow-proxy-only-subnet.
    2. In Interfacce di rete, seleziona quanto segue:
      • Rete: lb-network
      • Subnet: backend-subnet
  9. Fai clic su Gestione. Inserisci 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
    
  10. Fai clic su Crea.

  11. Ripeti i passaggi precedenti per creare altre tre VM. Utilizza le seguenti combinazioni di nome e zona:

    • Nome: vm-a2 | Zona: us-west1-a
    • Nome: vm-c1 | Zona: us-west1-c
    • Nome: vm-c2 | Zona: us-west1-c

gcloud

Per creare le VM, utilizza il comando gcloud compute instances create due volte. Utilizza le seguenti combinazioni per VM_NAME e ZONE. I contenuti dello script sono identici per entrambe le VM:

  • VM_NAME: vm-a1 e ZONE: us-west1-a
  • VM_NAME: vm-a2 e ZONE: us-west1-a
  • VM_NAME: vm-c1 e ZONE: us-west1-c
  • VM_NAME: vm-c2 e ZONE: 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,allow-proxy-only-subnet \
     --subnet=backend-subnet \
     --metadata=startup-script='#! /bin/bash
       apt-get update
       apt-get install apache2 -y
       a2ensite default-ssl
       a2enmod ssl
       vm_hostname="$(curl -H "Metadata-Flavor:Google" \
       http://metadata.google.internal/computeMetadata/v1/instance/name)"
       echo "Page served from: $vm_hostname" | \
       tee /var/www/html/index.html
       systemctl restart apache2'

Crea i NEG a livello di zona

Console

Crea un gruppo di endpoint di rete a livello di zona

  1. Nella console Google Cloud, vai alla pagina Gruppi di endpoint di rete.

    Vai a Gruppi di endpoint di rete

  2. Fai clic su Crea gruppo di endpoint di rete.

  3. In Nome, inserisci zonal-neg-a.

  4. Per Tipo di gruppo di endpoint di rete, seleziona Gruppo di endpoint di rete (a livello di zona).

  5. In Rete, seleziona lb-network.

  6. Per Subnet, seleziona backend-subnet.

  7. In Zona, seleziona us-west1-a.

  8. In Porta predefinita, inserisci 80.

  9. Fai clic su Crea.

  10. Ripeti tutti i passaggi in questa sezione per creare un secondo NEG a livello di zona con le seguenti modifiche alle impostazioni:

    • Nome: zonal-neg-c
    • Zona: us-west1-c

Aggiungere endpoint ai NEG a livello di zona

  1. Nella console Google Cloud, vai alla pagina Gruppi di endpoint di rete.

    Vai a Gruppi di endpoint di rete

  2. Fai clic sul nome del gruppo di endpoint di rete creato nel passaggio precedente (ad esempio zonal-neg-a).

  3. Nella pagina Dettagli del gruppo di endpoint di rete, nella sezione Endpoint di rete in questo gruppo, fai clic su Aggiungi endpoint di rete.

  4. Seleziona un'istanza VM (ad esempio vm-a1).

  5. Nella sezione Interfaccia di rete vengono visualizzati il nome, la zona e la subnet della VM.

    1. In Indirizzo IP, inserisci l'indirizzo IP del nuovo endpoint di rete. Per ottenere l'indirizzo IP, fai clic su Controlla gli indirizzi IP principali e l'intervallo IP alias in nic0.
    2. In Tipo di porta, seleziona Predefinito. L'endpoint utilizza la porta predefinita 80 per tutti gli endpoint nel gruppo di endpoint di rete. Questo è sufficiente per il nostro esempio perché il server Apache gestisce le richieste sulla porta 80.
    3. Fai clic su Crea.
  6. Fai clic su Aggiungi endpoint di rete. Seleziona la seconda istanza VM, vm-a2, e ripeti i passaggi precedenti per aggiungere i relativi endpoint a zonal-neg-a.

  7. Ripeti tutti i passaggi in questa sezione per aggiungere endpoint da vm-c1 e vm-c2 a zonal-neg-c.

gcloud

  1. Crea un NEG a livello di zona nella zona us-west1-a con GCE_VM_IP_PORT endpoint:

    gcloud compute network-endpoint-groups create zonal-neg-a \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=us-west1-a \
        --network=lb-network \
        --subnet=backend-subnet
    

    Puoi specificare il --default-port durante la creazione del NEG oppure specificare un numero di porta per ogni endpoint, come mostrato nel passaggio successivo.

  2. Aggiungi endpoint al NEG a livello di zona:

    gcloud compute network-endpoint-groups update zonal-neg-a \
        --zone=us-west1-a \
        --add-endpoint='instance=vm-a1,port=80' \
        --add-endpoint='instance=vm-a2,port=80'
    
  3. Crea un NEG a livello di zona nella zona us-west1-c con GCE_VM_IP_PORT endpoint:

    gcloud compute network-endpoint-groups create zonal-neg-c \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=us-west1-c \
        --network=lb-network \
        --subnet=backend-subnet
    

    Puoi specificare il --default-port durante la creazione del NEG oppure specificare un numero di porta per ogni endpoint, come mostrato nel passaggio successivo.

  4. Aggiungi endpoint al NEG a livello di zona:

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

configura il bilanciatore del carico

Console

Avvia la configurazione

  1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.

    Vai a Bilanciamento del carico

  2. Fai clic su Crea bilanciatore del carico.
  3. In Tipo di bilanciatore del carico, seleziona Bilanciatore del carico di rete (TCP/UDP/SSL) e fai clic su Avanti.
  4. Per Proxy o passthrough, seleziona Bilanciatore del carico del proxy e fai clic su Avanti.
  5. In Pubblico o interno, seleziona Per il pubblico (esterno) e fai clic su Avanti.
  6. Per Deployment a livello di regione globale o a regione singola, seleziona Ideale per carichi di lavoro a livello di regione e fai clic su Avanti.
  7. Fai clic su Configura.

Configurazione di base

  1. In Nome, inserisci my-ext-tcp-lb.
  2. In Regione, seleziona us-west1.
  3. In Rete, seleziona lb-network.

Prenota una subnet solo proxy

  1. Fai clic su Prenota subnet.
  2. In Nome, inserisci proxy-only-subnet.
  3. In Intervallo di indirizzi IP, inserisci 10.129.0.0/23.
  4. Fai clic su Aggiungi.

Configura i backend

  1. Fai clic su Configurazione backend.
  2. Per Tipo di backend, seleziona Gruppo di endpoint di rete a livello di zona.
  3. In Protocollo, seleziona TCP.
  4. Configura il primo backend:
    1. In Nuovo backend, seleziona il NEG di zona zonal-neg-a.
    2. Mantieni i valori predefiniti rimanenti e fai clic su Fine.
  5. Configura il secondo backend:
    1. Fai clic su Aggiungi backend.
    2. In Nuovo backend, seleziona il gruppo di istanze zonal-neg-c.
    3. Mantieni i valori predefiniti rimanenti e fai clic su Fine.
  6. Configura il controllo di integrità:
    1. In Controllo di integrità, seleziona Crea un controllo di integrità.
    2. Imposta il nome del controllo di integrità su tcp-health-check.
    3. In Protocollo, seleziona TCP.
    4. In Porta, inserisci 80.
  7. Conserva i valori predefiniti rimanenti e fai clic su Salva.
  8. Nella console Google Cloud, verifica che sia presente un segno di spunta accanto a Configurazione backend. In caso contrario, assicurati di aver completato tutti i passaggi.

Configura il frontend

  1. Fai clic su Configurazione frontend.
  2. In Nome, inserisci ext-tcp-forwarding-rule.
  3. In Subnet, seleziona backend-subnet.
  4. In Indirizzo IP, seleziona ext-tcp-ip-address.
  5. In Numero porta, inserisci 9090. La regola di forwarding inoltra solo i pacchetti con una porta di destinazione corrispondente.
  6. Per Protocollo proxy, seleziona Off perché il protocollo PROXY non funziona con il software Apache HTTP Server. Per saperne di più, consulta Protocollo PROXY.
  7. Fai clic su Fine.
  8. Nella console Google Cloud, verifica che sia presente un segno di spunta accanto a Configurazione frontend. In caso contrario, assicurati di aver completato tutti i passaggi precedenti.

Esamina e finalizza

  1. Fai clic su Esamina e finalizza.
  2. Controlla le impostazioni.
  3. Fai clic su Crea.

gcloud

  1. Crea un controllo di integrità a livello di regione per i backend:

    gcloud compute health-checks create tcp tcp-health-check \
        --region=us-west1 \
        --use-serving-port
    
  2. Crea un servizio di backend:

    gcloud compute backend-services create external-tcp-proxy-bs \
       --load-balancing-scheme=EXTERNAL_MANAGED \
       --protocol=TCP \
       --region=us-west1 \
       --health-checks=tcp-health-check \
       --health-checks-region=us-west1
    
  3. Aggiungi il NEG a livello di zona nella zona us-west1-a al servizio di backend:

    gcloud compute backend-services add-backend external-tcp-proxy-bs \
       --network-endpoint-group=zonal-neg-a \
       --network-endpoint-group-zone=us-west1-a \
       --balancing-mode=CONNECTION \
       --max-connections-per-endpoint=50 \
       --region=us-west1
    
  4. Aggiungi il NEG a livello di zona nella zona us-west1-c al servizio di backend:

    gcloud compute backend-services add-backend external-tcp-proxy-bs \
       --network-endpoint-group=zonal-neg-c \
       --network-endpoint-group-zone=us-west1-c \
       --balancing-mode=CONNECTION \
       --max-connections-per-endpoint=50 \
       --region=us-west1
    
  5. Crea il proxy TCP di destinazione:

    gcloud compute target-tcp-proxies create ext-tcp-target-proxy \
       --backend-service=external-tcp-proxy-bs \
       --region=us-west1
    
  6. Crea la regola di forwarding. Per --ports, specifica un singolo numero di porta compreso tra 1 e 65535. Questo esempio utilizza la porta 9090. La regola di forwarding inoltra solo i pacchetti con una porta di destinazione corrispondente.

    gcloud compute forwarding-rules create ext-tcp-forwarding-rule \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network=lb-network \
      --subnet=backend-subnet \
      --address=ext-tcp-ip-address \
      --ports=9090 \
      --region=us-west1 \
      --target-tcp-proxy=ext-tcp-target-proxy \
      --target-tcp-proxy-region=us-west1
    

Testa il bilanciatore del carico

Ora che hai configurato il bilanciatore del carico, puoi testare l'invio del traffico all'indirizzo IP del bilanciatore del carico.

  1. Recupera l'indirizzo IP del bilanciatore del carico.

    Per ottenere l'indirizzo IPv4, esegui questo comando:

    gcloud compute addresses describe ADDRESS_NAME
    
  2. Invia il traffico al bilanciatore del carico eseguendo questo comando. Sostituisci LB_IP_ADDRESS con l'indirizzo IPv4 del bilanciatore del carico.

    curl -m1 LB_IP_ADDRESS:9090
    

Passaggi successivi