Trusted Cloud by S3NS I bilanciatori del carico delle applicazioni e Cloud Service Mesh utilizzano una Trusted Cloud risorsa di configurazione chiamata mappa URL per instradare le richieste HTTP(S) ai servizi di backend o ai bucket di backend.
Ad esempio, con un bilanciatore del carico delle applicazioni esterno, puoi utilizzare una singola mappa URL per instradare le richieste a destinazioni diverse in base alle regole configurate nella mappa URL:
- Le richieste per
https://example.com/video
vanno a un servizio di backend. - Le richieste per
https://example.com/audio
vanno a un altro servizio di backend.
- Le richieste per qualsiasi altra combinazione di host e percorso vanno a un servizio di backend predefinito.
Le mappe URL vengono utilizzate con i seguenti prodotti: Trusted Cloud
- Bilanciatore del carico delle applicazioni esterno (modalità regionale)
- Bilanciatore del carico delle applicazioni interno (modalità regionale)
La mappa degli URL regionale che utilizzi dipende dallo schema di bilanciamento del carico del prodotto.
Prodotto | Schema di bilanciamento del carico | Tipo di risorsa mappa URL | Destinazioni supportate |
---|---|---|---|
Bilanciatore del carico delle applicazioni esterno regionale | EXTERNAL_MANAGED |
Regionale | Servizi di backend |
Bilanciatore del carico delle applicazioni interno regionale | INTERNAL_MANAGED |
Regionale | Servizi di backend |
Non tutte le funzionalità della mappa degli URL sono disponibili per tutti i prodotti. Le mappe URL utilizzate con i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni supportano anche diverse funzionalità avanzate di gestione del traffico. Per ulteriori informazioni su queste differenze, vedi Confronto tra le funzionalità del bilanciatore del carico: routing e gestione del traffico.
Come funzionano le mappe URL
Quando una richiesta arriva al bilanciatore del carico, quest'ultimo la indirizza a un servizio di backend specifico.
Un servizio di backend rappresenta una raccolta di backend, che sono istanze di un'applicazione o di un microservizio.
Per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni, le destinazioni possibili sono le seguenti:
- Servizio di backend predefinito
- Servizio di backend non predefinito
Ad esempio, supponiamo che tu abbia la seguente configurazione:
- Un indirizzo IP:
- Tutte le richieste alla tua organizzazione vengono inviate allo stesso indirizzo IP e allo stesso bilanciatore del carico.
- Il traffico viene indirizzato a servizi di backend diversi in base all'URL della richiesta.
- Due domini:
example.net
ospita video di formazione.example.org
ospita il sito web della tua organizzazione.
- Quattro set di server:
- Uno ospita il sito web della tua organizzazione (servizio di backend:
org-site
). - Uno ospita il sito web complessivo dei video di formazione (servizio di backend:
video-site
). - Uno ospita video di formazione in alta definizione (HD) (servizio di backend:
video-hd
). - Uno ospita video di formazione in definizione standard (SD) (servizio di backend:
video-sd
).
- Uno ospita il sito web della tua organizzazione (servizio di backend:
Vuoi che si verifichi quanto segue:
- Le richieste a
example.org
(o a qualsiasi dominio diverso daexample.net
) vanno al servizio di backendorg-site
. - Le richieste a
example.net
che non corrispondono a percorsi più specifici vanno al servizio di backendvideo-site
. - Le richieste a
example.net/video/hd/*
vanno al servizio di backendvideo-hd
. - Le richieste a
example.net/video/sd/*
vanno al servizio di backendvideo-sd
.
Un --path-rule
per /video/*
corrisponde a URI come /video/test1
e /video/test2
. Tuttavia, questa regola del percorso non corrisponde al percorso
/video
.
Se il bilanciatore del carico riceve una richiesta con /../
nell'URL, trasforma l'URL rimuovendo il segmento di percorso prima di ..
e risponde con l'URL trasformato. Ad esempio, quando viene inviata una richiesta per
http://example.net/video/../abc
, il bilanciatore del carico risponde con un reindirizzamento 302
a http://example.net/abc
. La maggior parte dei client reagisce quindi inviando una richiesta all'URL restituito dal bilanciatore del carico (in questo caso, http://example.net/abc
). Questo reindirizzamento 302 non viene registrato in Cloud Logging.
La mappa URL ti consente di configurare questo tipo di routing basato su host e percorso.
Denominazione del bilanciatore del carico
Per i bilanciatori del carico delle applicazioni, il nome del bilanciatore del carico è sempre uguale al nome della mappa URL. Il comportamento di ciascuna Trusted Cloud interfaccia è il seguente:
- Trusted Cloud console. Se crei un bilanciatore del carico delle applicazioni utilizzando la consoleTrusted Cloud , alla mappa URL viene assegnato automaticamente lo stesso nome che hai inserito per il nome del bilanciatore del carico.
- Google Cloud CLI o API. Se crei un bilanciatore del carico delle applicazioni utilizzando l'interfaccia a riga di comando gcloud o l'API, inserisci un nome a tua scelta durante la creazione della mappa URL. Il nome della mappa URL viene poi visualizzato nella consoleTrusted Cloud come nome del bilanciatore del carico.
Per scoprire di più sul funzionamento della denominazione per i bilanciatori del carico di rete proxy e i bilanciatori del carico di rete passthrough, consulta Panoramica dei servizi di backend: denominazione del bilanciatore del carico.
Componenti della mappa URL
Una mappa URL è un insieme di Trusted Cloud risorse di configurazione che indirizzano le richieste di URL a servizi di backend. La mappa degli URL lo fa utilizzando le parti nome host e percorso per ogni URL che elabora:
- 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
. - Un percorso è la parte di un URL che segue il nome host e il numero di porta facoltativo. Ad esempio, la parte del percorso dell'URL
http://example.net/video/hd
è/video/hd
.
Questo diagramma mostra la struttura degli oggetti di configurazione del bilanciamento del carico in relazione tra loro.
Controlla quali servizi di backend ricevono le richieste in entrata utilizzando i seguenti parametri di configurazione della mappa URL:
- Servizio di backend predefinito. Quando crei una mappa URL, devi specificare un servizio di backend predefinito. Questo valore predefinito rappresenta il servizio di backend a cui Trusted Cloud indirizza le richieste per gli URL con qualsiasi nome host, a meno che non esista una regola host applicabile.
Regola host (
hostRules
). Una regola host indirizza le richieste inviate a uno o più nomi host associati a un singolo matcher percorso (pathMatchers
). La parte del nome host di un URL viene associata esattamente all'insieme dei nomi host configurati della regola host. In una regola host e percorso della mappa URL, se ometti l'host, la regola corrisponde a qualsiasi host richiesto. Per indirizzare le richieste perhttp://example.net/video/hd
a un'espressione di corrispondenza dei percorsi, è necessaria una singola regola di che includa almeno il nome hostexample.net
. La stessa regola di impostazione dell'host potrebbe gestire anche le richieste per altri nomi host, ma le indirizzerebbe allo stesso associatore di percorsi.Se devi indirizzare le richieste a espressioni di corrispondenza dei percorsi diverse, devi utilizzare regole host diverse. Due regole host in una mappa URL non possono includere lo stesso nome host.
È possibile trovare una corrispondenza con tutti i nomi host specificando il carattere jolly
*
nella regola host. Ad esempio, per gli URLhttp://example.org
,http://example.net/video/hd
ehttp://example.com/audio
, tutti e tre i nomi hostexample.org
,example.net
eexample.com
possono essere abbinati specificando*
nella regola host. È anche possibile trovare una corrispondenza parziale del nome host specificando il carattere jolly*
. Ad esempio, una regola host*.example.net
viene confrontata con i nomi hostnews.example.net
efinance.example.net
.- Numero porta. Bilanciatori del carico delle applicazioni diversi gestiscono i numeri di porta in modo diverso. Nel caso del bilanciatore del carico delle applicazioni interno, puoi
utilizzare il parametro Regola host per specificare un numero di porta. Ad esempio, per
indirizzare le richieste
example.net
per la porta 8080, imposta la regola host suexample.net:8080
.
- Numero porta. Bilanciatori del carico delle applicazioni diversi gestiscono i numeri di porta in modo diverso. Nel caso del bilanciatore del carico delle applicazioni interno, puoi
utilizzare il parametro Regola host per specificare un numero di porta. Ad esempio, per
indirizzare le richieste
Matcher percorso (
pathMatchers
). Un matcher percorso è il parametro di configurazione a cui fa riferimento una regola host. Definisce la relazione tra la parte del percorso di un URL e il servizio di backend che deve gestire la richiesta. Un path matcher è costituito da due elementi:Servizio di backend predefinito del matcher percorso. Per ogni matcher di percorso, devi specificare almeno un servizio di backend predefinito. Questo valore predefinito rappresenta il servizio di backend a cui Trusted Cloud indirizza le richieste per gli URL i cui nomi host corrispondono a una regola host associata al matcher percorso e i cui percorsi URL non corrispondono ad alcuna regola percorso nel matcher percorso.
Regole percorso. Per ogni matcher percorso, puoi specificare una o più regole percorso, ovvero coppie chiave-valore che mappano un percorso URL a un singolo servizio di backend. La sezione successiva contiene ulteriori informazioni sul funzionamento delle regole di percorso.
Ordine delle operazioni
Per un determinato nome host e percorso in un URL richiesto, Trusted Cloud utilizza la seguente procedura per indirizzare la richiesta al servizio di backend corretto , come configurato nella mappa URL:
Se la mappa URL non contiene una regola host per il nome host dell'URL, Trusted Cloud indirizza le richieste al servizio di backend predefinito della mappa URL , a seconda di quale hai definito.
Se la mappa URL contiene una regola host che include il nome host dell'URL, viene consultato il matcher percorso a cui fa riferimento la regola host:
Se il matcher percorso contiene una regola di percorso che corrisponde esattamente al percorso dell'URL, Trusted Cloud indirizza le richieste al servizio di backend per quella regola di percorso.
Se il matcher percorso non contiene una regola di percorso che corrisponde esattamente al percorso dell'URL, ma contiene una regola di percorso che termina con
/*
il cui prefisso corrisponde alla sezione più lunga del percorso dell'URL, allora Trusted Cloudindirizza le richieste al servizio di backend per quella regola di percorso. Ad esempio, per la mappa URL contenente due regole di corrispondenza del percorso/video/hd/movie1
e/video/hd/*
, se l'URL contiene il percorso esatto/video/hd/movie1
, viene confrontato con questa regola del percorso.Se nessuna delle condizioni precedenti è vera, Trusted Cloud indirizza le richieste al servizio di backend predefinito del matcher di percorso, a seconda di quale hai definito.
Vincoli del matcher percorso
I nomi host, i matcher di percorso e le regole di percorso hanno dei vincoli.
Caratteri jolly, espressioni regolari e URL dinamici nelle regole del percorso
Una regola di percorso può includere un carattere jolly (
*
) solo dopo una barra (/
). Ad esempio,/videos/*
e/videos/hd/*
sono validi per le regole di percorso, ma/videos*
e/videos/hd*
no.Le regole del percorso non utilizzano espressioni regolari o la corrispondenza di sottostringhe. PathTemplateMatch può utilizzare operatori di corrispondenza del percorso semplificati. Ad esempio, le regole relative al percorso per
/videos/hd
o/videos/hd/*
non si applicano a un URL con il percorso/video/hd-abcd
. Tuttavia, una regola del percorso per/video/*
si applica a questo percorso.I path matcher (e le mappe URL in generale) non offrono funzionalità che funzionano come le direttive Apache
LocationMatch
. Se hai un'applicazione che genera percorsi URL dinamici con un prefisso comune, ad esempio/videos/hd-abcd
e/videos/hd-pqrs
, e devi inviare le richieste effettuate a questi percorsi a servizi di backend diversi, potresti non essere in grado di farlo con una mappa URL. Per i casi che contengono solo alcuni possibili URL dinamici, potresti essere in grado di creare un matcher di percorso con un insieme limitato di regole di percorso. Per i casi più complessi, devi eseguire la corrispondenza delle espressioni regolari basate sul percorso sui backend.
Caratteri jolly e operatori di corrispondenza di pattern nei modelli di percorso per le regole di route
Gli operatori di corrispondenza flessibile dei pattern consentono di abbinare più parti di un percorso URL, inclusi URL parziali e suffissi (estensioni dei file), utilizzando la sintassi con caratteri jolly. Questi operatori possono essere utili quando devi instradare il traffico ed eseguire riscritture in base a percorsi degli URL complessi. Puoi anche associare uno o più componenti del percorso a variabili denominate e poi fare riferimento a queste variabili durante la riscrittura dell'URL. Con le variabili denominate, puoi riordinare e rimuovere i componenti dell'URL prima che la richiesta venga inviata all'origine.
La corrispondenza di pattern con caratteri jolly è supportata solo per i seguenti prodotti:
- Bilanciatore del carico delle applicazioni esterno regionale
- Bilanciatore del carico delle applicazioni interno regionale
Il seguente esempio indirizza il traffico per un'applicazione e-commerce che dispone di
servizi separati per le informazioni sul carrello e sull'utente.
Puoi configurare routeRules
con operatori di corrispondenza dei pattern flessibili e
variabili denominate per inviare l'ID univoco dell'utente a una pagina dei dettagli dell'account utente
e le informazioni sul carrello dell'utente a un servizio di elaborazione del carrello dopo
aver riscritto l'URL.
pathMatchers:
- name: cart-matcher
routeRules:
- description: CartService
matchRules:
- pathTemplateMatch: '/xyzwebservices/v2/xyz/users/{username=*}/carts/{cartid=**}'
service: cart-backend
priority: 1
routeAction:
urlRewrite:
pathTemplateRewrite: '/{username}-{cartid}/'
- name: user-matcher
routeRules:
- description: UserService
matchRules:
- pathTemplateMatch: '/xyzwebservices/v2/xyz/users/*/accountinfo/*'
service: user-backend
priority: 1
Ecco cosa succede quando un client richiede
/xyzwebservices/v2/xyz/users/abc@xyz.com/carts/FL0001090004/entries/SJFI38u3401nms?fields=FULL&client_type=WEB
,
che contiene sia informazioni sull'utente sia informazioni sul carrello:
- Il percorso della richiesta corrisponde a
pathTemplateMatch
all'interno dicart-matcher
pathMatcher. La variabile{username=*}
corrisponde aabc@xyz.com
e la variabile{cartid=**}
corrisponde aFL0001090004/entries/SJFI38u3401nms
. - I parametri di ricerca vengono separati dal percorso, il percorso viene riscritto
in base a
pathTemplateRewrite
e iparametri di ricercay vengono aggiunti al percorso riscritto. Dobbiamo utilizzare solo le stesse variabili che abbiamo utilizzato per definirepathTemplateMatch
inpathTemplateRewrite
. - La richiesta riscritta viene inviata a
cart-backend
con il percorso URL riscritto:/abc@xyz.com-FL0001090004/entries/SJFI38u3401nms?fields=FULL&client_type=WEB
.
Quando un cliente richiede
/xyzwebservices/v2/xyz/users/abc%40xyz.com/accountinfo/abc-1234
, che contiene solo informazioni sull'utente e sull'account, si verifica quanto segue:
- Il percorso della richiesta corrisponde a
pathTemplateMatch
all'interno diuser-matcher
pathMatcher. Il primo*
corrisponde aabc%40xyz.com
e il secondo*
aabc-1234
. - La richiesta viene inviata a
user-backend
.
La tabella seguente descrive la sintassi per i pattern dei modelli di percorso.
Operatore | Corrisponde a |
---|---|
* |
Un singolo segmento di percorso, esclusi i caratteri separatori di percorso / circostanti. |
** |
Trova corrispondenze con zero o più caratteri, inclusi eventuali caratteri separatori di percorso
/ tra più segmenti di percorso. Se sono inclusi altri operatori, l'operatore ** deve essere l'ultimo. |
{name} o {name=*} |
Una variabile denominata che corrisponde a un segmento di percorso. Trova un singolo segmento di percorso, esclusi i caratteri separatori di percorso /
circostanti. |
{name=news/*} |
Una variabile denominata che corrisponde esplicitamente a due segmenti di percorso:
news e un segmento jolly * . |
{name=*/news/*} |
Una variabile denominata che corrisponde a tre segmenti di percorso. |
{name=**} |
Una variabile denominata che corrisponde a zero o più caratteri. Se presente, deve essere l'ultimo operatore. |
Quando utilizzi questi operatori per la corrispondenza flessibile dei pattern, tieni presente quanto segue:
- È possibile combinare più operatori in un unico pattern.
- I parametri di query vengono separati dal percorso, il percorso viene riscritto
in base a
pathTemplateRewrite
e iparametri di ricercay vengono aggiunti al percorso riscritto. - Le richieste non sono normalizzate con la codifica percentuale. Ad esempio, un URL con un carattere barra codificato in percentuale (%2F) non viene decodificato nel formato non codificato.
- Ogni nome di variabile, ad esempio
{segment}
o{region}
, può essere visualizzato una sola volta nello stesso pattern. Più variabili con lo stesso nome non sono valide e vengono rifiutate. - I nomi delle variabili sono sensibili alle maiuscole e devono essere identificatori validi. Per verificare se
un nome di variabile è valido, assicurati che corrisponda all'espressione regolare
^[a-zA-Z][a-zA-Z0-9_]*$
.{API}
,{api}
e{api_v1}
sono tutti identificatori validi. Identificano tre variabili distinte.{1}
,{_api}
e{10alpha}
non sono identificatori validi.
- È previsto un limite di cinque operatori per pattern di modello.
Per eseguire una riscrittura facoltativa dell'URL prima che la richiesta venga inviata all'origine,
puoi utilizzare le stesse variabili che hai definito per acquisire un percorso.
Ad esempio, puoi fare riferimento alle variabili, riordinarle o ometterle nel
campo pathTemplateRewrite
quando definisci urlRewrite
.
Quando utilizzi variabili e operatori per la corrispondenza flessibile dei pattern per la riscrittura degli URL, tieni presente quanto segue:
- Quando riscrivi un URL, puoi omettere le variabili se non sono necessarie come parte dell'URL riscritto.
- Prima di qualsiasi riscrittura, puoi identificare l'URL inviato dal client all'origine esaminando le intestazioni della risposta. L'URL client originale viene compilato
con l'intestazione
x-client-request-url
e l'intestazionex-envoy-original-path
.
Relazione tra nome host e regola host
Un nome host può fare riferimento a una sola regola host.
Una singola regola host può elaborare più nomi host.
Relazione tra regola host e matcher percorso
Più regole host possono fare riferimento a un singolo matcher percorso.
Una regola host può fare riferimento a un solo matcher di percorso.
Il seguente diagramma illustra questi punti.
Relazione tra URL e backend
Ogni URL univoco viene indirizzato a un solo servizio di backend. Di conseguenza:
Trusted Cloud utilizza la parte del nome host di un URL per selezionare una singola regola host e il relativo matcher di percorso a cui fa riferimento.
Quando utilizzi le regole di percorso in un matcher di percorso, non puoi creare più di una regola di percorso per lo stesso percorso. Ad esempio, le richieste per
/videos/hd
non possono essere indirizzate a più di un servizio di backend. I servizi di backend possono avere gruppi di istanze di backend o gruppi di endpoint di rete (NEG) di backend in zone e regioni diverse.Per indirizzare il traffico per un URL univoco a più servizi, puoi utilizzare le regole di routing anziché le regole di percorso. Se configuri il matcher di percorso con regole di routing per le corrispondenze di intestazioni o parametri, un URL univoco può essere indirizzato a più di un servizio di backend, in base ai contenuti delle intestazioni o dei parametri di ricerca nell'URL.
Allo stesso modo, per i bilanciatori del carico delle applicazioni esterni regionali, i servizi di backend ponderati nelle azioni di route possono indirizzare lo stesso URL a più servizi di backend, a seconda dei pesi impostati nel servizio di backend ponderato.
Mappe URL e protocolli
Puoi utilizzare la stessa mappa URL, le stesse regole host e gli stessi matcher di percorso per elaborare le richieste HTTP e HTTPS inviate dai client, a condizione che sia un proxy HTTP di destinazione sia un proxy HTTPS di destinazione facciano riferimento alla mappa URL.
Mappa URL più semplice
La mappa URL più semplice ha solo un servizio di backend predefinito. Non contiene regole host e matcher percorso. Il servizio di backend predefinito (a seconda di quello che hai definito) gestisce tutti gli URL richiesti.
Se definisci un servizio di backend predefinito, Trusted Cloud indirizza le richieste ai relativi gruppi di istanza di backend o NEG di backend in base alla configurazione del servizio di backend.
Reindirizzamenti degli URL
Un reindirizzamento URL reindirizza i visitatori del tuo dominio da un URL a un altro.
Un reindirizzamento URL predefinito non è condizionato alla corrispondenza con un pattern specifico nella richiesta in entrata. Ad esempio, potresti voler utilizzare un reindirizzamento URL predefinito per reindirizzare qualsiasi nome host a un nome host di tua scelta.
Esistono diversi modi per creare un reindirizzamento URL, come descritto nella tabella seguente.
Metodo | Configurazione |
---|---|
Reindirizzamento URL predefinito della mappa URL | Livello superiore defaultUrlRedirect |
Reindirizzamento URL predefinito di un matcher percorso | pathMatchers[].defaultUrlRedirect[] |
Reindirizzamento URL della regola percorso di un matcher percorso | pathMatchers[].pathRules[].urlRedirect |
Reindirizzamento URL della regola di route di un matcher percorso | pathMatchers[].routeRules[].urlRedirect |
All'interno di un defaultUrlRedirect
o di un urlRedirect
, pathRedirect
funziona sempre
nel seguente modo:
- L'intero percorso della richiesta viene sostituito con il percorso specificato.
All'interno di un defaultUrlRedirect
o di un urlRedirect
, il funzionamento diprefixRedirect
dipende da come lo utilizzi:
- Se utilizzi un
defaultUrlRedirect
,prefixRedirect
è effettivamente un prefisso anteposto perché il percorso corrispondente è sempre/
. - Se utilizzi un
urlRedirect
all'interno di una regola di percorso o di una regola di route di un matcher di percorso,prefixRedirect
è una sostituzione del prefisso in base alla corrispondenza del percorso richiesto come definito nella regola di percorso o nella regola di route.
Esempi di reindirizzamento
La tabella seguente fornisce alcuni esempi di configurazioni di reindirizzamento. La colonna a destra mostra la configurazione dell'API per un reindirizzamento URL predefinito.
Vuoi | Realizzato utilizzando un reindirizzamento URL predefinito |
---|---|
Reindirizzamento da HTTP a HTTPS Reindirizzamento http://host.name/path a https://host.name/path |
kind: compute#urlMap name: web-map-http defaultUrlRedirect: httpsRedirect: True |
Reindirizzamento da HTTP a HTTPS + host Reindirizzamento http://any-host-name/path a https://www.example.com/path |
kind: compute#urlMap name: web-map-http defaultUrlRedirect: httpsRedirect: True hostRedirect: "www.example.com" |
Reindirizzamento da HTTP a HTTPS + reindirizzamento host + reindirizzamento percorso completo Reindirizzamento http://any-host-name/path a https://www.example.com/newPath |
kind: compute#urlMap name: web-map-http defaultUrlRedirect: httpsRedirect: True hostRedirect: "www.example.com" pathRedirect: "/newPath" |
Reindirizzamento da HTTP a HTTPS + reindirizzamento host + reindirizzamento prefisso Reindirizzamento http://any-host-name/originalPath a https://www.example.com/newPrefix/originalPath |
kind: compute#urlMap name: web-map-http defaultUrlRedirect: httpsRedirect: True hostRedirect: "www.example.com" prefixRedirect: "/newPrefix" |
Il seguente snippet parziale annota ogni risorsa API:
defaultUrlRedirect: redirectResponseCode: MOVED_PERMANENTLY_DEFAULT httpsRedirect: True # True if you want https://, false if you want http:// hostRedirect: "new-host-name.com" # Omit to keep the requested host pathRedirect: "/new-path" # Omit to keep the requested path; mutually exclusive to prefixRedirect prefixRedirect: "/newPrefix" # Omit to keep the requested path; mutually exclusive to pathRedirect stripQuery: False # True to omit everything in the URL after ? ...
Passaggi successivi
Per aggiungere, convalidare, testare, elencare o eliminare una mappa degli URL, consulta Utilizzare le mappe degli URL.