Questa pagina fornisce una panoramica delle funzionalità avanzate di gestione del traffico disponibili per gli Application Load Balancer esterni globali. Questa pagina riguarda solo il bilanciatore del carico delle applicazioni esterno globale. Questi bilanciatori del carico sono sempre globali e sempre nel livello Premium. Se usi un bilanciatore del carico in una modalità diversa, consulta una delle seguenti pagine:
I bilanciatori del carico delle applicazioni esterni globali supportano la seguente gestione avanzata del traffico caratteristiche:- Svoltare il traffico. Instrada il traffico in modo intelligente in base ai parametri HTTP(S) (ad esempio host, percorso, intestazioni e altri parametri di richiesta).
- Azioni relative al traffico. Esegui azioni basate su richieste e risposte (ad esempio reindirizzamenti e trasformazioni di intestazioni).
- Norme sul traffico. Perfeziona il comportamento di bilanciamento del carico (ad esempio, livello avanzato algoritmi di bilanciamento del carico).
Puoi configurare queste funzionalità utilizzando le mappe URL e i servizi di backend. Per ulteriori informazioni, consulta i seguenti argomenti:
Esempi di casi d'uso
La gestione del traffico risponde a molti casi d'uso. Questa sezione fornisce alcuni esempi di alto livello.
Indirizzamento del traffico: routing basato su intestazioni
L'indirizzamento del traffico ti consente di indirizzare il traffico alle istanze di servizio in base ai 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, la gestione del traffico può inviare questo traffico alle istanze di servizio designate per gestire il traffico mobile e inviare il traffico che non ha user-agent:Mobile
alle istanze designate per gestire il traffico da altri dispositivi.
Azioni di traffico: suddivisione del traffico in base alla ponderazione
Il deployment di una nuova versione di un servizio di produzione esistente in genere comporta ai rischi. Anche se i test superano la fase di gestione temporanea, probabilmente non vorrai sottoporre il 100% dei tuoi utenti alla nuova versione immediatamente. Con traffico puoi definire la suddivisione del traffico in base alla percentuale di backend.
Ad esempio, puoi inviare il 95% del traffico alla versione precedente del servizio e il 5% alla nuova versione. Dopo aver convalidato la nuova versione di produzione funzioni come previsto, puoi spostare gradualmente percentuali finché 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.
Non configurare l'affinità sessione se utilizzi la suddivisione del traffico ponderata. In questo caso, la configurazione della suddivisione del traffico ponderata avrà la precedenza.Criteri di traffico: mirroring delle richieste
La tua organizzazione potrebbe avere requisiti di conformità specifici che impongono tutto il traffico deve essere sottoposto a mirroring a un servizio aggiuntivo che può, ad esempio, e registrare i dettagli della richiesta in un database per guardarla in un secondo momento.
Estensibilità con Service Extensions
I callout di Service Extensions ti consentono di inserire logica personalizzata nel percorso dei dati con bilanciamento del carico. Queste estensioni ti consentono di indicare bilanciatori del carico delle applicazioni supportati per effettuare chiamate gRPC ad applicazioni o servizi gestiti dall'utente durante e l'elaborazione dei dati.
Per ulteriori informazioni, consulta la panoramica delle Estensioni di servizio.
Componenti di gestione del traffico
A un livello generale, i bilanciatori del carico forniscono la gestione del traffico sfruttando le risorse di mappe URL globali e di servizi di backend globali.Puoi impostare la gestione del traffico e le azioni relative al traffico utilizzando le mappe URL. Le risorse Google Cloud associate alle mappe di URL includono quanto segue:
- Regola di route
- Corrispondenza regola
- Azione della regola
Puoi configurare i criteri relativi al traffico utilizzando i servizi di backend. Risorse Google Cloud associate ai servizi di backend include:
- Criterio del bilanciatore del carico della località
- Impostazioni del bilanciatore del carico con hashing coerente
- Rilevamento outlier
Il seguente diagramma mostra le risorse utilizzate per implementare ogni funzionalità.
Routing delle richieste ai backend
Nei bilanciatori del carico delle applicazioni esterni globali, viene determinato il backend per il traffico con un approccio in due fasi:- Il bilanciatore del carico seleziona un servizio 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 alle norme definite 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 sitemap può contenere una sola modalità o l'altra.
Regola semplice per host e percorso
In una regola host e percorso semplice, le mappe URL funzionano come descritto nella sezione Mappa URL Panoramica.
Il seguente diagramma mostra il flusso logico di una regola host e percorso semplice.
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 del percorso associato.
Quindi, viene valutato il matcher di percorso. Le regole percorso vengono valutate in base al primo percorso più lungo che corrisponde e puoi specificarle in qualsiasi ordine. Una volta trovata la corrispondenza più specifica, la richiesta viene inoltrata al servizio di backend corrispondente. Se la richiesta non corrisponde, il valore predefinito di servizio di backend.
Una regola semplice per host e percorso potrebbe avere il seguente aspetto, dove il traffico video viene indirizzato a video-backend-service
e tutto il resto a web-backend-service
.
defaultService
e service
possono puntare a un servizio di backend o a un backend
di sincronizzare la directory di una VM
con un bucket. 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 offrono opzioni di configurazione aggiuntive rispetto alle regole semplici per host e percorso. Queste opzioni consentono di attivare modelli di gestione del traffico e anche modificare parte della semantica. Ad esempio: alle regole di route è associato un valore di priorità e sono interpretate in priorità dell'ordine (anziché usare la semantica più lunga per il percorso di corrispondenza).
Come nell'esempio di regola host e percorso semplice, puoi configurare gestione avanzata del traffico mediante una mappa URL. Ad esempio, la mappa URL riportata di seguito configura il routing in cui il 95% del traffico viene indirizzato a un servizio di backend e il 5% del traffico 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 corrispondenze dei percorsi (pathMatcher
). Se non sono definiti hostRules
, la richiesta viene indirizzata a defaultService
.
hostRules[]
e defaultService
nella
documentazione dell'API mappa degli URL globali.
Matcher percorso
Quando una richiesta corrisponde a una regola host, il bilanciatore del carico valuta matcher di percorso corrispondente all'host.
Un'associazione di percorsi è costituita da:
- Una o più regole di percorso (
pathRules
) o regole di route (routeRules
). - Un servizio predefinito (
defaultService
), ovvero il servizio di backend o il bucket di backend predefinito che viene utilizzato quando non sono presenti corrispondenze per altri servizi di backend o bucket di backend.
pathMatchers[]
, pathMatchers[].pathRules[]
e
pathMatchers[].routeRules[]
nella documentazione dell'API mappa URL globale.
Regole percorso
Le regole percorso (pathRules
) specificano uno o più percorsi dell'URL, ad esempio /
o /video
.
Le regole percorso sono generalmente intese per il tipo di semplice host e basato su percorso
come descritto in precedenza.
pathRules[]
nella documentazione dell'API mappa degli URL globali.
Regole di route
Una regola di route (routeRules
) corrisponde alle informazioni di una richiesta in entrata ed effettua
una decisione di instradamento basata sulla corrispondenza.
Le regole di routing possono contenere una serie di regole di corrispondenza (matchRules
) e di azioni di routing (routeAction
) diverse.
Una regola di corrispondenza valuta la richiesta in entrata in base al percorso della richiesta HTTP(S), intestazioni e parametri di ricerca. Le regole di corrispondenza supportano vari tipi di corrispondenze (ad es. corrispondenza con prefisso) e modificatori (ad es. la sensibilità alle maiuscole). Questo ti consente, ad esempio, di inviare richieste HTTP(S) a un insieme di backend basati sulla presenza di un'intestazione HTTP personalizzata.
Nota: le opzioni e la semantica delle corrispondenze variano a seconda della parte della richiesta con cui effettui la corrispondenza. Per ulteriori informazioni, consultamatchRules[]
nella documentazione dell'API mappa degli URL globali.
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 route, quando viene effettuata la prima corrispondenza, il bilanciatore del carico si arresta valutare le regole di corrispondenza e le altre eventuali regole di corrispondenza rimanenti vengono ignorate.
Google Cloud esegue le seguenti azioni:
- Cerca la prima regola di corrispondenza che corrisponde alla richiesta.
- Interrompe la visualizzazione di qualsiasi altra regola di corrispondenza.
- Applica le azioni nelle azioni di percorso corrispondenti.
Le regole di routing hanno diversi componenti, come descritto nella tabella seguente.
Componente regola di route (API field name ) |
Descrizione |
---|---|
Priorità (priority ) |
Un numero compreso tra 0 e 2147483647 (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 con l'aumentare del numero, pertanto una regola con priorità 4 viene valutata prima di una regola con prioritaria25 . Viene applicata la prima regola che corrisponde alla richiesta.
I numeri di priorità possono presentare lacune. 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 verso la quale il traffico in caso di corrispondenza con questa regola. |
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, ad esempio il percorso, le intestazioni HTTP e i parametri di query (GET).All'interno di un matchRule , tutti i criteri di corrispondenza devono essere soddisfatti affinché il routeActions del routeRule venga applicato. Se un routeRule ha più
matchRules , i routeActions del
routeRule vengono applicati quando una richiesta corrisponde a uno dei
matchRules del routeRule .
|
Azione route (routeAction ) |
Ti consente di specificare quali azioni da prendere quando i criteri della regola di corrispondenza sono soddisfatti. Queste azioni includono la suddivisione del traffico, le riscritture degli URL, i tentativi e mirroring, fault injection e criteri CORS. |
Azione di reindirizzamento (urlRedirect ) |
Puoi configurare un'azione per rispondere con un reindirizzamento HTTP quando i criteri della regola di corrispondenza sono soddisfatti. Questo campo non può essere utilizzato insieme a un'azione di percorso. |
Azione intestazione (headerAction ) |
Puoi configurare le regole di trasformazione dell'intestazione della richiesta e della risposta quando i criteri in matchRules sono soddisfatti.
|
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 e prendono
azioni specificate nella regola di route. Il seguente elenco fornisce alcuni esempi
di attributi della richiesta 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'intestazioneHost
, come mostrato in questo comando curl di esempio, dove10.1.2.9
è il bilanciamento del carico Indirizzo IP: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 di richiesta HTTP, ad esempio le intestazioni HTTP, che consentono i cookie così come i parametri di ricerca (variabili GET).
pathMatchers[].routeRules[].matchRules[]
nell'API della mappa URL globale
documentazione.
Azioni di routing
Le azioni di route sono azioni specifiche da eseguire quando una regola di route corrisponde a gli attributi di una richiesta.
Azione route (API field name ) |
Descrizione |
---|---|
Reindirizzamenti (urlRedirect ) |
Restituisce un codice di risposta 3xx configurabile. Imposta inoltre l'intestazione di risposta Location
con l'URI appropriato, sostituendo l'host e il percorso come specificato nell'azione di reindirizzamento.
|
Riscrittura URL (urlRewrite ) |
Riscrivi 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. Può anche aggiungere o rimuovere le intestazioni di risposta dopo aver ricevuto un la risposta desiderata dal servizio di backend. |
Mirroring traffico (requestMirrorPolicy ) |
Oltre a inoltrare la richiesta al servizio di backend selezionato, invia una richiesta identica al servizio di backend mirror configurato su una base fire and forget. Il bilanciatore del carico non attende una risposta
dal backend a cui invia la richiesta sottoposta a mirroring. Tieni presente le seguenti limitazioni quando utilizzi il mirroring del traffico:
|
Suddivisione del traffico ponderata (weightedBackendServices ) |
Consente di distribuire il traffico per una regola corrispondente a più backend
proporzionale a una ponderazione definita dall'utente assegnata al singolo
servizio di backend. Questa funzionalità è utile per configurare deployment 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 viene inviato a un servizio separato che esegue una versione più recente dell'applicazione. |
Nuovi tentativi (retryPolicy ) |
Consente di configurare le condizioni in base alle quali il bilanciatore del carico riprova le richieste non riuscite, il tempo di attesa prima del nuovo tentativo e il numero massimo di tentativi consentiti. I criteri di ripetizione non sono supportati con i backend NEG internet. |
Timeout (timeout ) |
Specifica il timeout per la route selezionata. Il timeout viene calcolato dal momento in cui la richiesta viene completamente elaborata fino al momento in cui la risposta viene completamente elaborata. Il timeout include tutti i tentativi di ripetizione. |
Iniezione di errori (faultInjectionPolicy ) |
Introduce gli errori durante la gestione delle richieste per simulare gli 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 ai guasti simulati. |
Iniezione ritardata (faultInjectionPolicy ) |
Introduce ritardi per una parte di richieste definita dall'utente prima di inviare la richiesta al servizio di backend selezionato. |
Interrompi l'inserimento (faultInjectionPolicy ) |
Risponde direttamente a una frazione di richieste con codici di stato HTTP definiti dall'utente invece di inoltrarle richieste al servizio di backend. |
Criteri 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 di route:
- 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 delle azioni di route menzionate in precedenza con una o più delle seguenti azioni di route:
- Esegui il mirroring del traffico (
requestMirrorPolicy
). - Riscrivi l'host e il percorso dell'URL (
urlRewrite
). - Riprova le richieste non riuscite (
retryPolicy
). - Imposta il timeout (
timeout
). - Introduci errori in una percentuale del traffico (
faultInjectionPolicy
). - Aggiungi il criterio CORS (
corsPolicy
). - Manipolare le intestazioni della richiesta o della risposta (
headerAction
).
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 Configurare il reindirizzamento da HTTP ad HTTPS per i bilanciatori del carico delle applicazioni esterni globali.Criteri di traffico
Utilizzando le risorse del servizio di backend, puoi configurare i criteri di traffico ottimizza il bilanciamento del carico all'interno di un gruppo di istanze o di un endpoint di rete (NEG). Questi criteri vengono applicati soltanto dopo che un servizio di backend è stato selezionati utilizzando la mappa URL (come descritto in precedenza).
I criteri di traffico consentono di:
- Controlla l'algoritmo di bilanciamento del carico tra le istanze all'interno del backend completamente gestito di Google Cloud.
- Controlla il volume delle connessioni a un servizio a monte.
- Controlla l'eliminazione di host in stato non integro da un servizio di backend.
Criterio di traffico (API field name ) |
Descrizione |
---|---|
Criterio di località per il 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 un criterio di bilanciamento del carico per le località. La modalità di bilanciamento determina la frazione di traffico che deve essere inviata a ciascun backend (bucket, gruppo di istanze o Per le modalità di bilanciamento supportate, consulta Bilanciamento . Per gli algoritmi dei criteri di bilanciamento del carico supportati, consulta
|
Affinità sessione (consistentHash ) |
Include affinità basata su cookie HTTP, affinità basata su intestazioni HTTP, affinità dell'indirizzo IP del client, affinità sessione basata su cookie stateful, e affinità cookie generato. Affinità sessione tenta il criterio del "best effort" per inviare le richieste da un determinato cliente allo stesso backend per tutto il tempo in cui è integro e ha capacità. Le impostazioni di affinità della sessione vengono soddisfatte solo se il criterio di bilanciamento del carico per le località è impostato su Per ulteriori informazioni sull'affinità di sessione, consulta
|
Rilevamento outlier (outlierDetection ) |
Un insieme di criteri che specificano i criteri per l'eliminazione dei dati non integri di backend o endpoint nei NEG, insieme a criteri che definiscono quando il backend o l'endpoint sia considerato integro abbastanza da ricevere traffico di nuovo. Per ulteriori informazioni sul rilevamento degli outlier, consulta
|
Passaggi successivi
- Per configurare la gestione del traffico per il bilanciatore del carico delle applicazioni esterno globale, consulta Configurare la gestione del traffico per Bilanciatori del carico delle applicazioni esterni globali.