Panoramica della gestione del traffico per un bilanciatore del carico delle applicazioni classico

Questa pagina fornisce una panoramica delle funzionalità di gestione del traffico disponibili per il bilanciatore del carico delle applicazioni classico. Questa pagina è solo per il bilanciatore del carico delle applicazioni classico. Se utilizzi un bilanciatore del carico in una modalità diversa con supporto per il set esteso di funzionalità di gestione del traffico, consulta una delle seguenti pagine:

Il bilanciatore del carico delle applicazioni classico supporta la funzionalità di gestione del traffico che ti consente di utilizzare le seguenti funzionalità:

Configura queste funzionalità utilizzando la mappa URL del bilanciatore del carico. Per informazioni di base, consulta i seguenti argomenti:

Componenti di gestione del traffico

A livello generale, i bilanciatori del carico delle applicazioni esterni forniscono la gestione del traffico utilizzando mappe URL globali.

Il bilanciatore del carico fornisce le seguenti azioni principali reciprocamente esclusive:

  • Instradare le richieste a un servizio di backend
  • Eseguire un reindirizzamento

Quando configuri un bilanciatore del carico, puoi configurare un'azione di riscrittura dell'URL prima che il bilanciatore del carico invii le richieste al servizio di backend o al bucket di backend.

Le riscritture o i reindirizzamenti possono essere applicati a tre livelli nella mappa URL:

  • In corrispondenza di pathRule, dove l'azione ha effetto quando viene trovato un percorso corrispondente
  • In pathMatcher in cui l'azione ha effetto quando non vengono trovate corrispondenze di percorsi per questo pathMatcher
  • In urlMap, l'azione ha effetto quando non viene trovata una corrispondenza con nessuno degli host specificati in una delle regole host

L'utilizzo di routeRules in un pathMatcher è un'alternativa all'utilizzo di pathRules. pathRules e routeRules non possono essere visualizzati nello stesso pathMatcher. A differenza di pathRules, in cui l'ordine non ha importanza, routeRules vengono esaminati in ordine. Un routeRule può testare il percorso dell'URL, le intestazioni HTTP e i parametri di query dell'URL.

Esempi di casi d'uso

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

Riscrivi

La riscrittura degli URL ti consente di presentare agli utenti esterni URL diversi da quelli utilizzati dai tuoi servizi.

Una riscrittura dell'URL separa un URL da una risorsa. Puoi tradurre gli URL facili da usare, che gli utenti possono ricordare e utilizzare più facilmente, trasformandoli in URL ottimizzati per i motori di ricerca, che questi ultimi possono trovare più facilmente, o in URL specifici per l'implementazione interna.

La funzionalità di riscrittura dell'URL esegue le seguenti operazioni:

  1. Legge l'URL in entrata nella richiesta.
  2. Sostituisce l'host, il percorso o entrambi, trasformando l'URL prima di indirizzare il traffico al servizio di backend o al bucket di backend.

Nel seguente diagramma:

  1. Un utente in Giappone invia una richiesta per l'URL www.mydomain.com/static/images/someimage.jpg.
  2. Quando la richiesta raggiunge il bilanciatore del carico delle applicazioni esterno, questo utilizza le informazioni nella mappa URL per riscrivere l'URL in www.myorigin.com/august_snapshot/images/someimage.jpg.
  3. (Facoltativo) In questo esempio, la mappa URL invia la richiesta a un backend esterno.
Riscrittura degli URL con il bilanciatore del carico delle applicazioni classico.
Figura 1. Riscrittura dell'URL con il bilanciatore del carico delle applicazioni classico.

Per un esempio di configurazione, vedi Riscritture.

Reindirizzamenti

Con i reindirizzamenti di URL, puoi reindirizzare le richieste client da un URL a un altro.

Ciò include la possibilità di:

  • Reindirizza tutte le richieste HTTP alle richieste HTTPS.
  • Reindirizza a un URL diverso formato modificando l'host, il percorso o entrambi l'host e il percorso dell'URL ed eliminando o conservando eventualiparametri di ricercary.
  • Scegli quali codici di risposta reindirizzamento emettere.

Utilizza i reindirizzamenti URL per le seguenti funzionalità:

  • Fornisci l'abbreviazione dell'URL. Gli URL visibili ai clienti possono essere resi molto più brevi. Questo servizio esegue un reindirizzamento alla pagina web con l'URL lungo.
  • Evita link non funzionanti quando le pagine web vengono spostate o diventano obsolete.
  • Consente a più nomi di dominio appartenenti allo stesso proprietario di fare riferimento a un unico sito web.
  • Evita la fatica e le inefficienze della configurazione di soluzioni alternative sul server di backend per supportare il reindirizzamento necessario.
  • Ridurre la latenza. I reindirizzamenti creati all'edge possono comportare una latenza inferiore rispetto ai reindirizzamenti creati negli endpoint di backend.

Inoltre, i reindirizzamenti da HTTP a HTTPS ti aiutano in particolare a:

  • Soddisfa i requisiti di conformità (ad esempio HIPAA) per il traffico criptato.
  • Reindirizza le richieste utilizzando HTTPS anziché rifiutare le richieste inviate con il protocollo HTTP.
  • Migliora il profilo di sicurezza della tua applicazione reindirizzando il traffico nel bilanciatore del carico di livello 7 stesso, anziché implementare il reindirizzamento nel server di backend.

Nel seguente diagramma:

  1. Un utente in Giappone invia una richiesta di GET http://example.com/img1.
  2. In base al reindirizzamento definito nella mappa URL, il bilanciatore del carico restituisce un reindirizzamento HTTP/1.1 302 Found Location: https://example.com/img1, reindirizzando la richiesta HTTP a una richiesta HTTPS.
  3. Il browser dell'utente invia una richiesta GET https://example.com/img1.
Reindirizzamento URL con il bilanciatore del carico delle applicazioni classico.
Figura 2. Reindirizzamento URL con il bilanciatore del carico delle applicazioni classico.

Per un esempio di configurazione, vedi Reindirizzamenti.

Codici di risposta supportati

I codici di risposta reindirizzamento supportati sono elencati nella tabella.

Codice di risposta Numero Note
MOVED_PERMANENTLY_DEFAULT 301
TROVATO 302
PERMANENT_REDIRECT 308 In questo caso, il metodo di richiesta viene mantenuto.
TEMPORARY_REDIRECT 307 In questo caso, il metodo di richiesta viene mantenuto.
SEE_OTHER 303

Routing basato su intestazioni e parametri

Il routing basato su intestazioni e parametri consente a un bilanciatore del carico di prendere decisioni di routing in base alle intestazioni HTTP e parametri di ricerca URL.

Con questa funzionalità, puoi semplificare l'architettura cloud senza eseguire il deployment di livelli aggiuntivi di proxy (ad esempio NGINX) per eseguire il routing.

Puoi utilizzare il bilanciatore del carico delle applicazioni esterno per:

  • test A/B
  • Assegnare i clienti a diversi set di servizi in esecuzione sui backend
  • Fornire pagine ed esperienze diverse in base alle diverse categorie di dispositivi da cui hanno origine le richieste

Dopo aver selezionato un pathMatcher in base alla stringa host, il routeRules in pathMatcher seleziona un percorso URL. Per ulteriori informazioni, consulta la panoramica delle mappe URL.

Esempio: configurazione del test A/B con routing basato su parametri di ricerca

L'esempio seguente mostra come eseguire il test A/B tramite la corrispondenza della stringa di query per specificare l'esperimento e l'input.

Supponiamo che tu voglia assicurarti che le richieste vengano gestite nel seguente modo:

  • Tutte le richieste con il valore parametro di query A vanno al servizio di backend chiamato BackendServiceForProcessingOptionA.
  • Tutte le richieste con il valore parametro di query B vanno al servizio di backend chiamato BackendServiceForProcessingOptionB.

Questi requisiti sono riassunti nella tabella seguente.

Richiesta Servizio di backend
http://test.mydomain.com?ABTest=A BackendServiceForProcessingOptionA
http://test.mydomain.com?ABTest=B BackendServiceForProcessingOptionB

Per configurare questa impostazione nella mappa URL globale, puoi creare le seguenti impostazioni.

Corrispondenza Azione
pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].name = ABTest

pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].exactMatch = A
pathMatchers[].routeRules[].service = BackendServiceForProcessingOptionA
pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].name = ABTest

pathMatchers[].routeRules[].matchRules[].queryParameterMatches[].exactMatch = B
pathMatchers[].routeRules[].service = BackendServiceForProcessingOptionB

Per un esempio di configurazione, consulta Routing basato su intestazione e parametri.

Routing delle richieste ai backend

Il backend per il traffico viene determinato utilizzando un approccio in due fasi:

  • Il bilanciatore del carico seleziona un servizio di backend con backend. I backend possono essere i seguenti:

    • Istanze di macchine virtuali (VM) Compute Engine in un gruppo di istanze non gestite
    • VM Compute Engine in un gruppo di istanze gestite (MIG)
    • Container tramite un nodo Google Kubernetes Engine (GKE) in un gruppo di endpoint di rete (NEG) zonale
    • Backend esterni al di fuori di Google Cloud in un NEG internet
    • Cloud Storage nei bucket di backend
    • Servizi App Engine, Cloud Run Functions o Cloud Run in un NEG serverless

    Il bilanciatore del carico sceglie un servizio di backend in base alle regole definite in una mappa URL globale.

  • Il servizio di backend seleziona un'istanza di backend in base alle policy definite in un servizio di backend globale.

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

  • Test semplice di host e percorso, utilizzando pathRules
  • Test avanzato delle richieste, utilizzando routeRules

Per ogni mappa URL, puoi scegliere di utilizzare regole host e percorso semplici o regole host, percorso e route avanzate. Le due modalità si escludono a vicenda. Ogni mappa di 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 3. Flusso della mappa URL con una semplice regola host e percorso.

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.

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 essere simile alla seguente, in cui il traffico video va a video-backend-service e tutto il resto del traffico va a web-backend-service.

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

Per un esempio di configurazione, consulta Host e percorso.

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 routing vengono eseguite in ordine (anziché utilizzando la semantica di corrispondenza del percorso più lungo per primo).

Come nell'esempio precedente di regola host e percorso semplice, puoi configurare la gestione avanzata del traffico utilizzando una mappa URL globale, ma anziché utilizzare pathMatchers[].pathRules[], utilizzi pathMatchers[].routeRules[].

Le sezioni seguenti spiegano i componenti delle regole avanzate per host, percorso e route.

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 del percorso corrispondente all'host.

Un matcher di percorsi è costituito dai seguenti componenti:

  • Una o più regole percorso (pathRules) o regole di route (routeRules).
  • Una regola predefinita che viene eseguita quando non viene trovata corrispondenza con altri servizi di backend. La regola ha le seguenti opzioni reciprocamente esclusive:

    • Un servizio predefinito specifica il servizio di backend predefinito a cui instradare quando nessun altro servizio di backend corrisponde.
    • Un reindirizzamento predefinito specifica l'URL a cui reindirizzare quando non corrispondono altri servizi di backend.

Quando il bilanciatore del carico è configurato per un servizio predefinito, può anche essere configurato per riscrivere l'URL prima di inviare la richiesta al servizio predefinito.

Per ulteriori informazioni, consulta pathMatchers[], pathMatchers[].pathRules[] e pathMatchers[].routeRules[] nella documentazione dell'API della mappa URL globale.

Regole percorso

Le regole 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 saperne di più, 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, l'insensibilità alle maiuscole). 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.

Per un elenco dettagliato delle opzioni supportate da matchRules, consulta matchRules[] nella documentazione dell'API Global URL Map.

Se hai più regole di routing, il bilanciatore del carico le esegue in ordine, 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 bilanciatore 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 di percorso per determinare l'ordine di valutazione della regola di route.

La priorità più alta è 0. La priorità più bassa è 2147483647. Ad esempio, una regola con priorità 4 viene valutata prima di una regola con priorità 25. Viene applicata la prima regola che corrisponde alla richiesta.

Puoi lasciare intervalli vuoti tra i numeri di priorità, non devono essere contigui. Non puoi creare più regole 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 ricerca (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 un'azione di riscrittura dell'URL da intraprendere quando i criteri della regola di corrispondenza sono soddisfatti.
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.

Per ulteriori informazioni, consulta i seguenti campi nella documentazione dell'API Global URL Map:

  • routeRules[]
  • routeRules[].priority
  • routeRules[].description
  • routeRules[].service
  • routeRules[].matchRules[]
  • routeRules[].routeAction
  • routeRules[].urlRedirect

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 bilanciato 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, come le intestazioni HTTP, che consentono la corrispondenza dei cookie, nonché la corrispondenza in base ai parametri di ricerca (variabili GET). Tieni presente che la corrispondenza delle espressioni regolari per i valori delle intestazioni non è supportata.

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

Configurazione della gestione del traffico

Puoi utilizzare la console Google Cloud , gcloud o l'API Cloud Load Balancing per configurare la gestione del traffico. Nell'ambiente di configurazione scelto, configuri la gestione del traffico utilizzando le configurazioni YAML.

Per assistenza nella scrittura di questi file YAML, puoi utilizzare le seguenti risorse: