Panoramica della gestione del traffico per bilanciatori del carico delle applicazioni esterni globali

Questa pagina fornisce una panoramica delle funzionalità avanzate di gestione del traffico disponibili per i bilanciatori del carico delle applicazioni esterni globali. Questa pagina è solo per il bilanciatore del carico delle applicazioni esterno globale. Questi bilanciatori del carico sono sempre globali e sempre nel livello Premium. Se utilizzi un bilanciatore del carico in una modalità diversa, consulta una delle seguenti pagine:

I bilanciatori del carico delle applicazioni esterni globali supportano le seguenti funzionalità di gestione avanzata del traffico:
  • Gestione del traffico. Instrada in modo intelligente il traffico in base ai parametri HTTP(S) (ad esempio host, percorso, intestazioni e altri parametri della richiesta).
  • Azioni relative al traffico. Eseguire azioni basate su richieste e risposte (ad esempio reindirizzamenti e trasformazioni delle intestazioni).
  • Norme sul traffico. Ottimizza il comportamento del bilanciamento del carico (ad esempio, algoritmi di bilanciamento del carico avanzati).

Puoi configurare queste funzionalità utilizzando le mappe URL e i servizi di backend. Per maggiori informazioni, consulta i seguenti argomenti:

Esempi di casi d'uso

La gestione del traffico copre molti casi d'uso. Questa sezione fornisce alcuni esempi di alto livello.

Indirizzamento del traffico: routing basato su intestazione

L'indirizzamento del traffico consente di indirizzare il traffico alle istanze di servizio in base a parametri HTTP come le intestazioni delle richieste. Ad esempio, se il dispositivo di un utente è un dispositivo mobile con user-agent:Mobile nell'intestazione della richiesta, il routing del traffico può inviare il traffico alle istanze di servizio designate per gestire il traffico mobile e inviare il traffico senza user-agent:Mobile alle istanze designate per gestire il traffico proveniente da altri dispositivi.

Cloud Load Balancing traffic steering.
Figura 1. Gestione del traffico di Cloud Load Balancing (fai clic per ingrandire).

Azioni di gestione del traffico: suddivisione del traffico basata sulla ponderazione

Il deployment di una nuova versione di un servizio di produzione esistente comporta in genere alcuni rischi. Anche se i test vengono superati in staging, probabilmente non vuoi sottoporre immediatamente il 100% dei tuoi utenti alla nuova versione. Con la gestione del traffico, puoi definire suddivisioni del traffico basate su percentuali in più servizi di backend.

Ad esempio, puoi inviare il 95% del traffico alla versione precedente del tuo servizio e il 5% alla nuova versione. Dopo aver verificato che la nuova versione di produzione funziona come previsto, puoi spostare gradualmente le percentuali fino a quando il 100% del traffico raggiunge la nuova versione del servizio. La suddivisione del traffico viene in genere utilizzata per il deployment di nuove versioni, i test A/B, la migrazione dei servizi e processi simili.

Suddivisione del traffico di Cloud Load Balancing.
Figura 2. Suddivisione del traffico di Cloud Load Balancing (fai clic per ingrandire).
Non configurare l'affinità sessione se utilizzi la suddivisione del traffico ponderata. In questo caso, ha la precedenza la configurazione della suddivisione del traffico ponderata.

Policy di traffico: mirroring delle richieste

La tua organizzazione potrebbe avere requisiti di conformità specifici che impongono che tutto il traffico venga sottoposto a mirroring a un servizio aggiuntivo che può, ad esempio, registrare i dettagli della richiesta in un database per la riproduzione successiva.

Estensibilità con Service Extensions

L'integrazione con Service Extensions ti consente di inserire una logica personalizzata nel percorso dei dati di bilanciamento del carico dei bilanciatori del carico delle applicazioni supportati.

Per ulteriori informazioni, consulta la panoramica delle estensioni di servizio.

Componenti di gestione del traffico

A livello generale, i bilanciatori del carico forniscono la gestione del traffico sfruttando le risorse mappe URL globali e servizi di backend globali.

Puoi configurare la gestione e le azioni del traffico utilizzando le mappe URL. Le risorseGoogle Cloud associate alle mappe URL includono quanto segue:

  • Regola di route
  • Corrispondenza regola
  • Azione della regola

Puoi configurare i criteri di gestione del traffico utilizzando i servizi di backend. Le risorseGoogle Cloud associate ai servizi di backend includono:

  • Policy del bilanciatore del carico per le località
  • Impostazioni del bilanciatore del carico con hash coerente
  • Rilevamento outlier

Il seguente diagramma mostra le risorse utilizzate per implementare ciascuna funzionalità.

Modello dei dati di Cloud Load Balancing.
Figura 3. Modello dei dati di Cloud Load Balancing (fai clic per ingrandire).

Routing delle richieste ai backend

Nei bilanciatori del carico delle applicazioni esterni globali, il backend per il traffico viene determinato utilizzando un approccio in due fasi:

  • Il bilanciatore del carico seleziona un servizio di backend o un bucket di backend in base alle regole definite in una mappa URL globale.
  • Il servizio di backend seleziona un'istanza di backend in base ai criteri definiti in un servizio di backend globale.

Quando configuri il routing, puoi scegliere tra le seguenti modalità:

  • Regola semplice per host e percorso
  • Regola avanzata per host, percorso e route

Le due modalità si escludono a vicenda. Ogni mappa URL può contenere una sola modalità.

Regola semplice per host e percorso

In una regola host e percorso semplice, le mappe URL funzionano come descritto nella panoramica delle mappe URL.

Il seguente diagramma mostra il flusso logico di una semplice regola host e percorso.

Flusso della mappa URL con una regola host e percorso semplice.
Figura 4. Flusso della mappa URL con una regola host e percorso semplice (fai clic per ingrandire).

Una richiesta viene inizialmente valutata utilizzando le regole host. Un host è il dominio specificato dalla richiesta. Se la richiesta host corrisponde a una delle voci nel campo hosts, viene utilizzato il matcher di percorso associato.

Successivamente, viene valutato il matcher di percorso. Le regole percorso vengono valutate in base alla corrispondenza del percorso più lungo e puoi specificarle in qualsiasi ordine. Una volta trovata la corrispondenza più specifica, la richiesta viene indirizzata al servizio di backend corrispondente. Se la richiesta non corrisponde, viene utilizzato il servizio di backend predefinito.

Una tipica regola semplice per host e percorso potrebbe avere il seguente aspetto, dove il traffico video va a video-backend-service e tutto il resto del traffico va a web-backend-service. defaultService e service possono puntare a un servizio di backend o a un bucket di backend. Questo esempio mostra i servizi di backend.

gcloud compute url-maps describe lb-map
defaultService: global/backendServices/web-backend-service
hostRules:
- hosts:
  - '*'
  pathMatcher: pathmap
name: lb-map
pathMatchers:
- defaultService: global/backendServices/web-backend-service
  name: pathmap
  pathRules:
  - paths:
    - /video
    - /video/*
    service: global/backendServices/video-backend-service

Regola avanzata per host, percorso e route

Le regole avanzate per host, percorso e route forniscono opzioni di configurazione aggiuntive rispetto alle regole semplici per host e percorso. Queste opzioni consentono pattern di gestione del traffico più avanzati e modificano anche alcune semantiche. Ad esempio, le regole di route hanno un valore di priorità associato e vengono interpretate in ordine di priorità (anziché utilizzando la semantica della corrispondenza del percorso più lungo per prima).

Come nell'esempio precedente di regola host e percorso semplice, puoi configurare la gestione avanzata del traffico utilizzando una mappa URL. Ad esempio, la seguente mappa URL configura il routing in cui il 95% del traffico viene indirizzato a un servizio di backend e il 5% del traffico viene indirizzato a un altro servizio di backend.

defaultService e service possono puntare a un servizio di backend o a un bucket di backend. Questo esempio mostra i servizi di backend.

gcloud compute url-maps describe lb-map
defaultService: global/backendServices/service-a
hostRules:
- hosts:
  - '*'
  pathMatcher: matcher1
name: lb-map
pathMatchers:
- defaultService: global/backendServices/service-a
  name: matcher1
  routeRules:
  - matchRules:
    - prefixMatch: ''
    routeAction:
      weightedBackendServices:
      - backendService: global/backendServices/service-a
        weight: 95
      - backendService: global/backendServices/service-b
        weight: 5

Regole host

Quando una richiesta raggiunge il bilanciatore del carico, il campo host della richiesta viene valutato in base a hostRules definito nella mappa URL. Ogni regola host è costituita da un elenco di uno o più host e da un singolo matcher percorso (pathMatcher). Se non sono definiti hostRules, la richiesta viene indirizzata a defaultService.

Per saperne di più, consulta hostRules[] e defaultService nella documentazione dell'API Global URL Map.

Matcher percorso

Dopo che una richiesta corrisponde a una regola host, il bilanciatore del carico valuta il matcher di percorso corrispondente all'host.

Un matcher di percorso è costituito da quanto segue:

  • Una o più regole percorso (pathRules) o regole di route (routeRules).
  • Un servizio predefinito (defaultService), ovvero il servizio di backend o il bucket di backend predefinito utilizzato quando non corrispondono altri servizi di backend o bucket di backend.
Per ulteriori informazioni, consulta pathMatchers[], pathMatchers[].pathRules[] e pathMatchers[].routeRules[] nella documentazione dell'API della mappa URL globale.

Regole percorso

Le regole di percorso (pathRules) specificano uno o più percorsi URL, ad esempio / o /video. Le regole di percorso sono generalmente destinate al tipo di routing semplice basato su host e percorso descritto in precedenza.

Per ulteriori informazioni, vedi pathRules[] nella documentazione dell'API Global URL Map.

Regole di route

Una regola di routing (routeRules) corrisponde alle informazioni in una richiesta in entrata e prende una decisione di routing in base alla corrispondenza.

Le regole di routing possono contenere una serie di regole di corrispondenza diverse (matchRules) e una serie di azioni di routing diverse (routeAction).

Una regola di corrispondenza valuta la richiesta in entrata in base al percorso, alle intestazioni e parametri di ricerca della richiesta HTTP(S). Le regole di corrispondenza supportano vari tipi di corrispondenze (ad esempio, la corrispondenza con prefisso) e modificatori (ad esempio, la distinzione tra maiuscole e minuscole). In questo modo, ad esempio, puoi inviare richieste HTTP(S) a un insieme di backend in base alla presenza di un'intestazione HTTP definita personalizzata.

Nota: le opzioni di corrispondenza e la semantica variano a seconda della parte della richiesta che corrisponde. Per ulteriori informazioni, vedi matchRules[] nella documentazione dell'API Global URL Map.

Se hai più regole di route, il bilanciatore del carico le esegue in ordine di priorità (in base al campo priority), il che ti consente di specificare una logica personalizzata per la corrispondenza, il routing e altre azioni.

All'interno di una determinata regola di routing, quando viene trovata la prima corrispondenza, il bilanciamento del carico interrompe la valutazione delle regole di corrispondenza e le eventuali regole di corrispondenza rimanenti vengono ignorate.

Google Cloud esegue le seguenti azioni:

  1. Cerca la prima regola di corrispondenza che corrisponde alla richiesta.
  2. Interrompe la ricerca di altre regole di corrispondenza.
  3. Applica le azioni nelle azioni route corrispondenti.

Le regole di routing hanno diversi componenti, come descritto nella tabella seguente.

Componente della regola di routing (API field name) Descrizione
Priorità (priority) Un numero compreso tra 0 e 2.147.483.647 (ovvero (2^31)-1) assegnato a una regola di route all'interno di un determinato matcher percorso.

La priorità determina l'ordine di valutazione delle regole di route. La priorità di una regola diminuisce all'aumentare del numero, in modo che una regola con priorità 4 venga valutata prima di una regola con priorità 25. Viene applicata la prima regola corrispondente alla richiesta.

I numeri di priorità possono avere spazi vuoti. Non puoi creare più di una regola con la stessa priorità.
Descrizione (description) Una descrizione facoltativa di massimo 1024 caratteri.
Servizio (service) L'URL completo o parziale della risorsa del servizio di backend a cui viene indirizzato il traffico se questa regola corrisponde.
Regole di corrispondenza (matchRules) Una o più regole valutate in base alla richiesta. Questi matchRules possono corrispondere a tutti o a un sottoinsieme degli attributi HTTP della richiesta, come il percorso, le intestazioni HTTP e i parametri di query (GET).

All'interno di un matchRule, tutti i criteri corrispondenti devono essere soddisfatti affinché l'routeActions dell'routeRule abbia effetto. Se un routeRule ha più matchRules, il routeActions del routeRule ha effetto quando una richiesta corrisponde a uno qualsiasi dei matchRules del routeRule.
Azione route (routeAction) Consente di specificare le azioni da intraprendere quando i criteri della regola di corrispondenza sono soddisfatti. Queste azioni includono la suddivisione del traffico, la riscrittura degli URL, i tentativi e il mirroring, l'inserimento di errori e i criteri CORS.
Azione di reindirizzamento (urlRedirect) Puoi configurare un'azione per rispondere con un reindirizzamento HTTP quando vengono soddisfatti i criteri della regola di corrispondenza. Questo campo non può essere utilizzato in combinazione con un'azione di percorso.
Azione dell'intestazione (headerAction) Puoi configurare le regole di trasformazione delle intestazioni delle richieste e delle risposte quando vengono soddisfatti i criteri all'interno di matchRules.
Per ulteriori informazioni sui seguenti campi, consulta la documentazione dell'API Global URL Map.
  • routeRules[]
  • routeRules[].priority
  • routeRules[].description
  • routeRules[].service
  • routeRules[].matchRules[]
  • routeRules[].routeAction
  • routeRules[].urlRedirect
  • routeRules[].headerAction

Regole delle corrispondenze

Le regole di corrispondenza (matchRules) corrispondono a uno o più attributi di una richiesta ed eseguono le azioni specificate nella regola di route. Il seguente elenco fornisce alcuni esempi di attributi delle richieste che possono essere abbinati utilizzando le regole di corrispondenza:

  • Host: un nome host è la parte del nome di dominio di un URL. Ad esempio, la parte del nome host dell'URL http://example.net/video/hd è example.net. Nella richiesta, il nome host proviene dall'intestazione Host, come mostrato in questo comando curl di esempio, dove 10.1.2.9 è l'indirizzo IP con bilanciamento del carico:

    curl -v http://10.1.2.9/video/hd --header 'Host: example.com'
    
  • I percorsi seguono il nome host, ad esempio /images. La regola può specificare se deve corrispondere l'intero percorso o solo la parte iniziale.

  • Altri parametri della richiesta HTTP, ad esempio le intestazioni HTTP, che consentono la corrispondenza dei cookie, nonché la corrispondenza in base ai parametri di ricerca (variabili GET).

Per un elenco completo delle regole di corrispondenza supportate, consulta pathMatchers[].routeRules[].matchRules[] nella documentazione dell'API Global URL Map.

Azioni di route

Le azioni di routing sono azioni specifiche da intraprendere quando una regola di routing corrisponde agli attributi di una richiesta.

Azione route (API field name) Descrizione
Reindirizzamenti (urlRedirect) Restituisce un codice di risposta 3xx configurabile. Imposta anche l'intestazione della risposta Location con l'URI appropriato, sostituendo l'host e il percorso come specificato nell'azione di reindirizzamento.
Riscrittura degli URL (urlRewrite) Riscrive la parte del nome host dell'URL, la parte del percorso dell'URL o entrambe prima di inviare una richiesta al servizio di backend selezionato. Per le riscritture della parte del percorso, puoi utilizzare i caratteri jolly in pathTemplateRewrite.
Trasformazioni dell'intestazione (headerAction) Aggiunge o rimuove le intestazioni delle richieste prima di inviare una richiesta al servizio di backend. Puoi anche aggiungere o rimuovere le intestazioni di risposta dopo aver ricevuto una risposta dal servizio di backend. Se tenti di aggiungere e rimuovere la stessa intestazione, questa viene rimossa, a meno che non venga utilizzato il flag replace: True con l'operazione requestHeadersToAdd.
Mirroring del traffico (requestMirrorPolicy)

Oltre a inoltrare la richiesta al servizio di backend selezionato, invia una richiesta identica al servizio di backend mirror configurato in modalità fire and forget. Il bilanciatore del carico non attende una risposta dal backend a cui invia la richiesta di mirroring.

Il mirroring è utile per testare una nuova versione di un servizio di backend. Puoi anche utilizzarlo per eseguire il debug degli errori di produzione in una versione di debug del servizio di backend, anziché nella versione di produzione.

Tieni presenti le seguenti limitazioni quando utilizzi il mirroring del traffico:

  • Il mirroring del traffico è supportato quando entrambi i servizi di backend hanno backend di gruppi di istanze gestite, NEG a livello di zona o NEG ibridi. Non è supportato per i NEG di internet, i NEG serverless e i backend Private Service Connect.
  • Le richieste al servizio di backend sottoposto a mirroring non generano log o metriche per Cloud Logging e Cloud Monitoring.
Suddivisione del traffico ponderata (weightedBackendServices) Consente di distribuire il traffico per una regola corrispondente a più servizi di backend, in proporzione a un peso definito dall'utente assegnato al singolo servizio di backend.

Questa funzionalità è utile per configurare implementazioni in più fasi o test A/B. Ad esempio, l'azione di route potrebbe essere configurata in modo che il 99% del traffico venga inviato a un servizio che esegue una versione stabile di un'applicazione, mentre l'1% del traffico venga inviato a un servizio separato che esegue una versione più recente di quell'applicazione.
Nuovi tentativi (retryPolicy)

Configura le condizioni in base alle quali il bilanciatore del carico riprova le richieste non riuscite, il tempo di attesa del bilanciatore del carico prima di riprovare e il numero massimo di tentativi consentiti.

Tieni presente quanto segue:
  • Le norme di ripetizione non sono supportate con i backend NEG di internet.

  • Per disattivare i tentativi, devi impostare in modo esplicito numRetries su 1.

Timeout (timeout) Specifica il timeout per la route selezionata. Il timeout viene calcolato dal momento in cui la richiesta viene elaborata completamente fino al momento in cui la risposta viene elaborata completamente. Il timeout include tutti i tentativi.
Fault injection (faultInjectionPolicy) Introduce errori durante l'elaborazione delle richieste per simulare errori, tra cui latenza elevata, sovraccarico del servizio, errori del servizio e partizionamento della rete. Questa funzionalità è utile per testare la resilienza di un servizio a errori simulati.
Inserimento ritardato (faultInjectionPolicy) Introduce ritardi per una parte delle richieste definita dall'utente prima di inviare la richiesta al servizio di backend selezionato.
Interrompi inserimento (faultInjectionPolicy) Risponde direttamente a una frazione di richieste con codici di stato HTTP definiti dall'utente anziché inoltrare queste richieste al servizio di backend.
Norme di sicurezza (corsPolicy) I criteri di condivisione delle risorse tra origini (CORS) gestiscono le impostazioni per l'applicazione delle richieste CORS.

Puoi specificare una delle seguenti azioni per il percorso:

  • Instrada il traffico a un singolo servizio (service).
  • Suddividi il traffico tra più servizi (weightedBackendServices weight:x, dove x deve essere compreso tra 0 e 1000).
  • URL di reindirizzamento (urlRedirect).

Inoltre, puoi combinare una qualsiasi delle azioni di route menzionate in precedenza con una o più delle seguenti azioni di route:

  • Esegui il mirroring del traffico (requestMirrorPolicy).
  • Riscrivi host e percorso dell'URL (urlRewrite).
  • Ritenta le richieste non riuscite (retryPolicy).
  • Imposta timeout (timeout).
  • Introduci errori in una percentuale del traffico (faultInjectionPolicy).
  • Aggiungi policy CORS (corsPolicy).
  • Manipola le intestazioni della richiesta o della risposta (headerAction).
Per ulteriori informazioni sulla configurazione e sulla semantica delle azioni di percorso, consulta quanto segue nella documentazione dell'API Global URL Map.
  • urlRedirect
  • urlRewrite
  • headerAction
  • requestMirrorPolicy
  • weightedBackendServices
  • retryPolicy
  • timeout
  • faultInjectionPolicy
  • corsPolicy

Reindirizzamenti da HTTP a HTTPS

Se devi reindirizzare il traffico HTTP a HTTPS, puoi creare due regole di forwarding con un indirizzo IP comune.

Per un esempio completo, consulta Configurazione del reindirizzamento da HTTP ad HTTPS per i bilanciatori del carico delle applicazioni esterni globali.

Norme sul traffico

Utilizzando le risorse del servizio di backend, puoi configurare le policy di gestione del traffico per ottimizzare il bilanciamento del carico all'interno di un gruppo di istanze o di un gruppo di endpoint di rete (NEG). Queste norme entrano in vigore solo dopo che un servizio di backend è stato selezionato utilizzando la mappa URL (come descritto in precedenza).

I criteri di traffico ti consentono di:

  • Controlla l'algoritmo di bilanciamento del carico tra le istanze all'interno del servizio di backend.
  • Controlla il volume di connessioni a un servizio upstream.
  • Controlla l'eliminazione degli host non integri da un servizio di backend.
Le seguenti funzionalità delle policy di gestione del traffico sono configurate nel servizio di backend globale.

Criterio di traffico (API field name) Descrizione
Policy di località di bilanciamento del carico (LocalityLbPolicy)

Per un servizio di backend o un bucket, la distribuzione del traffico si basa su una modalità di bilanciamento del carico e su una policy di località di bilanciamento del carico.

La modalità di bilanciamento determina la frazione di traffico che deve essere inviata a ogni backend (bucket, gruppo di istanze o NEG GCE_VM_IP_PORT). Il criterio di bilanciamento del carico (LocalityLbPolicy) determina il bilanciamento del carico dei backend all'interno della zona o del gruppo. Quando un servizio di backend riceve traffico, lo indirizza prima a un backend (bucket, gruppo di istanze o NEG GCE_VM_IP_PORT) in base alla modalità di bilanciamento del backend. Una volta selezionato un backend, il traffico viene distribuito tra le istanze o gli endpoint all'interno di ogni zona in base al criterio di località. Per i gruppi di istanze gestite a livello di regione, il criterio di località si applica a ogni zona costituente.

Per le modalità di bilanciamento supportate, vedi Modalità di bilanciamento.

Per gli algoritmi delle policy di bilanciamento del carico supportati, consulta localityLbPolicy nella documentazione dell'API del servizio di backend globale.

Affinità sessione (consistentHash)

Include l'affinità basata sui cookie HTTP, l'affinità basata sulle intestazioni HTTP, l'affinità basata sull'indirizzo IP client, l'affinità sessione basata sui cookie con stato e l'affinità cookie generato. L'affinità sessione fornisce un tentativo di best effort per inviare le richieste di un determinato client allo stesso backend finché quest'ultimo è integro e ha capacità.

Le impostazioni di affinità di sessione vengono soddisfatte solo se il bilanciamento del carico policy di località è impostata su RING_HASH o MAGLEV.

Per ulteriori informazioni sull'affinità sessione, consulta consistentHash nella documentazione dell'API del servizio di backend globale.

Rilevamento outlier (outlierDetection)

Un insieme di policy che specificano i criteri per l'espulsione di VM o endpoint di backend non integri nei NEG, insieme ai criteri che definiscono quando un backend o un endpoint è considerato sufficientemente integro da ricevere di nuovo traffico.

Per ulteriori informazioni sul rilevamento di outlier, consulta outlierDetection nella documentazione dell'API del servizio di backend globale.

Passaggi successivi