Panoramica del bilanciatore del carico delle applicazioni esterno

Questo documento introduce i concetti necessari per comprendere come configurare un bilanciatore del carico delle applicazioni esterno.

Un bilanciatore del carico delle applicazioni esterno è un bilanciatore del carico di livello 7 basato su proxy che ti consente di eseguire e scalare i servizi dietro un singolo indirizzo IP esterno. Il bilanciatore del carico delle applicazioni esterno distribuisce il traffico HTTP e HTTPS ai backend ospitati su diverse piattaforme Google Cloud (come Compute Engine, Google Kubernetes Engine (GKE), Cloud Storage e così via), nonché a backend esterni connessi su internet o tramite connettività ibrida. Per maggiori dettagli, vedi Panoramica del bilanciatore del carico delle applicazioni: casi d'uso.

Modalità di funzionamento

Puoi configurare un bilanciatore del carico delle applicazioni esterno nelle seguenti modalità:

  • Bilanciatore del carico delle applicazioni esterno globale. Si tratta di un bilanciatore del carico globale implementato come servizio gestito in Google Front End (GFE). Utilizza il proxy Envoy open source per supportare funzionalità di gestione avanzata del traffico come mirroring del traffico, suddivisione del traffico in base ai pesi, trasformazioni delle intestazioni basate su richiesta/risposta e altro ancora.
  • Bilanciatore del carico delle applicazioni classico. Si tratta del bilanciatore del carico delle applicazioni esterno classico, globale nel livello Premium ma che può essere configurato per essere regionale nel livello Standard. Questo bilanciatore del carico è implementato su Google Front End (GFE). I GFE vengono distribuiti a livello globale e operano insieme utilizzando la rete globale e il piano di controllo di Google.
  • Bilanciatore del carico delle applicazioni esterno regionale. Questo è un bilanciatore del carico a livello di regione implementato come servizio gestito sul proxy Envoy open source. Include funzionalità di gestione avanzata del traffico come mirroring del traffico, suddivisione del traffico in base ai pesi, trasformazioni delle intestazioni basate su richiesta/risposta e altro ancora.
Modalità bilanciatore del carico Casi d'uso consigliati Funzionalità
Bilanciatore del carico delle applicazioni esterno globale Utilizza questo bilanciatore del carico per i carichi di lavoro HTTP(S) esterni con utenti o servizi di backend dislocati a livello globale in più regioni.
Bilanciatore del carico delle applicazioni classico

Questo bilanciatore del carico è globale nel livello Premium, ma può essere configurato per essere effettivamente a livello di regione nel livello Standard.

Nel livello Premium di Network Service Tiers, questo bilanciatore del carico offre il bilanciamento del carico a più regioni, tenta di indirizzare il traffico al backend integro più vicino con capacità e termina il traffico HTTP(S) il più vicino possibile ai tuoi utenti. Per maggiori dettagli sul processo di distribuzione delle richieste, consulta Distribuzione del traffico.

Nel livello di servizio di rete Standard, il bilanciamento del carico viene gestito a livello di regione.

  • Compatibile con GKE che utilizza Gateway (completamente orchestrato), Ingress (completamente orchestrato) o NEG autonomi (orchestrazione manuale)
  • Supporta Google Cloud Armor
  • Meno funzionalità di routing del traffico
Per l'elenco completo delle funzionalità, consulta la pagina Funzionalità di bilanciamento del carico.
Bilanciatore del carico delle applicazioni esterno regionale

Questo bilanciatore del carico contiene molte delle funzionalità dell'Application Load Balancer classico esistente, oltre a funzionalità di gestione avanzata del traffico.

Utilizza questo bilanciatore del carico se vuoi pubblicare contenuti provenienti da una sola geolocalizzazione (ad esempio per soddisfare le normative di conformità).

Questo bilanciatore del carico può essere configurato nel livello Premium o Standard.

Per l'elenco completo, consulta Funzionalità di bilanciamento del carico.

Identifica la modalità

console Cloud

  1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.
    Vai a Bilanciamento del carico
  2. Nella scheda Bilanciatori del carico sono visualizzati il tipo, il protocollo e la regione del bilanciatore del carico. Se la regione è vuota, il bilanciatore del carico è globale. La tabella seguente riassume come identificare la modalità del bilanciatore del carico.

    Modalità bilanciatore del carico Tipo di bilanciatore del carico Tipo di accesso Regione
    Bilanciatore del carico delle applicazioni esterno globale Applicazione Esterno
    Bilanciatore del carico delle applicazioni classico Applicazione(versione classica) Esterno
    Bilanciatore del carico delle applicazioni esterno regionale Applicazione Esterno Specifica una regione

gcloud

  1. Per determinare la modalità di un bilanciatore del carico, esegui questo comando:

    gcloud compute forwarding-rules describe FORWARDING_RULE_NAME
    

    Nell'output comando, verifica lo schema di bilanciamento del carico, la regione e il livello di rete. La seguente tabella riassume come identificare la modalità del bilanciatore del carico.

    Modalità bilanciatore del carico Schema di bilanciamento del carico Regola di forwarding Livello di rete
    Bilanciatore del carico delle applicazioni esterno globale EXTERNAL_MANAGED Globale Premium
    Bilanciatore del carico delle applicazioni classico EXTERNAL Globale Standard o Premium
    Bilanciatore del carico delle applicazioni esterno regionale EXTERNAL_MANAGED Specifica una regione Standard o Premium

Architettura

Le seguenti risorse sono necessarie per il deployment di un bilanciatore del carico delle applicazioni esterno:

  • Solo per gli Application Load Balancer esterni regionali, viene utilizzata una subnet solo proxy per inviare le connessioni dal bilanciatore del carico ai backend.

  • Una regola di forwarding esterno specifica un indirizzo IP esterno, una porta e un proxy HTTP(S) di destinazione. I client utilizzano l'indirizzo IP e la porta per connettersi al bilanciatore del carico.

  • Un proxy HTTP(S) di destinazione riceve una richiesta dal client. Il proxy HTTP(S) valuta la richiesta utilizzando la mappa URL per prendere decisioni relative al routing del traffico. Il proxy può anche autenticare le comunicazioni utilizzando i certificati SSL.

    • Per il bilanciamento del carico HTTPS, il proxy HTTPS di destinazione utilizza i certificati SSL per dimostrare la propria identità ai client. Un proxy HTTPS di destinazione supporta il numero documentato di certificati SSL.
  • Il proxy HTTP(S) utilizza una mappa URL per stabilire una determinazione del routing in base agli attributi HTTP (come il percorso di richiesta, i cookie o le intestazioni). In base alla decisione di routing, il proxy inoltra le richieste del client a servizi di backend o bucket di backend specifici. La mappa URL può specificare azioni aggiuntive, come l'invio di reindirizzamenti ai client.

  • Un servizio di backend distribuisce le richieste a backend integri. I bilanciatori del carico delle applicazioni esterni globali supportano anche i bucket di backend.

    • Uno o più backend devono essere connessi al servizio di backend o al bucket di backend.
  • Un controllo di integrità monitora periodicamente l'idoneità dei backend. In questo modo ridurrai il rischio che le richieste vengano inviate a backend che non possono rispondere alle richieste.

  • Regole firewall per consentire ai tuoi backend di accettare i probe del controllo di integrità. I bilanciatori del carico delle applicazioni esterni regionali richiedono una regola firewall aggiuntiva per consentire al traffico dalla subnet solo proxy di raggiungere i backend.

Globale

Questo diagramma mostra i componenti di un deployment di un bilanciatore del carico delle applicazioni esterno globale. Questa architettura si applica sia all'Application Load Balancer esterno globale sia all'Application Load Balancer classico nel livello Premium.

Componenti del bilanciatore del carico delle applicazioni esterno globale
Componenti del bilanciatore del carico delle applicazioni esterno globale

Regionale

Questo diagramma mostra i componenti di un deployment di un bilanciatore del carico delle applicazioni esterno regionale.

Componenti del bilanciatore del carico delle applicazioni esterno regionale
Componenti del bilanciatore del carico delle applicazioni esterno regionale

Subnet solo proxy

Le subnet solo proxy sono obbligatorie solo per gli Application Load Balancer esterni regionali.

La subnet solo proxy fornisce un insieme di indirizzi IP che Google utilizza per eseguire i proxy Envoy per tuo conto. Devi creare una subnet solo proxy in ogni regione di una rete VPC in cui utilizzi Application Load Balancer esterni regionali. Il flag --purpose per questa subnet solo proxy è impostato su REGIONAL_MANAGED_PROXY. Tutti i bilanciatori del carico basati su Envoy a livello di regione nella stessa regione e nella stessa rete VPC condividono un pool di proxy Envoy dalla stessa subnet solo proxy. Inoltre:

  • Le subnet solo proxy vengono utilizzate solo per i proxy Envoy, non per i tuoi backend.
  • Le VM di backend o gli endpoint di tutti i bilanciatori del carico delle applicazioni esterni regionali in una regione e la rete VPC ricevono connessioni dalla subnet solo proxy.
  • L'indirizzo IP dell'Application Load Balancer esterno regionale non si trova nella subnet solo proxy. L'indirizzo IP del bilanciatore del carico è definito dalla regola di forwarding gestito esterna, descritta di seguito.

Se in precedenza hai creato una subnet solo proxy con --purpose=INTERNAL_HTTPS_LOAD_BALANCER, devi eseguire la migrazione dello scopo della subnet a REGIONAL_MANAGED_PROXY prima di poter creare altri bilanciatori del carico basati su Envoy nella stessa regione della rete VPC.

Regole e indirizzi di forwarding

Le regole di forwarding instradano il traffico in base a indirizzo IP, porta e protocollo a una configurazione di bilanciamento del carico composta da proxy di destinazione, mappa URL e uno o più servizi di backend.

Ogni regola di forwarding fornisce un singolo indirizzo IP che può essere utilizzato nei record DNS per la tua applicazione. Non è richiesto il bilanciamento del carico basato su DNS. Puoi specificare l'indirizzo IP da utilizzare o lasciare che Cloud Load Balancing ne assegni uno.

Ogni regola di forwarding per un bilanciatore del carico delle applicazioni può fare riferimento a una singola porta da 1-65535. Per supportare più porte, devi configurare più regole di forwarding. Puoi configurare più regole di forwarding in modo da utilizzare lo stesso indirizzo IP esterno (VIP) e fare riferimento allo stesso proxy HTTP(S) di destinazione, purché la combinazione complessiva di indirizzo IP, porta e protocollo sia univoca per ogni regola di forwarding. In questo modo, puoi utilizzare un singolo bilanciatore del carico con una mappa URL condivisa come proxy per più applicazioni.

Il tipo di regola di forwarding, di indirizzo IP e di schema di bilanciamento del carico utilizzato dagli Application Load Balancer esterni dipende dalla modalità del bilanciatore del carico e dal livello di servizio di rete in cui si trova il bilanciatore del carico.

Modalità bilanciatore del carico Livello di servizio di rete Regola di forwarding, indirizzo IP e schema di bilanciamento del carico Routing da internet al frontend del bilanciatore del carico
Bilanciatore del carico delle applicazioni esterno globale Livello Premium

Regola di forwarding esterno globale

Indirizzo IP esterno globale

Schema di bilanciamento del carico:
EXTERNAL_MANAGED

Richieste instradate al GFE più vicino al client su internet.
Bilanciatore del carico delle applicazioni classico Livello Premium

Regola di forwarding esterno globale

Indirizzo IP esterno globale

Schema di bilanciamento del carico:
EXTERNAL

Richieste instradate al GFE più vicino al client su internet.
Livello Standard

Regola di forwarding esterno a livello di regione

Indirizzo IP esterno a livello di regione

Schema di bilanciamento del carico:
EXTERNAL

Richieste instradate a un GFE nella regione del bilanciatore del carico.
Bilanciatore del carico delle applicazioni esterno regionale Livello Premium o Standard

Regola di forwarding esterno a livello di regione

Indirizzo IP esterno a livello di regione

Schema di bilanciamento del carico:
EXTERNAL_MANAGED

Richieste instradate ai proxy Envoy nella stessa regione del bilanciatore del carico.

Per l'elenco completo dei protocolli supportati dalle regole di forwarding del bilanciatore del carico delle applicazioni esterno in ciascuna modalità, vedi Funzionalità del bilanciatore del carico.

Proxy di destinazione

I proxy di destinazione terminano le connessioni HTTP(S) dei client. Una o più regole di forwarding indirizzano il traffico al proxy di destinazione, che a sua volta consulta la mappa URL per determinare come instradare il traffico ai backend.

Non fare affidamento sul proxy per mantenere i nomi delle intestazioni di richiesta o risposta. Ad esempio, l'intestazione della risposta Server: Apache/1.0 potrebbe essere visualizzata sul client come server: Apache/1.0.

La seguente tabella specifica il tipo di proxy di destinazione richiesto dagli Application Load Balancer esterni in ogni modalità.

Modalità bilanciatore del carico Tipi di proxy di destinazione Intestazioni aggiunte tramite proxy Intestazioni personalizzate supportate Supporto di Cloud Trace
Bilanciatore del carico delle applicazioni esterno globale HTTP globale,
HTTPS globale
I proxy impostano le intestazioni delle richieste/risposta HTTP nel seguente modo:
  • Via: 1.1 google (richieste e risposte)
  • X-Forwarded-Proto: [http | https] (solo richieste)
  • X-Forwarded-For: [< provided-value>,]<client-ip>,<load-balancer-ip> (vedi intestazione X-Forwarded-For) (solo richieste)

I proxy possono anche impostare l'intestazione X-Cloud-Trace-Context.

Configurato sul servizio di backend o sul bucket di backend

Non supportata con Cloud CDN

Bilanciatore del carico delle applicazioni classico HTTP globale,
HTTPS globale
I proxy impostano le intestazioni delle richieste/risposta HTTP nel seguente modo:
  • Via: 1.1 google (richieste e risposte)
  • X-Forwarded-Proto: [http | https] (solo richieste)
  • X-Forwarded-For: [< provided-value>,]<client-ip>,<load-balancer-ip> (vedi intestazione X-Forwarded-For) (solo richieste)

I proxy possono anche impostare l'intestazione X-Cloud-Trace-Context.

Configurato sul servizio di backend o sul bucket di backend
Bilanciatore del carico delle applicazioni esterno regionale HTTP a livello di regione,
HTTPS a livello di regione
  • X-Forwarded-Proto: [http | https] (solo richieste)
  • Via: 1.1 google (richieste e risposte)
  • X-Forwarded-For: [< provided-value>,]<client-ip>,<load-balancer-ip> (vedi intestazione X-Forwarded-For) (solo richieste)

Oltre alle intestazioni aggiunte dal proxy di destinazione, il bilanciatore del carico regola le altre intestazioni HTTP nei seguenti modi:

  • Per l'Application Load Balancer esterno globale,entrambe le intestazioni delle richieste e delle risposte vengono sempre convertite in lettere minuscole. Ad esempio, Host diventa host, e Keep-ALIVE diventa keep-alive.

    L'unica eccezione è quando si utilizzano backend di NEG internet globali con HTTP/1.1. Per maggiori dettagli su come vengono elaborate le intestazioni HTTP/1.1 con i NEG internet globali, consulta la panoramica sui NEG internet.

  • Per l'Application Load Balancer classico, le intestazioni delle richieste e delle risposte vengono convertite in lettere minuscole, tranne quando utilizzi HTTP/1.1. Con HTTP/1.1, per le intestazioni viene usata l'uso corretto di maiuscole e minuscole. La prima lettera della chiave dell'intestazione e ogni lettera che segue un trattino (-) sono in maiuscolo per garantire la compatibilità con i client HTTP/1.1. Ad esempio, user-agent viene cambiato in User-Agent e content-encoding viene cambiato in Content-Encoding.

  • Alcune intestazioni sono unite. Quando sono presenti più istanze della stessa chiave di intestazione (ad esempio Via), il bilanciatore del carico combina i valori in un unico elenco separato da virgole per una singola chiave di intestazione. Solo le intestazioni i cui valori possono essere rappresentati come elenchi separati da virgole vengono unite. Le altre intestazioni, come Set-Cookie, non vengono mai unite.

Intestazione host

Quando il bilanciatore del carico effettua la richiesta HTTP, conserva l'intestazione Host della richiesta originale.

Intestazione X-Forwarded-For

Il bilanciatore del carico aggiunge due indirizzi IP separati da una singola virgola all'intestazione X-Forwarded-For nel seguente ordine:

  • L'indirizzo IP del client che si connette al bilanciatore del carico
  • L'indirizzo IP della regola di forwarding del bilanciatore del carico

Se non è presente un'intestazione X-Forwarded-For nella richiesta in entrata, questi due indirizzi IP corrispondono all'intero valore dell'intestazione:

X-Forwarded-For: <client-ip>,<load-balancer-ip>

Se la richiesta include un'intestazione X-Forwarded-For, il bilanciatore del carico conserva il valore fornito prima di <client-ip>,<load-balancer-ip>:

X-Forwarded-For: <supplied-value>,<client-ip>,<load-balancer-ip>

Quando si esegue un software proxy inverso HTTP sui backend del bilanciatore del carico, il software potrebbe aggiungere uno o entrambi i seguenti indirizzi IP alla fine dell'intestazione X-Forwarded-For:

  • L'indirizzo IP del Google Front End (GFE) collegato al backend. Questi indirizzi IP sono compresi negli intervalli 130.211.0.0/22 e 35.191.0.0/16.

  • L'indirizzo IP del sistema di backend stesso.

Pertanto, un processo upstream dopo il backend del bilanciatore del carico potrebbe ricevere un'intestazione X-Forwarded-For nel formato:

<existing-values>,<client-ip>,<load-balancer-ip><GFE-IP><backend-IP>

Mappe URL

Le mappe di URL definiscono i pattern corrispondenti per il routing delle richieste basato su URL ai servizi di backend appropriati. Viene definito un servizio predefinito per gestire le richieste che non corrispondono a una regola dell'host o a una regola di corrispondenza del percorso specificata. In alcune situazioni, come l'esempio di bilanciamento del carico su più regioni, potresti non definire alcuna regola per gli URL e utilizzare solo il servizio predefinito. Per il routing delle richieste, la mappa URL ti consente di suddividere il traffico esaminando i componenti dell'URL per inviare richieste a set diversi di backend.

Le mappe URL utilizzate con gli Application Load Balancer esterni globali e con l'Application Load Balancer esterno regionale supportano diverse funzionalità avanzate di gestione del traffico come l'indirizzamento del traffico basato su intestazioni, la suddivisione del traffico in base al peso e il mirroring delle richieste. Per ulteriori informazioni, consulta le seguenti risorse:

La seguente tabella specifica il tipo di mappa URL richiesto dagli Application Load Balancer esterni in ogni modalità.

Modalità bilanciatore del carico Tipo di mappa URL
Bilanciatore del carico delle applicazioni esterno globale Globale
Bilanciatore del carico delle applicazioni classico Globale (con solo un sottoinsieme delle funzionalità supportate)
Bilanciatore del carico delle applicazioni esterno regionale A livello di regione

Certificati SSL

I bilanciatori del carico delle applicazioni esterni che utilizzano proxy HTTPS di destinazione richiedono chiavi private e certificati SSL come parte della configurazione del bilanciatore del carico:

  • Google Cloud fornisce due metodi di configurazione per assegnare chiavi private e certificati SSL ai proxy HTTPS di destinazione: certificati SSL di Compute Engine e Gestore certificati. Per una descrizione di ogni configurazione, consulta Metodi di configurazione dei certificati nella panoramica dei certificati SSL.

  • Google Cloud fornisce due tipi di certificati: autogestiti e gestiti da Google. Per una descrizione di ciascun tipo, consulta Tipi di certificati nella panoramica dei certificati SSL.

  • Il tipo di bilanciatore del carico delle applicazioni esterno (globale, regionale o classico) determina i metodi di configurazione e i tipi di certificato supportati. Per maggiori dettagli, consulta Certificati e bilanciatori del carico Google Cloud nella panoramica dei certificati SSL.

Mutual TLS

In genere con la comunicazione HTTPS, l'autenticazione funziona in un solo modo: il client verifica l'identità del server. Per le applicazioni che richiedono il bilanciatore del carico per autenticare l'identità dei client che si connettono al bilanciatore del carico delle applicazioni, sia un bilanciatore del carico delle applicazioni esterno globale sia un bilanciatore del carico delle applicazioni classico supportano il protocollo TLS reciproco (mTLS).

Con mTLS, il bilanciatore del carico richiede che il client invii un certificato per autenticare se stesso durante l'handshake TLS con il bilanciatore del carico. Puoi configurare un archivio di attendibilità utilizzato dal bilanciatore del carico per convalidare la catena di attendibilità del certificato client.

Google Cloud utilizza la risorsa TrustConfig in Gestore certificati per archiviare i certificati che il server utilizza per verificare il certificato presentato dal client. Se utilizzi un bilanciatore del carico delle applicazioni classico nel Premium Network Service Tiers o un Application Load Balancer esterno globale, puoi utilizzare Gestione certificati per eseguire il provisioning e gestire i certificati SSL o TrustConfig su più istanze del bilanciatore del carico su larga scala. Per ulteriori informazioni, consulta la panoramica di Gestore certificati.

Per maggiori informazioni su mTLS, consulta Autenticazione TLS reciproca.

Criteri SSL

I criteri SSL specificano l'insieme di funzionalità SSL che i bilanciatori del carico di Google Cloud utilizzano durante la negoziazione di SSL con i client.

Per impostazione predefinita, il bilanciamento del carico HTTPS utilizza un insieme di funzionalità SSL che offrono una buona sicurezza e un'ampia compatibilità. Alcune applicazioni richiedono un maggiore controllo sulle versioni e sulle crittografie SSL utilizzate per le connessioni HTTPS o SSL. Puoi definire un criterio SSL per specificare l'insieme di funzionalità SSL utilizzate dal bilanciatore del carico durante la negoziazione di SSL con i client. Inoltre, puoi applicare questo criterio SSL al proxy HTTPS di destinazione.

La tabella seguente specifica il supporto dei criteri SSL per i bilanciatori del carico in ciascuna modalità.

Modalità bilanciatore del carico Criteri SSL supportati
Bilanciatore del carico delle applicazioni esterno globale
Bilanciatore del carico delle applicazioni classico
Bilanciatore del carico delle applicazioni esterno regionale

Servizi e bucket di backend

I servizi di backend forniscono informazioni sulla configurazione al bilanciatore del carico. I bilanciatori del carico utilizzano le informazioni in un servizio di backend per indirizzare il traffico in entrata a uno o più backend collegati. Per un esempio che mostra come configurare un bilanciatore del carico con un servizio di backend e un backend di Compute Engine, consulta Configurazione di un bilanciatore del carico delle applicazioni esterno con un backend di Compute Engine.

I bucket di backend indirizzano il traffico in entrata ai bucket Cloud Storage. Per un esempio che mostra come aggiungere un bucket a un Application Load Balancer esterno, consulta Configurazione di un bilanciatore del carico con bucket di backend.

La seguente tabella specifica le funzionalità di backend supportate dagli Application Load Balancer esterni in ogni modalità.


Modalità bilanciatore del carico
Backend supportati su un servizio di backend Supporta i bucket di backend Supporta Google Cloud Armor Supporta Cloud CDN4 Supporta IAP4 Supporta le estensioni di servizio
Gruppi di istanze NEG a livello di zona NEG internet NEG serverless NEG ibridi NEG Private Service Connect
Bilanciatore del carico delle applicazioni esterno globale 2
Bilanciatore del carico delle applicazioni classico 1
con il livello Premium

Bilanciatore del carico delle applicazioni esterno regionale 1

1 Usa endpoint di tipo GCE_VM_IP_PORT con GKE: usa NEG autonomi a livello di zona o utilizza Ingress

2 Usa endpoint di tipo GCE_VM_IP_PORT con GKE: Usa NEG autonomi a livello di zona

3 Supportato solo con il controller gateway GKE

4 IAP e Cloud CDN non sono compatibili tra loro. Non possono essere abilitate sullo stesso servizio di backend.

Per ulteriori informazioni, consulta le seguenti risorse:

Backend e reti VPC

Le limitazioni sulla posizione dei backend dipendono dal tipo di bilanciatore del carico.

  • Per l'Application Load Balancer esterno globale e l'Application Load Balancer classico, tutte le istanze di backend dei backend di gruppi di istanze e tutti gli endpoint di backend dei backend NEG devono trovarsi nello stesso progetto. Tuttavia, un backend di un gruppo di istanze o un NEG può utilizzare una rete VPC diversa in quel progetto. Non è necessario connettere le diverse reti VPC tramite peering di rete VPC, poiché i GFE comunicano direttamente con i backend nelle rispettive reti VPC.
  • Per l'Application Load Balancer esterno regionale, tutti i backend devono trovarsi nella stessa rete VPC e nella stessa regione.

Protocollo ai backend

Quando configuri un servizio di backend per il bilanciatore del carico, imposti il protocollo che il servizio utilizza per comunicare con i backend. Puoi scegliere HTTP, HTTPS o HTTP/2. Il bilanciatore del carico utilizza solo il protocollo da te specificato. Il bilanciatore del carico non utilizza uno degli altri protocolli se non è in grado di negoziare una connessione al backend con il protocollo specificato.

Se utilizzi HTTP/2, devi utilizzare TLS. HTTP/2 senza crittografia non è supportato.

Per l'elenco completo dei protocolli supportati, consulta Funzionalità di bilanciamento del carico: protocolli dal bilanciatore del carico ai backend.

Supporto per WebSocket

I bilanciatori del carico basati su HTTP(S) di Google Cloud supportano integrato il protocollo WebSocket quando si utilizza HTTP o HTTPS come protocollo per il backend. Il bilanciatore del carico non richiede alcuna configurazione per il proxy delle connessioni WebSocket.

Il protocollo WebSocket fornisce un canale di comunicazione full-duplex tra client e server. Una richiesta HTTP(S) avvia il canale. Per informazioni dettagliate sul protocollo, consulta RFC 6455.

Quando il bilanciatore del carico riconosce una richiesta Upgrade WebSocket da un client HTTP(S) seguita da una risposta Upgrade riuscita dall'istanza di backend, il bilanciatore del carico esegue il proxy del traffico bidirezionale per la durata della connessione attuale. Se l'istanza di backend non restituisce una risposta Upgrade riuscita, il bilanciatore del carico chiude la connessione.

I timeout della connessione WebSocket dipendono dal tipo di bilanciatore del carico (globale, a livello di regione o classico). Per maggiori dettagli, consulta Timeout del servizio di backend.

L'affinità sessione per WebSocket funziona come per qualsiasi altra richiesta. Per informazioni, consulta Affinità sessione.

Utilizzo di gRPC con le applicazioni Google Cloud

gRPC è un framework open source per le chiamate di procedure remote. È basato sullo standard HTTP/2. I casi d'uso di gRPC includono:

  • Sistemi distribuiti a bassa latenza e con scalabilità elevata
  • Sviluppo di client mobili che comunicano con un server cloud
  • Progettare nuovi protocolli che devono essere accurati, efficienti e indipendenti dalla lingua
  • Design a più livelli per consentire estensioni, autenticazione e logging

Per utilizzare gRPC con le tue applicazioni Google Cloud, devi eseguire il proxy per le richieste end-to-end su HTTP/2. Per farlo:

  1. Configurare un bilanciatore del carico HTTPS.
  2. Abilita HTTP/2 come protocollo dal bilanciatore del carico ai backend.

Il bilanciatore del carico negozia HTTP/2 con i client nell'ambito dell'handshake SSL utilizzando l'estensione TLS ALPN.

Il bilanciatore del carico può comunque negoziare HTTPS con alcuni client o accettare richieste HTTP non sicure su un bilanciatore del carico configurato per l'utilizzo di HTTP/2 tra il bilanciatore del carico e le istanze di backend. Queste richieste HTTP o HTTPS vengono trasformate dal bilanciatore del carico per eseguire il proxy delle richieste tramite HTTP/2 alle istanze di backend.

Devi abilitare TLS sui tuoi backend. Per ulteriori informazioni, consulta Crittografia dal bilanciatore del carico ai backend.

Se vuoi configurare un bilanciatore del carico delle applicazioni esterno utilizzando HTTP/2 con Google Kubernetes Engine Ingress o gRPC e HTTP/2 con Ingress, consulta HTTP/2 per il bilanciamento del carico con Ingress.

Per informazioni sulla risoluzione dei problemi relativi a HTTP/2, consulta Risoluzione dei problemi relativi a HTTP/2 nei backend.

Per informazioni sulle limitazioni HTTP/2, consulta Limitazioni HTTP/2.

Controlli di integrità

Ogni servizio di backend specifica un controllo di integrità che monitora periodicamente l'idoneità dei backend a ricevere una connessione dal bilanciatore del carico. In questo modo ridurrai il rischio che le richieste vengano inviate a backend che non possono rispondere alla richiesta. I controlli di integrità non controllano se l'applicazione stessa funziona.

Per i probe di controllo di integrità, devi creare una regola firewall di autorizzazione in entrata che consenta ai probe del controllo di integrità di raggiungere le istanze di backend. In genere, i probe di controllo di integrità hanno origine dal meccanismo di controllo di integrità centralizzato di Google.

I bilanciatori del carico delle applicazioni esterni regionali che utilizzano backend NEG ibridi sono un'eccezione a questa regola perché i loro controlli di integrità provengono invece dalla subnet solo proxy. Per maggiori dettagli, consulta la panoramica sui NEG ibridi.

Protocollo del controllo di integrità

Sebbene non sia obbligatorio e non sempre possibile, una best practice consiste nell'utilizzare un controllo di integrità il cui protocollo corrisponde al protocollo del servizio di backend. Ad esempio, un controllo di integrità HTTP/2 verifica in modo più accurato la connettività HTTP/2 ai backend. Al contrario, i bilanciatori del carico delle applicazioni esterni regionali che utilizzano backend NEG ibridi non supportano i controlli di integrità gRPC. Per l'elenco dei protocolli di controllo di integrità supportati, consulta Funzionalità di bilanciamento del carico.

La seguente tabella specifica l'ambito dei controlli di integrità supportati dagli Application Load Balancer esterni in ogni modalità.

Modalità bilanciatore del carico Tipo di controllo di integrità
Bilanciatore del carico delle applicazioni esterno globale Globale
Bilanciatore del carico delle applicazioni classico Globale
Bilanciatore del carico delle applicazioni esterno regionale A livello di regione

Per maggiori informazioni sui controlli di integrità, consulta quanto segue:

Regole firewall

Il bilanciatore del carico richiede le seguenti regole firewall:

  • Per i bilanciatori del carico delle applicazioni esterni globali, una regola di autorizzazione in entrata consente al traffico proveniente dai Google Front End (GFE) di raggiungere i backend.
    Per il bilanciatore del carico delle applicazioni esterno regionale, una regola di autorizzazione in entrata consente al traffico dalla subnet solo proxy di raggiungere i backend.
  • Una regola di autorizzazione in entrata per consentire il traffico proveniente dagli intervalli dei probe del controllo di integrità. Per ulteriori informazioni sui probe di controllo di integrità e sul motivo per cui è necessario consentire il traffico da questi probe, consulta Esegui test sugli intervalli IP e sulle regole firewall.

Le regole firewall vengono implementate a livello di istanza VM, non nei proxy GFE. Non puoi utilizzare le regole firewall di Google Cloud per impedire al traffico di raggiungere il bilanciatore del carico. Per ottenere l'Application Load Balancer esterno globale e per l'Application Load Balancer classico, puoi utilizzare Google Cloud Armor.

Le porte per queste regole firewall devono essere configurate come segue:

  • Consenti il traffico alla porta di destinazione per il controllo di integrità di ogni servizio di backend.

  • Per i backend di gruppi di istanze: determina le porte che devono essere configurate dalla mappatura tra la porta denominata del servizio di backend e i numeri di porte associati a quella porta denominata su ogni gruppo di istanze. I numeri di porta possono variare tra i gruppi di istanze assegnati allo stesso servizio di backend.

  • Per i backend NEG GCE_VM_IP_PORT: consenti il traffico verso i numeri di porta degli endpoint.

La seguente tabella riassume gli intervalli di indirizzi IP di origine richiesti per le regole firewall:

Modalità bilanciatore del carico Intervalli di origine del controllo di integrità Intervalli di origine richiesta
Bilanciatore del carico delle applicazioni esterno globale
  • 35.191.0.0/16
  • 130.211.0.0/22
L'origine del traffico GFE dipende dal tipo di backend:
  • Gruppi di istanze, NEG a livello di zona (GCE_VM_IP_PORT) e NEG di connettività ibrida (NON_GCP_PRIVATE_IP_PORT):
    • 130.211.0.0/22
    • 35.191.0.0/16
  • NEG internet (INTERNET_FQDN_PORT e INTERNET_IP_PORT):
    • 34.96.0.0/20
    • 34.127.192.0/18
  • SERVERLESS NEG e bucket di backend: la rete di produzione di Google gestisce il routing dei pacchetti
Bilanciatore del carico delle applicazioni classico
  • 35.191.0.0/16
  • 130.211.0.0/22
L'origine del traffico GFE dipende dal tipo di backend:
  • Gruppi di istanze, NEG a livello di zona (GCE_VM_IP_PORT) e NEG di connettività ibrida (NON_GCP_PRIVATE_IP_PORT):
    • 35.191.0.0/16
    • 130.211.0.0/22
  • NEG internet (INTERNET_FQDN_PORT e INTERNET_IP_PORT):
    • 34.96.0.0/20
    • 34.127.192.0/18
  • SERVERLESS NEG e bucket di backend: la rete di produzione di Google gestisce il routing dei pacchetti.
Bilanciatore del carico delle applicazioni esterno regionale
  • 35.191.0.0/16
  • 130.211.0.0/22

Non è necessario inserire nella lista consentita gli intervalli di probe del controllo di integrità di Google per i NEG ibridi. Tuttavia, se utilizzi una combinazione di NEG ibridi e di zona in un unico servizio di backend, devi inserire nella lista consentita gli intervalli del probe del controllo di integrità di Google per i NEG di zona.
La subnet solo proxy configurata.

Architettura di un VPC condiviso

I bilanciatori del carico delle applicazioni esterni supportano le reti che utilizzano il VPC condiviso. Un VPC condiviso consente alle organizzazioni di connettere risorse di più progetti a una rete VPC comune per comunicare tra loro in modo sicuro ed efficiente utilizzando gli indirizzi IP interni di quella rete. Se non hai ancora familiarità con il VPC condiviso, leggi la panoramica su VPC condiviso.

Esistono molti modi per configurare un bilanciatore del carico delle applicazioni esterno all'interno di una rete VPC condiviso. Indipendentemente dal tipo di deployment, tutti i componenti del bilanciatore del carico devono trovarsi nella stessa organizzazione.

Bilanciatore del carico Componenti di frontend Componenti di backend
Bilanciatore del carico delle applicazioni esterno globale

L'indirizzo IP esterno globale, la regola di forwarding, il proxy HTTP(S) di destinazione e la mappa URL associata devono essere definiti nello stesso progetto. Può essere un progetto host o un progetto di servizio.

Un servizio di backend globale deve essere definito nello stesso host o progetto di servizio dei backend (gruppi di istanze o NEG). I controlli di integrità associati ai servizi di backend devono essere definiti anche nello stesso progetto del servizio di backend.

Bilanciatore del carico delle applicazioni classico L'indirizzo IP esterno globale, la regola di forwarding, il proxy HTTP(S) di destinazione e la mappa URL associata devono essere definiti nello stesso host o progetto di servizio dei backend. Un servizio di backend globale deve essere definito nello stesso host o progetto di servizio dei backend (gruppi di istanze o NEG). I controlli di integrità associati ai servizi di backend devono essere definiti anche nello stesso progetto del servizio di backend.
Bilanciatore del carico delle applicazioni esterno regionale

Crea la rete e la subnet solo proxy richieste nel progetto host del VPC condiviso.

L'indirizzo IP esterno a livello di regione, la regola di forwarding, il proxy HTTP(S) di destinazione e la mappa URL associata devono essere definiti nello stesso progetto. Può essere il progetto host o un progetto di servizio.

Puoi eseguire una delle seguenti operazioni:
  • Crea servizi di backend e backend (gruppi di istanze, NEG serverless o qualsiasi altro tipo di backend supportato) nello stesso progetto di servizio dei componenti di frontend.
  • Crea servizi e backend di backend (gruppi di istanze, NEG serverless o altri tipi di backend supportati) nel numero di progetti di servizio necessario. Una singola mappa URL può fare riferimento a servizi di backend in progetti diversi. Questo tipo di deployment è noto come riferimento al servizio cross-project.

Ogni servizio di backend deve essere definito nello stesso progetto dei backend a cui fa riferimento. I controlli di integrità associati ai servizi di backend devono essere definiti anche nello stesso progetto del servizio di backend.

Sebbene sia possibile creare tutti i componenti e i backend di bilanciamento del carico nel progetto host del VPC condiviso, questo tipo di deployment non separa le responsabilità di amministrazione della rete e di sviluppo dei servizi.

Tutti i componenti e i backend del bilanciatore del carico in un progetto di servizio

Il seguente diagramma dell'architettura mostra un deployment di un VPC condiviso standard in cui tutti i componenti e i backend del bilanciatore del carico si trovano in un progetto di servizio. Questo tipo di deployment è supportato da tutti i bilanciatori del carico delle applicazioni.

I componenti e i backend del bilanciatore del carico devono utilizzare la stessa rete VPC.

Bilanciatore del carico delle applicazioni esterno regionale su una rete VPC condiviso
Bilanciatore del carico delle applicazioni esterno regionale sulla VPC condiviso condivisa

Backend serverless in un ambiente VPC condiviso

Per un bilanciatore del carico che utilizza un backend di NEG serverless, il servizio di backend Cloud Run o Cloud Functions deve trovarsi nello stesso progetto del NEG serverless.

Inoltre, per il bilanciatore del carico delle applicazioni esterno regionale che supporta i riferimenti ai servizi tra progetti, il servizio di backend, il NEG serverless e il servizio Cloud Run devono essere sempre nello stesso progetto di servizio.

Riferimento ai servizi tra progetti

In questo modello, il frontend e la mappa URL del bilanciatore del carico si trovano in un progetto host o di servizio. I backend e i servizi di backend del bilanciatore del carico possono essere distribuiti tra progetti nell'ambiente VPC condiviso. È possibile fare riferimento ai servizi di backend tra progetti in una singola mappa URL. Questo servizio è noto come riferimento al servizio cross-project.

Il riferimento ai servizi tra progetti consente alle organizzazioni di configurare un bilanciatore del carico centrale e instradare il traffico a centinaia di servizi distribuiti in più progetti diversi. Puoi gestire centralmente tutte le regole e i criteri di routing del traffico in un'unica mappa. Puoi anche associare il bilanciatore del carico a un singolo set di nomi host e certificati SSL. Puoi quindi ottimizzare il numero di bilanciatori del carico necessari per eseguire il deployment dell'applicazione e ridurre la gestibilità, i costi operativi e i requisiti di quota.

Creando progetti diversi per ogni team funzionale, puoi anche separare i ruoli all'interno dell'organizzazione. I proprietari dei servizi possono concentrarsi sulla creazione di servizi nei progetti di servizio, mentre i team di rete possono eseguire il provisioning e la manutenzione dei bilanciatori del carico in un altro progetto ed entrambi possono essere connessi utilizzando i riferimenti ai servizi tra progetti.

I proprietari dei servizi possono mantenere l'autonomia durante l'esposizione dei loro servizi e controllare quali utenti possono accedere ai servizi utilizzando il bilanciatore del carico. Ciò è assegnato a uno speciale ruolo IAM chiamato ruolo Utente servizi bilanciatore del carico Compute (roles/compute.loadBalancerServiceUser).

Per scoprire come configurare il VPC condiviso per un bilanciatore del carico delle applicazioni esterno a livello di regione, con o senza riferimenti al servizio tra progetti, consulta Configurare un bilanciatore del carico delle applicazioni esterno regionale con VPC condiviso.

Limitazioni note con riferimento al servizio tra progetti

  • I riferimenti ai servizi tra progetti possono essere utilizzati con gruppi di istanze, NEG serverless e la maggior parte degli altri tipi di backend supportati. Tuttavia, si applicano le seguenti limitazioni:

    • Con gli Application Load Balancer esterni regionali, non puoi fare riferimento a un servizio di backend tra progetti se il servizio di backend ha backend NEG internet regionali.
  • I riferimenti ai servizi tra progetti non sono supportati per l'Application Load Balancer esterno globale e per l'Application Load Balancer classico.
  • Google Cloud non fa differenza tra risorse (ad esempio servizi di backend) che utilizzano lo stesso nome in più progetti. Di conseguenza, quando utilizzi il riferimento al servizio tra progetti, ti consigliamo di utilizzare nomi univoci per i servizio di backend in tutti i progetti all'interno dell'organizzazione.

Esempio 1: frontend e backend del bilanciatore del carico in progetti di servizio diversi

Ecco un esempio di deployment in cui la mappa URL e il frontend del bilanciatore del carico vengono creati nel progetto di servizio A e la mappa URL fa riferimento a un servizio di backend nel progetto di servizio B.

In questo caso, gli amministratori di rete o gli amministratori del bilanciatore del carico nel progetto di servizio A richiederanno l'accesso ai servizi di backend nel progetto di servizio B. Gli amministratori del progetto di servizio B concedono il ruolo IAM compute.loadBalancerServiceUser agli amministratori del bilanciatore del carico nel progetto di servizio A che vogliono fare riferimento al servizio di backend nel progetto di servizio B.

Mappa URL e frontend del bilanciatore del carico nel progetto di servizio
frontend e backend del bilanciatore del carico in progetti di servizio diversi

Esempio 2: frontend del bilanciatore del carico nel progetto host e nei backend nei progetti di servizio

In questo tipo di deployment, nel progetto host vengono creati il frontend e la mappa URL del bilanciatore del carico, mentre i servizi di backend (e i backend) vengono creati nei progetti di servizio.

In questo caso, gli amministratori di rete o del bilanciatore del carico nel progetto host richiederanno l'accesso ai servizi di backend nel progetto di servizio. Gli amministratori dei progetti di servizio concedono il ruolo IAM compute.loadBalancerServiceUser agli amministratori del bilanciatore del carico nel progetto host A che vogliono fare riferimento al servizio di backend nel progetto di servizio.

Mappa URL e frontend del bilanciatore del carico nel progetto host
Mappa URL e frontend del bilanciatore del carico nel progetto host

Come funzionano le connessioni

Connessioni del bilanciatore del carico delle applicazioni esterno globale

I bilanciatori del carico delle applicazioni esterni globali sono implementati da molti proxy denominati Google Front End (GFE). Non esiste un solo proxy. Nel livello Premium, lo stesso indirizzo IP esterno globale viene pubblicizzato da vari punti di presenza e le richieste del client vengono indirizzate al GFE più vicino.

A seconda di dove si trovano i client, più GFE possono avviare connessioni HTTP(S) ai tuoi backend. I pacchetti inviati dai GFE hanno indirizzi IP di origine dallo stesso intervallo utilizzato dai probe del controllo di integrità: 35.191.0.0/16 e 130.211.0.0/22.

A seconda della configurazione del servizio di backend, il protocollo utilizzato da ciascun GFE per connettersi ai backend può essere HTTP, HTTPS o HTTP/2. Per le connessioni HTTP o HTTPS, la versione HTTP utilizzata è HTTP 1.1.

Il keepalive HTTP è abilitato per impostazione predefinita, come specificato nella specifica HTTP 1.1. I keepalive HTTP cercano di utilizzare in modo efficiente la stessa sessione TCP, ma non c'è alcuna garanzia. GFE utilizza un timeout keepalive HTTP client di 610 secondi e un valore di timeout keepalive backend predefinito di 600 secondi. Puoi aggiornare il timeout keepalive HTTP del client, ma il valore di timeout keepalive backend è fisso. Puoi configurare il timeout della richiesta/risposta impostando il timeout del servizio di backend. Sebbene siano strettamente correlati, un keepalive HTTP e un timeout di inattività TCP non sono la stessa cosa. Per ulteriori informazioni, consulta la sezione Timeout e nuovi tentativi.

Per garantire che il bilanciamento del carico del traffico sia uniforme, il bilanciatore del carico potrebbe chiudere in modo pulito una connessione TCP inviando un pacchetto FIN ACK dopo aver completato una risposta che includeva un'intestazione Connection: close, oppure potrebbe generare un frame HTTP/2 GOAWAY dopo aver completato una risposta. Questo comportamento non interferisce con le richieste o le risposte attive.

Il numero di connessioni HTTP e sessioni TCP varia a seconda del numero di GFE che si connettono, del numero di client che si connettono ai GFE, del protocollo ai backend e di dove viene eseguito il deployment dei backend.

Per ulteriori informazioni, consulta Come funzionano i bilanciatori del carico delle applicazioni esterni nella guida alle soluzioni: Ottimizzazioni della capacità delle applicazioni con il bilanciamento del carico globale.

Connessioni del bilanciatore del carico delle applicazioni esterno regionale

L'Application Load Balancer esterno regionale è un servizio gestito implementato sul proxy Envoy. Il bilanciatore del carico delle applicazioni esterno regionale utilizza una subnet condivisa denominata solo proxy per eseguire il provisioning di un insieme di indirizzi IP che Google utilizza per eseguire i proxy Envoy per tuo conto. Il flag --purpose per questa subnet solo proxy è impostato su REGIONAL_MANAGED_PROXY. Tutti i bilanciatori del carico basati su Envoy a livello di regione in una determinata rete e in una determinata regione condividono questa subnet.

I client utilizzano l'indirizzo IP e la porta del bilanciatore del carico per connettersi al bilanciatore del carico. Le richieste del client vengono indirizzate alla subnet solo proxy nella stessa regione del client. Il bilanciatore del carico termina le richieste dei client, quindi apre nuove connessioni dalla subnet solo proxy ai tuoi backend. Di conseguenza, i pacchetti inviati dal bilanciatore del carico hanno indirizzi IP di origine dalla subnet solo proxy.

A seconda della configurazione del servizio di backend, il protocollo utilizzato da Envoy tramite proxy per la connessione ai tuoi backend può essere HTTP, HTTPS o HTTP/2. Se HTTP o HTTPS, la versione HTTP è HTTP 1.1. keepalive HTTP è abilitato per impostazione predefinita, come specificato nella specifica HTTP 1.1. Il proxy Envoy imposta sia il timeout keepalive HTTP del client sia il timeout keepalive di backend su un valore predefinito di 600 secondi ciascuno. Puoi aggiornare il timeout keepalive HTTP del client, ma il valore di timeout keepalive di backend è fisso. Puoi configurare il timeout di richiesta/risposta impostando il timeout del servizio di backend. Per ulteriori informazioni, consulta Timeout e nuovi tentativi.

Comunicazioni del client con il bilanciatore del carico

  • I client possono comunicare con il bilanciatore del carico utilizzando il protocollo HTTP 1.1 o HTTP/2.
  • Quando si utilizza HTTPS, i client moderni utilizzano per impostazione predefinita HTTP/2. Ciò avviene sul client, non sul bilanciatore del carico HTTPS.
  • Non puoi disabilitare HTTP/2 apportando una modifica alla configurazione nel bilanciatore del carico. Tuttavia, puoi configurare alcuni client per l'utilizzo di HTTP 1.1 anziché HTTP/2. Ad esempio, con curl, usa il parametro --http1.1.
  • I bilanciatori del carico delle applicazioni esterni supportano la risposta HTTP/1.1 100 Continue.

Per l'elenco completo dei protocolli supportati dalle regole di forwarding del bilanciatore del carico delle applicazioni esterno in ciascuna modalità, vedi Funzionalità del bilanciatore del carico.

Indirizzi IP di origine per i pacchetti client

L'indirizzo IP di origine per i pacchetti, come visto dai backend, non è l'indirizzo IP esterno di Google Cloud del bilanciatore del carico. In altre parole, ci sono due connessioni TCP.

Per gli Application Load Balancer esterni globali:
  • Connessione 1, dal client originale al bilanciatore del carico (GFE):

    • Indirizzo IP di origine:il client originale (o l'indirizzo IP esterno se il client è protetto da NAT o da un proxy di inoltro).
    • Indirizzo IP di destinazione:l'indirizzo IP del bilanciatore del carico.
  • Connessione 2, dal bilanciatore del carico (GFE) alla VM o all'endpoint di backend:

    • Indirizzo IP di origine: un indirizzo IP in uno degli intervalli specificati nelle regole firewall.

    • Indirizzo IP di destinazione: l'indirizzo IP interno della VM di backend o del container nella rete VPC.

Per gli Application Load Balancer esterni regionali:
  • Connessione 1, dal client originale al bilanciatore del carico (subnet solo proxy):

    • Indirizzo IP di origine:il client originale (o l'indirizzo IP esterno se il client è protetto da NAT o da un proxy di inoltro).
    • Indirizzo IP di destinazione:l'indirizzo IP del bilanciatore del carico.
  • Connessione 2, dal bilanciatore del carico (subnet solo proxy) alla VM o all'endpoint di backend:

    • Indirizzo IP di origine: un indirizzo IP nella subnet solo proxy condiviso tra tutti i bilanciatori del carico basati su Envoy di cui è stato eseguito il deployment nella stessa regione e nella stessa rete del bilanciatore del carico.

    • Indirizzo IP di destinazione: l'indirizzo IP interno della VM di backend o del container nella rete VPC.

Percorso di ritorno

Per i bilanciatori del carico delle applicazioni esterni globali, Google Cloud utilizza route speciali non definite nella tua rete VPC per i controlli di integrità. Per maggiori informazioni, consulta Percorsi di ritorno del bilanciatore del carico.

Per gli Application Load Balancer esterni regionali, Google Cloud utilizza proxy Envoy open source per terminare le richieste dei client al bilanciatore del carico. Il bilanciatore del carico termina la sessione TCP e apre una nuova sessione TCP dalla subnet solo proxy della regione al tuo backend. Le route definite all'interno della tua rete VPC facilitano la comunicazione dai proxy Envoy ai tuoi backend e dai tuoi backend ai proxy Envoy.

Porte aperte

I GFE hanno diverse porte aperte per supportare altri servizi Google in esecuzione sulla stessa architettura. Quando esegui una scansione delle porte, potresti visualizzare altre porte aperte per altri servizi Google in esecuzione sui GFE.

Entrambi i bilanciatori del carico basati su GFE (Application Load Balancer esterno globale e bilanciatori del carico delle applicazioni classici) mostrano sempre le porte 80 e 443 come aperte (insieme a qualsiasi altra porta configurata nelle regole di forwarding del bilanciatore del carico). Tuttavia, se non hai configurato una regola di forwarding per la porta 80 o per la porta 443, le connessioni inviate a queste porte vengono rifiutate. Al contrario, i bilanciatori del carico delle applicazioni esterni regionali vengono implementati utilizzando i proxy Envoy e non mostrano porte extra aperte durante una scansione.

L'esecuzione di una scansione delle porte sull'indirizzo IP di un bilanciatore del carico basato su GFE non è utile dal punto di vista di controllo per i seguenti motivi:

  • Una scansione delle porte (ad esempio con nmap) in genere non prevede pacchetti di risposta o un pacchetto TCP RST durante l'esecuzione del probe SYN TCP. I GFE invieranno pacchetti SYN-ACK in risposta ai probe SYN solo per le porte su cui è stata configurata una regola di forwarding. I GFE inviano ai tuoi backend solo in risposta ai pacchetti inviati all'indirizzo IP del bilanciatore del carico e alla porta di destinazione configurata per la relativa regola di forwarding. I pacchetti che vengono inviati a una porta o a un indirizzo IP diverso non vengono inviati ai tuoi backend.

    I GFE implementano funzionalità di sicurezza come Google Cloud Armor. Con Google Cloud Armor Standard, i GFE forniscono protezione sempre attiva da attacchi DDoS volumetrici e basati su protocollo e flood SYN. Questa protezione è disponibile anche se non hai configurato esplicitamente Google Cloud Armor. Gli addebiti verranno effettuati solo se configuri i criteri di sicurezza o se ti registri a Managed Protection Plus.

  • Qualsiasi GFE del parco risorse Google può rispondere ai pacchetti inviati all'indirizzo IP del bilanciatore del carico. Tuttavia, l'analisi di una combinazione di indirizzo IP e porta di destinazione di un bilanciatore del carico esamina un solo GFE per ogni connessione TCP. L'indirizzo IP del bilanciatore del carico non è assegnato a un singolo dispositivo o sistema. Pertanto, l'analisi dell'indirizzo IP di un bilanciatore del carico basato su GFE non analizza tutti i GFE nel parco risorse di Google.

Tenendo conto di questo, di seguito sono riportati alcuni modi più efficaci per verificare la sicurezza delle istanze di backend:

  • Un revisore della sicurezza deve ispezionare la configurazione delle regole di forwarding per la configurazione del bilanciatore del carico. Le regole di forwarding definiscono la porta di destinazione per la quale il bilanciatore del carico accetta i pacchetti e li inoltra ai backend. Per i bilanciatori del carico basati su GFE, ogni regola di forwarding esterno può fare riferimento solo a una singola porta TCP di destinazione. Per un bilanciatore del carico che utilizza la porta TCP 443, viene utilizzata la porta UDP 443 quando viene eseguito l'upgrade della connessione a QUIC (HTTP/3).

  • Un revisore della sicurezza deve ispezionare la configurazione delle regole firewall applicabile alle VM di backend. Le regole firewall che hai impostato bloccano il traffico dai GFE alle VM di backend, ma non bloccano il traffico in entrata verso i GFE. Per le best practice, consulta la sezione sulle regole firewall.

terminazione TLS

La seguente tabella riassume come viene gestita la terminazione TLS da Application Load Balancer esterni in ciascuna modalità.

Modalità bilanciatore del carico terminazione TLS
Bilanciatore del carico delle applicazioni esterno globale Il protocollo TLS viene terminato su un GFE, che può trovarsi in qualsiasi parte del mondo.
Bilanciatore del carico delle applicazioni classico Il protocollo TLS viene terminato su un GFE, che potrebbe trovarsi in qualsiasi parte del mondo.
Bilanciatore del carico delle applicazioni esterno regionale Il protocollo TLS viene terminato sui proxy Envoy situati in una subnet solo proxy in una regione scelta dall'utente. Utilizza questa modalità del bilanciatore del carico se hai bisogno di controllo geografico sulla regione in cui viene terminato TLS.

Timeout e nuovi tentativi

I bilanciatori del carico delle applicazioni esterni supportano i seguenti tipi di timeout:

Tipo di timeout e descrizione Valori predefiniti Supporta valori personalizzati
Globale Versione classica A livello di regione
Timeout del servizio di backend1

Un timeout di richiesta e risposta. Rappresenta il tempo massimo che può trascorrere da quando il bilanciatore del carico invia il primo byte della richiesta HTTP al backend a quando il backend restituisce l'ultimo byte della risposta HTTP. Se l'intera risposta HTTP non è stata restituita al bilanciatore del carico entro il timeout della richiesta o della risposta, i restanti dati di risposta vengono eliminati.

Per WebSocket utilizzati con bilanciatori del carico delle applicazioni classici, la durata massima di WebSocket, attivo o inattivo.

  • Per i NEG serverless su un servizio di backend: 60 minuti
  • Per tutti gli altri tipi di backend su un servizio di backend: 30 secondi
  • Per i bucket di backend: 24 ore (86.400 secondi)
2 2
Timeout keepalive HTTP client
Il periodo di tempo massimo durante il quale la connessione TCP tra un client e il proxy del bilanciatore del carico può essere inattiva. (La stessa connessione TCP potrebbe essere utilizzata per più richieste HTTP).
  • Per gli Application Load Balancer esterni globali e per gli Application Load Balancer classici, il proxy del bilanciatore del carico è un GFE di primo livello.
  • Per gli Application Load Balancer esterni regionali, il proxy del bilanciatore del carico è il software Envoy.
  • Per un Application Load Balancer esterno globale e un Application Load Balancer classico: 610 secondi
  • Per un bilanciatore del carico delle applicazioni esterno regionale: 600 secondi
Timeout keepalive HTTP di backend
Il periodo di tempo massimo durante il quale la connessione TCP tra il proxy del bilanciatore del carico e un backend può essere inattiva. (La stessa connessione TCP può essere utilizzata per più richieste HTTP).
  • Per gli Application Load Balancer esterni globali e per gli Application Load Balancer classici, il proxy del bilanciatore del carico è un GFE di secondo livello.
  • Per gli Application Load Balancer esterni regionali, il proxy del bilanciatore del carico è il software Envoy.
  • Per i servizi di backend: 10 minuti (600 secondi)
  • Per i bucket di backend: 6 minuti (360 secondi)
Timeout di inattività della sessione QUIC
Il periodo di tempo massimo durante il quale una sessione QUIC può rimanere inattiva tra il client (downstream) e il GFE di un Application Load Balancer esterno globale o di un Application Load Balancer classico.

Per bilanciatori del carico delle applicazioni esterni globali e Application Load Balancer classici:

Il timeout di inattività della sessione QUIC è il minimo del timeout di inattività del client o del timeout di inattività di GFE (300 secondi).

Il timeout di inattività del GFE è fisso su 300 secondi. È possibile configurare il timeout di inattività del client.

1 Non configurabile per backend di NEG serverless. Non configurabile per i bucket di backend.

2 Il supporto della configurazione non è applicabile a WebSocket.

Timeout del servizio di backend

Il timeout del servizio di backend configurabile rappresenta la quantità massima di tempo che il bilanciatore del carico attende prima che il backend elabori una richiesta HTTP e restituisca la risposta HTTP corrispondente. Ad eccezione dei NEG serverless, il valore predefinito per il timeout del servizio di backend è 30 secondi.

Ad esempio, se vuoi scaricare un file da 500 MB e il valore del timeout del servizio di backend è di 90 secondi, il bilanciatore del carico prevede che il backend consegni l'intero file da 500 MB entro 90 secondi. È possibile configurare il timeout del servizio di backend in modo che non sia sufficiente affinché il backend invii la sua risposta HTTP completa. In questa situazione, se il bilanciatore del carico ha ricevuto almeno le intestazioni di risposta HTTP dal backend, restituisce le intestazioni della risposta complete e la maggior parte del corpo della risposta possibile entro il timeout del servizio di backend.

Dovresti impostare il timeout del servizio di backend sul periodo di tempo più lungo previsto dal backend per elaborare una risposta HTTP. Dovresti aumentare il timeout del servizio di backend se il software in esecuzione sul tuo backend ha bisogno di più tempo per elaborare una richiesta HTTP e restituire l'intera risposta. Ad esempio, dovresti aumentare il timeout se vedi risposte HTTP 408 con jsonPayload.statusDetail client_timed_out.

Il timeout del servizio di backend accetta valori compresi tra 1 e 2,147,483,647 secondi. Tuttavia, i valori più grandi non sono opzioni di configurazione pratiche. Google Cloud non garantisce che una connessione TCP sottostante possa rimanere aperta per l'intero valore del timeout del servizio di backend. I sistemi client devono implementare la logica dei nuovi tentativi invece di affidarsi a una connessione TCP per essere aperta per lunghi periodi di tempo.

Note aggiuntive

  • I timeout della connessione WebSocket dipendono dal tipo di bilanciatore del carico:

    • Per gli Application Load Balancer classici, il timeout per una connessione WebSocket dipende dal timeout del servizio di backend configurabile del bilanciatore del carico, che per impostazione predefinita è di 30 secondi. Questo timeout si applica alle connessioni WebSocket indipendentemente dal fatto che siano in uso.
    • Per gli Application Load Balancer esterni globali e per le Application Load Balancer esterni regionali, le connessioni WebSocket attive non seguono il timeout del servizio di backend. Le connessioni WebSocket inattive vengono chiuse dopo il timeout del servizio di backend.
    • Inoltre, le connessioni WebSocket utilizzate dagli Application Load Balancer esterni globali e dagli Application Load Balancer classici vengono chiuse automaticamente dopo 24 ore. Questo limite di 24 ore non è personalizzabile e si verifica a prescindere dal fatto che le connessioni siano in uso o che il valore di timeout del servizio di backend sia impostato su un valore superiore a 86.400 secondi (24 ore).
  • Per un bilanciatore del carico delle applicazioni esterno globale o un bilanciatore del carico delle applicazioni classico, i valori di timeout del servizio di backend superiori a un giorno (86.400 secondi) non sono consigliati perché Google Cloud riavvia periodicamente Google Front End per aggiornamenti del software e altre operazioni di manutenzione di routine. Il valore di timeout del servizio di backend non ritarda le attività di manutenzione di Google. Più lungo è il valore di timeout del servizio di backend, più è probabile che Google termini le connessioni TCP per la manutenzione.

  • Per un bilanciatore del carico delle applicazioni esterno regionale, Google Cloud riavvia o modifica periodicamente il numero di attività software Envoy utilizzate. Più lungo è il valore di timeout del servizio di backend, più è probabile che l'attività Envoy venga riavviata o sostituita con la fine delle connessioni TCP.

I bilanciatori del carico delle applicazioni esterni regionali supportano un parametro routeActions.timeout della mappa URL, che può sostituire il timeout del servizio di backend. Se routeActions.timeout viene omesso, viene utilizzato il valore del timeout del servizio di backend. Se viene specificato routeActions.timeout, il timeout del servizio di backend viene ignorato e il valore routeActions.timeout viene invece utilizzato come timeout della richiesta e della risposta.

Per configurare il timeout del servizio di backend, utilizza uno dei seguenti metodi:

  • Console Google Cloud: modifica il campo Timeout del servizio di backend del bilanciatore del carico.
  • Google Cloud CLI: usa il comando gcloud compute backend-services update per modificare il parametro --timeout della risorsa del servizio di backend.
  • API: per un bilanciatore del carico delle applicazioni esterno globale o un bilanciatore del carico delle applicazioni classico, modifica il parametro timeoutSec per la risorsa backendServices globale.
  • API: per un bilanciatore del carico delle applicazioni esterno regionale, modifica il parametro timeoutSec per la risorsa regionBackendServices.

Timeout keepalive HTTP client

Il timeout keepalive HTTP del client rappresenta il tempo massimo di inattività di una connessione TCP tra il client (downstream) e uno dei seguenti tipi di proxy:

  • Per un bilanciatore del carico delle applicazioni esterno globale o un Application Load Balancer classico: un Google Front End (GFE) di primo livello
  • Per un bilanciatore del carico delle applicazioni esterno regionale: un proxy Envoy

Un timeout keepalive HTTP rappresenta il timeout di inattività TCP per le connessioni TCP sottostanti. Il timeout keepalive HTTP del client non si applica ai WebSocket.

  • Per un bilanciatore del carico delle applicazioni esterno globale, il valore predefinito è 610 secondi. Puoi configurare il timeout keepalive HTTP del client con un valore compreso tra 5 e 1200 secondi.
  • Per un bilanciatore del carico delle applicazioni classico, il timeout keepalive HTTP del client è fisso su 610 secondi.
  • Per un bilanciatore del carico delle applicazioni esterno regionale, il timeout keepalive HTTP del client è fisso su 600 secondi.

Per configurare il parametro di timeout keepalive, utilizza uno dei seguenti metodi:

Il timeout keepalive HTTP del client del bilanciatore del carico deve essere maggiore del timeout keepalive HTTP (TCP inattivo) utilizzato da client o proxy downstream. Se un client downstream ha un timeout keepalive HTTP maggiore (TCP inattivo) rispetto al timeout keepalive HTTP del client del bilanciatore del carico, è possibile che si verifichi una racecondition. Dal punto di vista di un client downstream, una connessione TCP stabilita può rimanere inattiva per più tempo di quanto consentito dal bilanciatore del carico. Ciò significa che il client downstream può inviare pacchetti dopo che il bilanciatore del carico considera la connessione TCP chiusa. In questo caso, il bilanciatore del carico risponde con un pacchetto di reimpostazione TCP (RST).

Timeout keepalive HTTP di backend

I bilanciatori del carico delle applicazioni esterni sono proxy che utilizzano almeno due connessioni TCP:

  • Per un bilanciatore del carico delle applicazioni esterno globale o un bilanciatore del carico delle applicazioni classico, esiste una prima connessione TCP tra il client (downstream) e un GFE di primo livello. I GFE di primo livello si connettono ai GFE di secondo livello, mentre i GFE di secondo livello aprono una seconda connessione TCP con i tuoi backend.

  • Per un bilanciatore del carico delle applicazioni esterno regionale, esiste una prima connessione TCP tra il client (downstream) e un proxy Envoy. Il proxy Envoy apre una seconda connessione TCP con i tuoi backend.

Le connessioni TCP secondarie del bilanciatore del carico potrebbero non essere chiuse dopo ogni richiesta; possono rimanere aperte per gestire più richieste e risposte HTTP. Il timeout keepalive HTTP di backend definisce il timeout di inattività TCP tra il bilanciatore del carico e i tuoi backend. Il timeout keepalive HTTP di backend non si applica a WebSocket.

Il timeout keepalive del backend è fisso su 10 minuti (600 secondi) e non può essere modificato. Il timeout keepalive del backend del bilanciatore del carico deve essere inferiore al timeout keepalive utilizzato dal software in esecuzione sui tuoi backend. In questo modo si evita una race condition in cui il sistema operativo dei backend potrebbe chiudere le connessioni TCP con una reimpostazione TCP (RST). Poiché il timeout keepalive del backend per il bilanciatore del carico non è configurabile, devi configurare il software di backend in modo che il valore di timeout keepalive HTTP (TCP inattivo) sia maggiore di 600 secondi.

La seguente tabella elenca le modifiche necessarie per modificare i valori di timeout keepalive per il software del server web comune.

Software server web Parametro Impostazione predefinita Impostazione consigliata
Apache KeepAliveTimeout KeepAliveTimeout 5 KeepAliveTimeout 620
nginx keepalive_timeout keepalive_timeout 75s; keepalive_timeout 620s;

Timeout di inattività della sessione QUIC

Il timeout di inattività della sessione QUIC rappresenta il periodo massimo di inattività di una sessione QUIC tra il client e il GFE di un Application Load Balancer esterno globale o di un Application Load Balancer classico.

Il valore del timeout di inattività della sessione QUIC è definito come il minimo del timeout di inattività del client o del timeout di inattività di GFE (300 secondi). Il timeout di inattività del GFE è fisso su 300 secondi. È possibile configurare il timeout di inattività del client.

Nuovi tentativi

Il supporto della logica dei nuovi tentativi dipende dalla modalità dell'Application Load Balancer esterno.

Modalità bilanciatore del carico Logica dei nuovi tentativi
Bilanciatore del carico delle applicazioni esterno globale

Configurabile utilizzando un criterio di nuovo tentativo nella mappa URL. Il numero predefinito di nuovi tentativi (numRetries) è 1. Il numero massimo di nuovi tentativi che è possibile configurare utilizzando il criterio per i nuovi tentativi è 25. Il timeout predefinito per ogni tentativo (perTryTimeout) è di 30 secondi con un valore massimo configurabile di 24 ore per perTryTimeout.

Senza un criterio per i tentativi, le richieste non riuscite senza un corpo HTTP (ad esempio, richieste GET) che generano risposte HTTP 502, 503 o 504 (retryConditions=["gateway-error"]) vengono tentate una volta.

Le richieste HTTP POST non vengono tentate di nuovo.

Le richieste ripetute generano solo una voce di log per la risposta finale.

Bilanciatore del carico delle applicazioni classico

Il criterio relativo ai nuovi tentativi non può essere modificato per i nuovi tentativi di connessione.

Le richieste HTTP POST non vengono tentate di nuovo.

Le richieste HTTP GET vengono sempre tentate una volta, purché l'80% o più dei backend siano integri. Se in un gruppo è presente una singola istanza di backend e la connessione a quell'istanza non riesce, la percentuale di istanze di backend in stato non integro è pari al 100%, quindi il GFE non riprova a effettuare la richiesta.

Il bilanciatore del carico riprova a una richiesta GET non riuscita se la prima richiesta non è andata a buon fine prima di ricevere le intestazioni di risposta dall'istanza di backend.

Le richieste ripetute generano solo una voce di log per la risposta finale. Per maggiori informazioni, consulta Logging e monitoraggio del bilanciatore del carico delle applicazioni esterno.

Se le richieste non vanno a buon fine, il bilanciatore del carico sintetizza una risposta 502 HTTP.

Bilanciatore del carico delle applicazioni esterno regionale

Configurabile utilizzando un criterio di nuovo tentativo nella mappa URL. Il numero predefinito di nuovi tentativi (numRetries) è 1. Il numero massimo di nuovi tentativi che è possibile configurare utilizzando il criterio per i nuovi tentativi è 25. Il timeout predefinito per ogni tentativo (perTryTimeout) è di 30 secondi con un valore massimo configurabile di 24 ore per perTryTimeout.

Senza un criterio per i tentativi, le richieste non riuscite senza un corpo HTTP (ad esempio richieste GET) che generano risposte HTTP 502, 503 o 504 vengono tentate una volta.

Le richieste HTTP POST non vengono tentate di nuovo.

Le richieste ripetute generano solo una voce di log per la risposta finale.

Il protocollo WebSocket è supportato con GKE Ingress.

Gestione di richieste e risposte illegali

Il bilanciatore del carico impedisce alle richieste e alle risposte del backend di raggiungere rispettivamente il backend o il client per una serie di motivi. Alcuni motivi sono strettamente necessari per la conformità con HTTP/1.1, mentre altri per evitare la trasmissione di dati imprevisti da o verso i backend. Nessuno dei controlli può essere disattivato.

Il bilanciatore del carico blocca quanto segue per la conformità con HTTP/1.1:

  • Non può analizzare la prima riga della richiesta.
  • In un'intestazione manca il delimitatore :.
  • Le intestazioni o la prima riga contengono caratteri non validi.
  • La lunghezza dei contenuti non è un numero valido oppure sono presenti più intestazioni di lunghezza.
  • Esistono più chiavi di codifica di trasferimento o valori di codifica di trasferimento non riconosciuti.
  • Il corpo non è suddiviso in blocchi e non è specificata la lunghezza dei contenuti.
  • I pezzi del corpo non sono analizzabili. Questo è l'unico caso in cui alcuni dati raggiungeno il backend. Il bilanciatore del carico chiude le connessioni al client e al backend quando riceve un blocco non analizzabile.

Il bilanciatore del carico blocca la richiesta se una delle seguenti condizioni è vera:

Il bilanciatore del carico blocca la risposta del backend se una delle seguenti condizioni è vera:

  • La dimensione totale delle intestazioni delle risposte supera il limite per la dimensione massima delle intestazioni delle risposte per gli Application Load Balancer esterni.
  • La versione HTTP è sconosciuta.

Distribuzione del traffico

Quando aggiungi un gruppo di istanza di backend o un NEG a un servizio di backend, devi specificare una modalità di bilanciamento, che definisce un metodo per misurare il carico di backend e una capacità target. I bilanciatori del carico delle applicazioni esterni supportano due modalità di bilanciamento:

  • RATE, ad esempio gruppi di istanze o NEG, è il numero massimo target di richieste (query) al secondo (RPS, QPS). Il valore massimo di RPS/QPS target può essere superato se tutti i backend hanno raggiunto o superato la capacità.

  • UTILIZATION è l'utilizzo backend delle VM in un gruppo di istanze.

La modalità di distribuzione del traffico tra i backend dipende dalla modalità del bilanciatore del carico.

Bilanciatore del carico delle applicazioni esterno globale

Prima che un Google Front End (GFE) invii richieste alle istanze di backend, il GFE stima quali istanze di backend hanno la capacità di ricevere richieste. Questa stima della capacità viene eseguita in modo proattivo, non contemporaneamente all'arrivo delle richieste. I GFE ricevono informazioni periodiche sulla capacità disponibile e distribuiscono le richieste in entrata di conseguenza.

Il significato di capacità dipende in parte dalla modalità di bilanciamento. Per la modalità RATE, è relativamente semplice: un GFE determina esattamente quante richieste può assegnare al secondo. Il bilanciamento del carico basato su UTILIZATION è più complesso: il bilanciatore del carico controlla l'utilizzo attuale delle istanze, quindi stima un carico di query che ogni istanza è in grado di gestire. Questa stima cambia nel tempo man mano che l'utilizzo delle istanze e i modelli di traffico cambiano.

Entrambi i fattori, la stima della capacità e l'assegnazione proattiva, influiscono sulla distribuzione tra le istanze. Cloud Load Balancing si comporta quindi in modo diverso da un semplice bilanciatore del carico round-robin che suddivide le richieste esattamente 50:50 tra due istanze. Il bilanciamento del carico di Google Cloud tenta invece di ottimizzare la selezione dell'istanza di backend per ogni richiesta.

Per il bilanciatore del carico delle applicazioni esterno globale, il bilanciamento del carico è a due livelli. La modalità di bilanciamento determina la ponderazione o la frazione di traffico da inviare a ciascun backend (gruppo di istanze o NEG). Quindi, il criterio di bilanciamento del carico (LocalityLbPolicy) determina in che modo il traffico viene distribuito alle istanze o agli endpoint all'interno del gruppo. Per ulteriori informazioni, consulta Criteri di località del bilanciamento del carico (documentazione relativa all'API del servizio di backend).

Per l'Application Load Balancer classico, la modalità di bilanciamento viene utilizzata per selezionare il backend più favorevole (gruppo di istanze o NEG). Il traffico viene quindi distribuito in modo "round robin" tra istanze o endpoint all'interno del backend.

Come vengono distribuite le richieste

I bilanciatori del carico delle applicazioni esterni basati su GFE utilizzano il seguente processo per distribuire le richieste in arrivo:

  1. Dal cliente al GFE di primo livello. I router perimetrali pubblicizzano l'indirizzo IP esterno della regola di forwarding ai confini della rete Google. Ogni annuncio elenca un hop successivo a un sistema di bilanciamento del carico di livello 3/4 (Maglev). I sistemi Maglev instradano il traffico a un Google Front End (GFE) di primo livello.
    • Quando utilizzi il livello Premium, Google pubblicizza l'indirizzo IP del tuo bilanciatore del carico da tutti i punti di presenza, in tutto il mondo. Ogni indirizzo IP del bilanciatore del carico è anycast globale.
    • Quando utilizzi il livello Standard, Google pubblicizza l'indirizzo IP del bilanciatore del carico dai punti di presenza associati alla regione della regola di forwarding. Il bilanciatore del carico utilizza un indirizzo IP esterno a livello di regione. L'utilizzo di una regola di forwarding del livello Standard consente di limitare l'accesso ai backend NEG di gruppi di istanze e di zona nella stessa regione della regola di forwarding del bilanciatore del carico.
  2. Dal GFE di primo livello al GFE di secondo livello. Il GFE di primo livello termina il protocollo TLS se necessario, quindi instrada il traffico ai GFE di secondo livello secondo il seguente processo:
    • I GFE di primo livello analizzano la mappa URL e selezionano un servizio o un bucket di backend.
    • Per i servizi di backend con NEG internet, i GFE del primo livello selezionano un gateway di forwarding esterno di secondo livello collocato insieme al GFE del primo livello. Il gateway di forwarding invia richieste all'endpoint NEG internet. Il processo di distribuzione della richiesta per i NEG internet è terminato.
    • Per i servizi di backend con NEG serverless, NEG Private Service Connect (PSC) e bucket di backend, i GFE di primo livello selezionano un GFE di secondo livello nella regione corrispondente alla regione del NEG o del bucket. Per i bucket Cloud Storage multiregionali, i GFE di primo livello selezionano i GFE di secondo livello in una regione il più vicina possibile ai GFE di primo livello (definiti dal tempo di round trip della rete).
    • Per i servizi di backend con gruppi di istanze, NEG di zona con GCE_VM_IP_PORT endpoint e NEG ibridi, il sistema di gestione della capacità di Google informa i GFE di primo livello della capacità utilizzata e configurata per ogni backend. La capacità configurata per un backend è definita dalla modalità di bilanciamento, dalla capacità target della modalità di bilanciamento e dallo scaler della capacità.
      • Livello Standard: i GFE di primo livello selezionano un GFE di secondo livello nella regione contenente i backend.
      • Livello Premium: i GFE di primo livello selezionano i GFE di secondo livello da un insieme di regioni applicabili. Le regioni applicabili sono tutte le regioni in cui sono stati configurati i backend, escluse quelle con backend configurati senza capacità. I GFE di primo livello selezionano il GFE di secondo livello più vicino in una regione applicabile (definita dal tempo di round trip della rete). Se i backend sono configurati in due o più regioni, i GFE di primo livello possono inviare le richieste ad altre regioni applicabili se una regione di prima scelta è piena. È possibile lo scomposizione in altre regioni quando tutti i backend nella regione di prima scelta hanno raggiunto la capacità.
  3. I GFE di secondo livello selezionano i backend. I GFE di secondo livello si trovano in zone di una regione. Per selezionare un backend, utilizza la procedura seguente:
    • Per i servizi di backend con NEG serverless, Private Service Connect e i bucket di backend, i GFE di secondo livello inoltrano le richieste ai sistemi di produzione di Google. Il processo di distribuzione delle richieste per questi backend termina qui.
    • Per i servizi di backend con gruppi di istanze, NEG di zona con endpoint GCE_VM_IP_PORT e NEG ibridi, i sistemi dei probe di controllo di integrità di Google informano i GFE di secondo livello dello stato del controllo di integrità delle istanze o degli endpoint di backend.

      Solo livello Premium: se il GFE di secondo livello non ha istanze o endpoint di backend integri nella propria regione, potrebbe inviare richieste a un altro GFE di secondo livello in un'altra regione applicabile con backend configurati. Lo sversamento tra GFE di secondo livello in regioni diverse non esaurisce tutte le possibili combinazioni da regione a regione. Se devi indirizzare il traffico dai backend in una determinata regione, anziché configurare i backend in modo che non superino i controlli di integrità, devi impostare lo scaler della capacità del backend su zero in modo che il GFE di primo livello escluda la regione durante il passaggio precedente.

    Il GFE di secondo livello indirizza quindi le richieste alle istanze di backend o agli endpoint in zone all'interno della sua regione, come illustrato nel passaggio successivo.

  4. Il GFE di secondo livello seleziona una zona. Per impostazione predefinita, i GFE di secondo livello utilizzano l'algoritmo WATERFALL_BY_REGION, laddove ogni GFE di secondo livello preferisce selezionare le istanze o gli endpoint di backend nella stessa zona della zona che contiene il GFE di secondo livello. Poiché WATERFALL_BY_REGION riduce al minimo il traffico tra le zone, a basse frequenze di richieste, ogni GFE di secondo livello potrebbe inviare richieste esclusivamente ai backend nella stessa zona del GFE di secondo livello.

    Solo per i bilanciatori del carico delle applicazioni esterni globali, i GFE di secondo livello possono essere configurati per l'utilizzo di uno dei seguenti algoritmi alternativi utilizzando serviceLbPolicy:

    • SPRAY_TO_REGION: i GFE di secondo livello non preferiscono selezionare istanze o endpoint di backend nella stessa zona del GFE di secondo livello. I GFE di secondo livello tentano di distribuire il traffico a tutte le istanze o a tutti gli endpoint di backend in tutte le zone della regione. Ciò può portare a una distribuzione più uniforme del carico, a scapito dell'aumento del traffico tra le zone.
    • WATERFALL_BY_ZONE: i GFE di secondo livello preferiscono fortemente la selezione di istanze o endpoint di backend nella stessa zona del GFE di secondo livello. I GFE di secondo livello indirizzano le richieste ai backend in zone diverse solo dopo che tutti i backend nella zona attuale hanno raggiunto le capacità configurate.
  5. Il GFE di secondo livello seleziona le istanze o gli endpoint all'interno della zona. Per impostazione predefinita, un GFE di secondo livello distribuisce le richieste tra i backend in modo round robin. Solo per gli Application Load Balancer esterni globali, puoi modificare questa impostazione utilizzando un criterio di località del bilanciamento del carico (localityLbPolicy). Il criterio di località del bilanciamento del carico si applica solo ai backend all'interno della zona selezionata discussa nel passaggio precedente.

Bilanciatore del carico delle applicazioni esterno regionale

Per gli Application Load Balancer esterni regionali, la distribuzione del traffico si basa sulla modalità di bilanciamento del carico e sul criterio di località del bilanciamento del carico.

La modalità di bilanciamento determina la ponderazione e la frazione di traffico da inviare a ciascun gruppo (gruppo di istanze o NEG). Il criterio di località del bilanciamento del carico (LocalityLbPolicy) determina il modo in cui i backend all'interno del gruppo vengono bilanciati.

Quando un servizio di backend riceve traffico, indirizza innanzitutto il traffico a un backend (gruppo di istanze o NEG) in base alla modalità di bilanciamento del backend. Dopo aver selezionato un backend, il traffico viene distribuito tra istanze o endpoint in quel gruppo di backend in base al criterio di località del bilanciamento del carico.

Per ulteriori informazioni, consulta le seguenti risorse:

Affinità sessione

L'affinità sessione tenta di inviare richieste da un determinato client allo stesso backend finché il backend è integro e dispone della capacità, in base alla modalità di bilanciamento configurata.

Quando utilizzi l'affinità sessione, ti consigliamo di utilizzare la modalità di bilanciamento di RATE anziché UTILIZATION. L'affinità sessione funziona al meglio se imposti la modalità di bilanciamento su richieste al secondo (RPS).

I bilanciatori del carico delle applicazioni esterni offrono i seguenti tipi di affinità sessione:

La seguente tabella riassume le opzioni di affinità sessione supportate dai bilanciatori del carico delle applicazioni esterni in ciascuna modalità:

Modalità bilanciatore del carico Opzioni di affinità sessione
  Nessuna IP client Cookie generato Campo intestazione Cookie HTTP
Bilanciatore del carico delle applicazioni esterno globale
Bilanciatore del carico delle applicazioni classico
Bilanciatore del carico delle applicazioni esterno regionale

Supporto HTTP/2

HTTP/2 è una revisione importante del protocollo HTTP/1. HTTP/2 è supportato per le connessioni tra i client e l'Application Load Balancer esterno, nonché per le connessioni tra il bilanciatore del carico e i suoi backend.

Il bilanciatore del carico negozia automaticamente HTTP/2 con i client nell'ambito dell'handshake TLS utilizzando l'estensione TLS ALPN. Anche se un bilanciatore del carico è configurato per utilizzare HTTPS, i client moderni utilizzano per impostazione predefinita HTTP/2. Ciò viene controllato sul lato client, non sul bilanciatore del carico.

Se un client non supporta HTTP/2 e il bilanciatore del carico è configurato per utilizzare HTTP/2 tra il bilanciatore del carico e le istanze di backend, potrebbe comunque negoziare una connessione HTTPS o accettare richieste HTTP non sicure. Queste richieste HTTPS o HTTP vengono poi trasformate dal bilanciatore del carico per inviare le richieste tramite HTTP/2 alle istanze di backend.

Per utilizzare HTTP/2, devi abilitare TLS sui tuoi backend. Per maggiori informazioni, consulta Crittografia dal bilanciatore del carico ai backend.

HTTP/2 max stream simultanei

L'impostazione HTTP/2 SETTINGS_MAX_CONCURRENT_STREAMS descrive il numero massimo di flussi accettati da un endpoint, avviati dal peer. Il valore pubblicizzato da un client HTTP/2 in un bilanciatore del carico Google Cloud è effettivamente privo di significato perché il bilanciatore del carico non avvia flussi verso il client.

Nei casi in cui il bilanciatore del carico utilizzi HTTP/2 per comunicare con un server in esecuzione su una VM, rispetta il valore SETTINGS_MAX_CONCURRENT_STREAMS pubblicizzato dal server. Se viene pubblicizzato un valore pari a zero, il bilanciatore del carico non può inoltrare richieste al server e questo potrebbe causare errori.

Limitazioni HTTP/2

  • HTTP/2 tra il bilanciatore del carico e l'istanza può richiedere molte più connessioni TCP all'istanza rispetto a HTTP(S). Il pool di connessioni, un'ottimizzazione che riduce il numero di queste connessioni con HTTP(S), non è attualmente disponibile con HTTP/2. Di conseguenza, potresti notare latenze di backend elevate perché le connessioni di backend vengono effettuate con maggiore frequenza.
  • HTTP/2 tra il bilanciatore del carico e il backend non supporta l'esecuzione del protocollo WebSocket su un singolo flusso di una connessione HTTP/2 (RFC8441).
  • HTTP/2 tra il bilanciatore del carico e il backend non supporta il push del server.
  • La percentuale di errori gRPC e il volume delle richieste non sono visibili nell'API Google Cloud o nella console Google Cloud. Se l'endpoint gRPC restituisce un errore, i log del bilanciatore del carico e i dati di monitoraggio segnalano il codice di risposta HTTP OK 200.

Supporto HTTP/3

HTTP/3 è un protocollo internet di nuova generazione. Si basa su IETF QUIC, un protocollo sviluppato a partire dal protocollo QUIC di Google originale. HTTP/3 è supportato tra l'Application Load Balancer esterno, Cloud CDN e i client.

In particolare:

  • IETF QUIC è un protocollo del livello di trasporto che offre controllo della congestione e affidabilità in modo simile a TCP, utilizza TLS 1.3 per la sicurezza e migliora le prestazioni.
  • HTTP/3 è un livello di applicazione basato su QUIC di IETF e si basa su QUIC per gestire il multiplexing, il controllo della congestione, il rilevamento delle perdite e la ritrasmissione.
  • HTTP/3 consente un avvio più rapido della connessione client, elimina il blocco head-of-line nei flussi multiplex e supporta la migrazione delle connessioni quando l'indirizzo IP di un client cambia.
  • HTTP/3 è supportato per le connessioni tra i client e il bilanciatore del carico, non per le connessioni tra il bilanciatore del carico e i relativi backend.
  • Le connessioni HTTP/3 utilizzano l'algoritmo per il controllo delle congestioni BBR.

HTTP/3 sul bilanciatore del carico può migliorare i tempi di caricamento delle pagine web, il rebuffering del video e la velocità effettiva per le connessioni con latenza più elevata.

La seguente tabella specifica il supporto HTTP/3 per Application Load Balancer esterni in ogni modalità.

Modalità bilanciatore del carico Supporto HTTP/3
Bilanciatore del carico delle applicazioni esterno globale (sempre del livello Premium)
Bilanciatore del carico delle applicazioni classico nel livello Premium
Bilanciatore del carico delle applicazioni classico nel livello Standard
Bilanciatore del carico delle applicazioni esterno regionale (livello Premium o Standard)

Modalità di negoziazione di HTTP/3

Se HTTP/3 è abilitato, il bilanciatore del carico pubblicizza questo supporto ai client, consentendo a quelli che supportano HTTP/3 di tentare di stabilire connessioni HTTP/3 con il bilanciatore del carico HTTPS.

  • I client implementati correttamente ricorrono sempre a HTTPS o HTTP/2 quando non possono stabilire una connessione HTTP/3.
  • I client che supportano HTTP/3 utilizzano la loro conoscenza precedente memorizzata nella cache del supporto di HTTP/3 per evitare round trip inutili in futuro.
  • A causa di questo fallback, l'abilitazione o la disabilitazione di HTTP/3 nel bilanciatore del carico non interrompe la capacità del bilanciatore del carico di connettersi ai client.

Il supporto è pubblicizzato nell'intestazione della risposta HTTP Alt-Svc. Quando HTTP/3 è abilitato, le risposte dal bilanciatore del carico includono il seguente valore di intestazione alt-svc:

alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000"

Se HTTP/3 è stato impostato esplicitamente su DISABLE, le risposte non includono un'intestazione della risposta alt-svc.

Se HTTP/3 è abilitato sul bilanciatore del carico HTTPS, in alcuni casi il client può ricorrere a HTTPS o HTTP/2 anziché negoziare HTTP/3. Sono incluse le seguenti app:

  • Quando un client supporta versioni di HTTP/3 non compatibili con le versioni HTTP/3 supportate dal bilanciatore del carico HTTPS.
  • Quando il bilanciatore del carico rileva che il traffico UDP è bloccato o limitato in modo tale da impedire il funzionamento di HTTP/3.
  • Il client non supporta HTTP/3 e quindi non tenta di negoziare una connessione HTTP/3.

Quando una connessione viene ripristinata a HTTPS o HTTP/2, non viene conteggiato un errore del bilanciatore del carico.

Prima di abilitare HTTP/3, assicurati che i comportamenti descritti in precedenza siano accettabili per i tuoi carichi di lavoro.

Configura HTTP/3

Sia NONE (valore predefinito) sia ENABLE abilitano il supporto HTTP/3 per il bilanciatore del carico.

Quando HTTP/3 è abilitato, il bilanciatore del carico lo pubblicizza ai client, consentendo così ai client che lo supportano di negoziare una versione HTTP/3 con il bilanciatore del carico. I client che non supportano HTTP/3 non negoziano una connessione HTTP/3. Non è necessario disabilitare esplicitamente HTTP/3 a meno che tu non abbia identificato implementazioni client non funzionanti.

I bilanciatori del carico delle applicazioni esterni offrono tre modi per configurare HTTP/3, come illustrato nella tabella seguente.

Valore quicOverride Comportamento
NONE

Il supporto per HTTP/3 viene pubblicizzato per i client.

ENABLE

Il supporto per HTTP/3 viene pubblicizzato per i client.

Nota: TLS 0-RTT (noto anche come TLS Early Data) non è ancora supportato per HTTP/3.

DISABLE Disattiva in modo esplicito la pubblicità HTTP/3 e Google QUIC per i client.

Per attivare (o disattivare) HTTP/3 in modo esplicito, procedi nel seguente modo.

Console: HTTPS

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

    Vai a Bilanciamento del carico

  2. Seleziona il bilanciatore del carico che vuoi modificare.

  3. Fai clic su Configurazione frontend.

  4. Seleziona l'indirizzo IP e la porta del frontend che vuoi modificare. Per modificare una configurazione HTTP/3, il protocollo deve essere HTTPS.

Attiva HTTP/3

  1. Seleziona il menu a discesa Negoziazione QUIC.
  2. Per abilitare in modo esplicito HTTP/3 per questo frontend, seleziona Abilitato.
  3. Se hai più regole di frontend che rappresentano IPv4 e IPv6, assicurati di abilitare HTTP/3 per ogni regola.

Disabilita HTTP/3

  1. Seleziona il menu a discesa Negoziazione QUIC.
  2. Per disabilitare HTTP/3 per questo frontend, seleziona Disattivato.
  3. Se hai più regole di frontend che rappresentano IPv4 e IPv6, assicurati di disabilitare HTTP/3 per ogni regola.

gcloud: HTTPS

Prima di eseguire questo comando, devi creare una risorsa di certificato SSL per ogni certificato.

gcloud compute target-https-proxies create HTTPS_PROXY_NAME \
    --global \
    --quic-override=QUIC_SETTING

Sostituisci QUIC_SETTING con uno dei seguenti valori:

  • NONE (predefinita): consente a Google di controllare quando viene pubblicizzato il protocollo HTTP/3.

    Quando selezioni NONE, ai client viene pubblicizzato il protocollo HTTP/3, ma non viene pubblicizzato un QUIC di Google. Nella console Google Cloud, questa opzione è denominata Automatico (predefinito).

  • ENABLE: pubblicizza HTTP/3 ai client.

  • DISABLE: non pubblicizza HTTP/3 ai client.

API: HTTPS

POST https://www.googleapis.com/v1/compute/projects/PROJECT_ID/global/targetHttpsProxies/TARGET_PROXY_NAME/setQuicOverride

{
  "quicOverride": QUIC_SETTING
}

Sostituisci QUIC_SETTING con uno dei seguenti valori:

  • NONE (predefinita): consente a Google di controllare quando viene pubblicizzato HTTP/3.

    Attualmente, quando selezioni NONE, ai clienti viene pubblicizzato il protocollo HTTP/3, mentre la QUIC di Google non viene pubblicizzata.

    Nella console Google Cloud, questa opzione è denominata Automatico (valore predefinito).

  • ENABLE: pubblicizza HTTP/3 e Google QUIC ai clienti.

  • DISABLE: non pubblicizza HTTP/3 o Google QUIC ai clienti.

Limitazioni

  • I bilanciatori del carico HTTPS non inviano un avviso di chiusura close_notify quando terminano le connessioni SSL. In altre parole, il bilanciatore del carico chiude la connessione TCP anziché eseguire l'arresto SSL.
  • I bilanciatori del carico HTTPS supportano solo caratteri minuscoli nei domini in un attributo con nome comune (CN) o in un attributo nome alternativo del soggetto (SAN) del certificato. I certificati con caratteri maiuscoli nei domini vengono restituiti solo se impostati come certificato principale nel proxy di destinazione.
  • I bilanciatori del carico HTTPS non utilizzano l'estensione SNI (Server Name Indication) durante la connessione al backend, ad eccezione dei bilanciatori del carico con backend di NEG internet. Per maggiori dettagli, consulta Crittografia dal bilanciatore del carico ai backend.
  • Quando utilizzi bilanciatori del carico delle applicazioni esterni regionali con Cloud Run in un ambiente VPC condiviso, le reti VPC autonome nei progetti di servizio possono inviare traffico a qualsiasi altro servizio Cloud Run di cui è stato eseguito il deployment in qualsiasi altro progetto di servizio all'interno dello stesso ambiente VPC condiviso. Si tratta di un problema noto e questa forma di accesso verrà bloccata in futuro.
  • Google Cloud non garantisce che una connessione TCP sottostante possa rimanere aperta per l'intero valore del timeout del servizio di backend. I sistemi client devono implementare una logica di nuovo tentativo invece di affidarsi a una connessione TCP per rimanere aperta per lunghi periodi di tempo.
  • Non puoi creare un bilanciatore del carico delle applicazioni esterno regionale nel livello Premium utilizzando la console Google Cloud. Usa invece gcloud CLI o l'API.

Passaggi successivi