Panoramica del bilanciatore del carico di rete passthrough esterno basato su pool di destinazione

Un bilanciatore del carico di rete passthrough esterno è un bilanciatore del carico di livello 4 a livello di regione. I bilanciatori del carico di rete passthrough esterni distribuiscono il traffico TCP e UDP tra istanze di macchine virtuali (VM) di backend nella stessa regione in una rete VPC (Virtual Private Cloud). Un bilanciatore del carico di rete passthrough esterno può ricevere traffico da uno dei seguenti elementi:

  • Qualsiasi client su internet
  • VM Google Cloud con IP esterni
  • VM Google Cloud con accesso a internet tramite Cloud NAT o NAT basato su istanze

A seconda della configurazione della regola di forwarding, ogni bilanciatore del carico basato sul pool di destinazione supporta uno dei seguenti tipi di traffico di protocollo:

  • TCP
  • UDP
  • TCP e UDP

L'ambito del bilanciatore del carico è a livello di regione, non globale. Ciò significa che tutte le istanze di backend per un bilanciatore del carico di rete passthrough esterno devono trovarsi nella stessa regione. Puoi posizionare i backend in qualsiasi zona della regione.

I bilanciatori del carico di rete passthrough esterni supportano tutte le porte. Puoi utilizzare un bilanciatore del carico di rete passthrough esterno per bilanciare il carico del traffico TCP o UDP. Poiché il bilanciatore del carico è un bilanciatore del carico passthrough, i backend terminano autonomamente la connessione TCP con bilanciamento del carico o i pacchetti UDP. Ad esempio, potresti eseguire un server web HTTPS sui tuoi backend e utilizzare un bilanciatore del carico di rete passthrough esterno per instradare le richieste, terminando TLS sui tuoi backend stessi.

Se stai creando applicazioni in GKE, ti consigliamo di utilizzare il controller di servizio GKE integrato, che esegue il deployment dei bilanciatori del carico Google Cloud per conto degli utenti GKE. Questa è la stessa dell'architettura di bilanciamento del carico autonoma, ma il suo ciclo di vita è completamente automatizzato e controllato da GKE. Per maggiori dettagli, vedi Esponi le app utilizzando i servizi.

Architettura

Il bilanciatore del carico è costituito da diversi componenti di configurazione. Un singolo bilanciatore del carico può avere quanto segue:

Un bilanciatore del carico di rete passthrough esterno ha sempre un pool di destinazione. Più regole di forwarding possono fare riferimento al pool di destinazione.

Il pool di destinazione è un backend per il bilanciatore del carico. Specifica le istanze di backend tra cui il traffico viene bilanciato del carico. Ogni regola di forwarding è un frontend per il bilanciatore del carico. Tieni presente che sono presenti limiti al numero di regole di forwarding e pool di destinazione per progetto.

I bilanciatori del carico di rete passthrough esterni bilanciano il carico sui sistemi in base ai dati del protocollo IP in arrivo, come indirizzo, porta e tipo di protocollo.

Il bilanciatore del carico di rete passthrough esterno è un bilanciatore del carico passthrough, quindi i tuoi backend ricevono la richiesta del client originale. Il bilanciatore del carico di rete passthrough esterno non esegue alcun trasferimento o proxy basato su Transport Layer Security (TLS). Il traffico viene instradato direttamente alle VM.

Quando crei una regola di forwarding per il bilanciatore del carico, ricevi un indirizzo IP virtuale temporaneo (VIP) o prenoti un VIP che ha origine da un blocco di rete a livello di regione.

Successivamente, associ la regola di forwarding ai pool di destinazione. Il VIP è anycast dai punti di presenza globali di Google, ma i backend sono a livello di regione. Il bilanciatore del carico non può avere backend che coprono più regioni.

Puoi utilizzare i firewall di Google Cloud per controllare o filtrare l'accesso alle VM di backend.

Il bilanciatore del carico di rete passthrough esterno esamina le porte di origine e di destinazione, l'indirizzo IP e il protocollo per determinare la modalità di inoltro dei pacchetti. Per il traffico TCP, puoi modificare il comportamento di inoltro del bilanciatore del carico configurando l'affinità della sessione. Il bilanciatore del carico di rete passthrough esterno inoltra i pacchetti alla prima interfaccia di rete (nic0) delle istanze nel pool di destinazione.

Il bilanciatore del carico conserva gli indirizzi IP di origine dei pacchetti in entrata. L'indirizzo IP di destinazione per i pacchetti in entrata è l'indirizzo IP esterno a livello di regione associato alla regola di forwarding del bilanciatore del carico.

Algoritmo di distribuzione del carico

Per impostazione predefinita, per distribuire il traffico alle istanze, il valore dell'affinità sessione è impostato su NONE. Cloud Load Balancing sceglie un'istanza in base a un hash dell'IP e della porta di origine, dell'IP e della porta di destinazione e del protocollo. Ciò significa che le connessioni TCP in arrivo sono distribuite tra le istanze e ogni nuova connessione potrebbe passare a un'istanza diversa. Tutti i pacchetti di una connessione vengono indirizzati alla stessa istanza fino alla chiusura della connessione. Le connessioni stabilite non vengono prese in considerazione nel processo di bilanciamento del carico.

Indipendentemente dall'impostazione di affinità sessione, tutti i pacchetti di una connessione vengono indirizzati all'istanza scelta fino alla chiusura della connessione. Una connessione esistente non ha alcun impatto sulle decisioni di bilanciamento del carico per le nuove connessioni in entrata. Questo può causare uno squilibrio tra i backend se sono in uso connessioni TCP di lunga durata.

Puoi scegliere un'impostazione di affinità sessione diversa se hai bisogno di più connessioni da un client per andare alla stessa istanza.

Pool di destinazione

Una risorsa pool di destinazione definisce un gruppo di istanze che dovrebbe ricevere il traffico in entrata dalle regole di forwarding. Quando una regola di forwarding indirizza il traffico a un pool di destinazione, Cloud Load Balancing sceglie un'istanza da questi pool di destinazione in base a un hash dell'IP e della porta di origine, nonché dell'IP e della porta di destinazione. Ogni pool di destinazione opera in una singola regione e distribuisce il traffico alla prima interfaccia di rete (nic0) dell'istanza di backend. Per ulteriori informazioni su come il traffico viene distribuito alle istanze, consulta la sezione Algoritmo di distribuzione del carico.

I bilanciatori del carico di rete passthrough esterni non sono proxy. Le risposte delle VM di backend passano direttamente ai client, non tramite il bilanciatore del carico. Il bilanciatore del carico conserva gli indirizzi IP di origine dei pacchetti. L'indirizzo IP di destinazione per i pacchetti in arrivo è l'indirizzo IP esterno a livello di regione associato alla regola di forwarding del bilanciatore del carico. Di conseguenza:

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

    L'ambiente del sistema operativo guest (o un processo equivalente) è responsabile della configurazione delle route locali su ogni VM di backend. Queste route consentono alla VM di accettare pacchetti con una destinazione che corrisponde all'indirizzo IP della regola di forwarding del bilanciatore del carico.

  • Nelle istanze di backend che accettano il traffico con bilanciamento del carico, devi configurare il software per l'associazione all'indirizzo IP associato alla regola di forwarding del bilanciatore del carico (o a qualsiasi indirizzo IP, 0.0.0.0/0).

I bilanciatori del carico di rete passthrough esterni supportano il gestore della scalabilità automatica di Compute Engine, che consente agli utenti di eseguire la scalabilità automatica dei gruppi di istanze in un pool di destinazione in base all'utilizzo del backend. Per saperne di più, consulta Scalabilità basata sull'utilizzo della CPU.

Se prevedi che il pool di destinazione contenga una singola istanza VM, ti consigliamo di utilizzare la funzionalità di inoltro del protocollo.

I pool di destinazione possono essere utilizzati solo con le regole di forwarding che gestiscono il traffico TCP e UDP. Per tutti gli altri protocolli, devi creare un'istanza di destinazione. Devi creare un pool di destinazione prima di poterlo utilizzare con una regola di forwarding. Ogni progetto può avere fino a 50 pool di destinazione.

Regole di forwarding

Le regole di forwarding funzionano in congiunzione ai pool di destinazione per supportare il bilanciamento del carico. Per utilizzare il bilanciamento del carico, devi creare una regola di forwarding che indirizzi il traffico a pool di destinazione specifici. Non è possibile bilanciare il carico del traffico senza una regola di forwarding.

Ogni regola di forwarding corrisponde a un determinato indirizzo IP, protocollo e, facoltativamente, intervallo di porte in un singolo pool di destinazione. Quando il traffico viene inviato a un indirizzo IP esterno gestito da una regola di forwarding, la regola di forwarding lo indirizza al pool di destinazione corrispondente.

Se stai eseguendo il bilanciamento del carico di pacchetti UDP che è probabile vengano frammentati prima di arrivare alla rete VPC di Google Cloud, consulta Bilanciamento del carico e pacchetti UDP frammentati.

I bilanciatori del carico di rete passthrough esterni basati su pool di destinazione supportano i seguenti protocolli per ogni regola di forwarding: TCP o UDP. Se vuoi che il bilanciatore del carico inoltri tutto il traffico basato su protocollo IP, devi utilizzare un bilanciatore del carico di rete passthrough esterno basato su servizio di backend.

Più regole di forwarding

Puoi configurare più regole di forwarding esterno a livello di regione per lo stesso bilanciatore del carico di rete passthrough esterno. Facoltativamente, ogni regola di forwarding può avere un indirizzo IP esterno a livello di regione diverso oppure più regole di forwarding possono avere lo stesso indirizzo IP esterno a livello di regione.

La configurazione di più regole di forwarding esterno a livello di regione può essere utile nei seguenti casi d'uso:

  • Devi configurare più di un indirizzo IP esterno per lo stesso pool di destinazione.
  • Devi configurare intervalli di porte o protocolli diversi utilizzando lo stesso indirizzo IP esterno per lo stesso pool di destinazione.

Se utilizzi più regole di forwarding, assicurati di configurare il software in esecuzione sulle VM di backend in modo che si associ a tutti gli indirizzi IP necessari. Questo è obbligatorio perché l'indirizzo IP di destinazione per i pacchetti consegnati tramite il bilanciatore del carico è l'indirizzo IP esterno a livello di regione associato alla rispettiva regola di forwarding esterno a livello di regione.

Controlli di integrità

I controlli di integrità assicurano che Compute Engine inoltri le nuove connessioni solo alle istanze attive e pronte a riceverle. Compute Engine invia richieste di controllo di integrità a ogni istanza con la frequenza specificata. Dopo che un'istanza supera il numero consentito di errori del controllo di integrità, non è più considerata idonea per la ricezione di nuovo traffico.

Per consentire l'arresto controllato e la chiusura delle connessioni TCP, le connessioni esistenti non vengono terminate attivamente. Tuttavia, non è garantito che le connessioni esistenti a un backend in stato non integro rimangano utilizzabili per lunghi periodi di tempo. Se possibile, devi avviare un processo di arresto controllato il prima possibile per il backend in stato non integro.

Il controllo di integrità continua a eseguire query sulle istanze in stato non integro e restituisce un'istanza al pool quando si verifica il numero specificato di controlli riusciti. Se tutte le istanze sono contrassegnate come UNHEALTHY, il bilanciatore del carico indirizza il nuovo traffico a tutte le istanze esistenti.

I bilanciatori del carico di rete passthrough esterni si basano sui controlli di integrità HTTP legacy per determinare l'integrità dell'istanza. Anche se il servizio non utilizza HTTP, devi eseguire un server web di base su ogni istanza su cui il sistema di controllo di integrità può eseguire query.

I controlli di integrità HTTPS legacy non sono supportati per i bilanciatori del carico di rete passthrough esterni e non possono essere utilizzati con la maggior parte degli altri tipi di bilanciatori del carico.

Regole del firewall

I controlli di integrità per i bilanciatori del carico di rete passthrough esterni vengono inviati da questi intervalli IP. Dovrai creare regole firewall di autorizzazione in entrata che consentano il traffico da questi intervalli.

I bilanciatori del carico di rete passthrough esterni sono bilanciatori del carico passthrough, il che significa che le regole firewall devono consentire il traffico dagli indirizzi IP di origine del client. Se il servizio è aperto a internet, è più semplice consentire il traffico proveniente da tutti gli intervalli IP. Se vuoi limitare l'accesso in modo da consentire solo determinati indirizzi IP di origine, puoi configurare regole firewall per applicare la restrizione, ma devi consentire l'accesso dagli intervalli IP del controllo di integrità.

Per un esempio di regola firewall e di una configurazione, consulta Regole firewall per bilanciatori del carico di rete passthrough esterni.

Indirizzi IP per i pacchetti di richiesta e reso

Quando una VM di backend riceve un pacchetto con bilanciamento del carico da un client, l'origine e la destinazione del pacchetto sono:

  • Origine: l'indirizzo IP esterno associato a una VM Google Cloud o a un indirizzo IP instradabile su internet di un sistema che si connette al bilanciatore del carico.
  • Destinazione:l'indirizzo IP della regola di forwarding del bilanciatore del carico.

Poiché il bilanciatore del carico è un bilanciatore del carico passthrough (non un proxy), i pacchetti arrivano contenenti l'indirizzo IP di destinazione della regola di forwarding del bilanciatore del carico. Il software in esecuzione su VM di backend deve essere configurato in modo da:

  • Ascolta (associazione) sull'indirizzo IP della regola di forwarding del bilanciatore del carico o su qualsiasi indirizzo IP (0.0.0.0 o ::)
  • Se il protocollo della regola di forwarding del bilanciatore del carico supporta le porte, ascolta (associa a) una porta inclusa nella regola di forwarding del bilanciatore del carico

I pacchetti restituiti vengono inviati direttamente dalle VM di backend del bilanciatore del carico al client. Gli indirizzi IP di origine e di destinazione del pacchetto di ritorno dipendono dal protocollo:

  • TCP è orientato alla connessione, quindi le VM di backend devono rispondere con pacchetti i cui indirizzi IP di origine corrispondono all'indirizzo IP della regola di forwarding, in modo che il client possa associare i pacchetti di risposta alla connessione TCP appropriata.
  • UDP è senza connessione, quindi le VM di backend possono inviare pacchetti di risposta i cui indirizzi IP di origine corrispondono all'indirizzo IP della regola di forwarding o a qualsiasi indirizzo IP assegnato alla VM. In pratica, la maggior parte dei client si aspetta che la risposta provenga dallo stesso indirizzo IP a cui hanno inviato i pacchetti.

La seguente tabella riassume le origini e le destinazioni dei pacchetti di risposta:

Tipo di traffico Origine Destinazione
TCP L'indirizzo IP della regola di forwarding del bilanciatore del carico L'origine del pacchetto richiedente
UDP Nella maggior parte dei casi d'uso, l'indirizzo IP della regola di forwarding del bilanciatore del carico L'origine del pacchetto richiedente

Quando una VM ha un indirizzo IP esterno o quando utilizzi Cloud NAT, è anche possibile impostare l'indirizzo IP di origine del pacchetto di risposta sull'indirizzo IPv4 interno principale del NIC della VM. Google Cloud o Cloud NAT cambia l'indirizzo IP di origine del pacchetto di risposta nell'indirizzo IPv4 esterno del NIC o in un indirizzo IPv4 esterno di Cloud NAT per inviare il pacchetto di risposta all'indirizzo IP esterno del client. Il mancato utilizzo dell'indirizzo IP della regola di forwarding come origine è uno scenario avanzato perché il client riceve un pacchetto di risposta da un indirizzo IP esterno che non corrisponde all'indirizzo IP a cui ha inviato un pacchetto di richiesta.

Percorso di ritorno

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

Architettura di un VPC condiviso

La seguente tabella riassume i componenti del VPC condiviso per i bilanciatori del carico di rete passthrough esterni:

Indirizzo IP Regola di forwarding Componenti di backend
È necessario definire un indirizzo IP esterno a livello di regione nello stesso progetto delle istanze con bilanciamento del carico. È necessario definire una regola di forwarding esterno a livello di regione nello stesso progetto delle istanze nel pool di destinazione (progetto di servizio). Il pool di destinazione deve essere definito nello stesso progetto e nella stessa regione in cui si trovano le istanze nel pool di destinazione. Anche i controlli di integrità associati al pool di destinazione devono essere definiti nello stesso progetto.

Distribuzione del traffico

Il modo in cui un bilanciatore del carico di rete passthrough esterno basato su pool di destinazione distribuisce le nuove connessioni dipende dalla configurazione dell'affinità sessione.

Affinità sessione

L'affinità sessione controlla il metodo di hashing utilizzato per distribuire nuove connessioni dai client alle VM di backend del bilanciatore del carico. I bilanciatori del carico basati su pool di destinazione utilizzano il parametro sessionAffinity per configurare laffinità sessione.

Per maggiori informazioni, consulta la pagina relativa all'utilizzo dei pool di destinazione.

Bilanciamento del carico e pacchetti UDP frammentati

Se esegui il bilanciamento del carico di pacchetti UDP, tieni presente quanto segue:

  1. I pacchetti non frammentati vengono gestiti normalmente in tutte le configurazioni.
  2. I pacchetti UDP potrebbero frammentarsi prima di raggiungere Google Cloud. Le reti che intervengono potrebbero attendere l'arrivo di tutti i frammenti prima di inoltrarli, causando ritardi o l'eliminazione di frammenti. Google Cloud non attende tutti i frammenti; inoltra ogni frammento non appena arriva.
  3. Poiché i frammenti UDP successivi non contengono la porta di destinazione, possono verificarsi problemi nelle seguenti situazioni:

    • Se l'affinità sessione dei pool di destinazione è impostata su NONE (affinità con 5 tuple), i frammenti successivi potrebbero essere eliminati perché il bilanciatore del carico non può calcolare l'hash a 5 tuple.
    • Se è presente più di una regola di forwarding UDP per lo stesso indirizzo IP con bilanciamento del carico, i frammenti successivi potrebbero arrivare alla regola di forwarding errata.

Se prevedi pacchetti UDP frammentati, procedi nel seguente modo:

  • Imposta l'affinità sessione su NONE, CLIENT_IP_PROTO o CLIENT_IP.
    • L'impostazione dell'affinità sessione su NONE indica che non è necessario mantenere l'affinità. Quindi il bilanciatore del carico utilizza un hash a 5 tuple per selezionare un backend per i pacchetti non frammentati e un hash a 3 tuple per i pacchetti frammentati.
    • Se imposti l'affinità sessione su CLIENT_IP_PROTO o CLIENT_IP, le porte di origine e di destinazione non vengono utilizzate per l'hashing e, di conseguenza, viene calcolato lo stesso hash per i pacchetti frammentati e non.
  • Utilizza una sola regola di forwarding UDP per indirizzo IP con bilanciamento del carico. Ciò garantisce che tutti i frammenti arrivino alla stessa regola di forwarding.

Con queste impostazioni, i frammenti UDP dello stesso pacchetto vengono inoltrati alla stessa istanza per il riassemblaggio.

Utilizzo delle istanze di destinazione come backend

Se utilizzi istanze di destinazione come backend per il bilanciatore del carico di rete passthrough esterno e prevedi pacchetti UDP frammentati, utilizza una sola regola di forwarding UDP per indirizzo IP con bilanciamento del carico e configura la regola di forwarding in modo che accetti il traffico su tutte le porte 0-65535. Ciò garantisce che tutti i frammenti arrivino alla stessa regola di forwarding anche se non hanno la stessa porta di destinazione.

Limitazioni

  • Non puoi utilizzare la console Google Cloud per creare bilanciatori del carico di rete passthrough esterni basati su pool di destinazione. Utilizza invece gcloud o l'API REST.
  • I bilanciatori del carico di rete passthrough esterni non supportano il peering di rete VPC.

Passaggi successivi