Service Extensions consente ai bilanciatori del carico delle applicazioni supportati di utilizzare i plug-in o inviare callout ai servizi di backend per inserire l'elaborazione personalizzata nel percorso di elaborazione. Le estensioni del traffico vengono eseguite per ultime nel percorso di elaborazione delle richieste e per prime nel percorso di elaborazione delle risposte per modificare le intestazioni e i payload senza influire sulla scelta del servizio di backend. Questa pagina descrive come configurare le estensioni del traffico.
Per una panoramica delle estensioni del bilanciatore del carico delle applicazioni, consulta Panoramica delle estensioni di Cloud Load Balancing.
Un'estensione del traffico per un bilanciatore del carico delle applicazioni rimanda alle seguenti risorse:
- Una regola di forwarding a cui collegarsi
- Un plug-in o un servizio di backend di callout i cui backend eseguono l'API gRPC
ext_proc
Un'estensione del traffico raggruppa i servizi di estensione correlati in una o più catene. Puoi configurare sia i plug-in sia i callout nella stessa catena di estensioni. Ogni catena di estensioni seleziona il traffico su cui agire utilizzando le condizioni di corrispondenza CEL (Common Expression Language). Il bilanciatore del carico valuta una richiesta in base alla condizione di corrispondenza di ogni catena in modo sequenziale. Quando una richiesta soddisfa le condizioni definite da una catena, tutte le estensioni della catena agiscono sulla richiesta. Solo una catena corrisponde a una determinata richiesta.
Ogni estensione in una catena può avere il proprio insieme di eventi supportati. Le modifiche apportate da un'estensione al contenuto della richiesta e della risposta sono visibili alle estensioni rimanenti nella catena. Per le estensioni configurate per supportare gli eventi di risposta, la sequenza delle estensioni viene invertita nel percorso di risposta.
L'estensione del traffico fa riferimento alla regola di forwarding del bilanciatore del carico a cui collegarsi. Dopo aver configurato la risorsa, il bilanciatore del carico inizia a inviare le richieste corrispondenti ai servizi di estensione.
Per informazioni sui limiti relativi alle estensioni, consulta la pagina Quote e limiti.
Configurare utilizzando i plug-in
Questa sezione mostra come configurare un'estensione del traffico utilizzando un plug-in.
Tutte le risorse di estensione che fanno riferimento a un determinato plug-in devono essere dello stesso tipo. Le estensioni devono anche avere lo stesso schema di bilanciamento del carico. Non puoi configurare le estensioni di Cloud Load Balancing con i plug-in già utilizzati nelle estensioni di Media CDN.
Prima di iniziare
Crea un plug-in che contenga il tuo codice personalizzato.
Crea e configura un bilanciatore del carico delle applicazioni che supporti i plug-in di estensione del traffico.
Ad esempio, configura un bilanciatore del carico delle applicazioni esterno globale con backend di gruppi di istanze VM.
Configura un modo per inviare richieste di test al tuo servizio, ad esempio eseguendo curl. Se utilizzi un bilanciatore del carico interno, crea una VM client per i test.
Configurare un'estensione del traffico utilizzando un plug-in
L'esempio seguente ti aiuta a configurare un'estensione del traffico utilizzando un plug-in che aggiunge un'intestazione della risposta, hello: service-extensions, quando l'host corrisponde a example.com.
Verifica se esiste una corrispondenza per
example.comnella mappa URL.Esegui il seguente comando
curlsulla regola di forwarding nella VM client:curl -D - -H "host: example.com" FORWARDING_RULE_IP
Sostituisci
FORWARDING_RULE_IPcon l'indirizzo IP della regola di forwarding. Per trovare l'indirizzo IP, utilizza ilgcloud compute forwarding-rules describecomando.L'output è simile al seguente:
HTTP/1.1 200 OK ... content-length: 46 content-type: text/html via: 1.1 google
Configura l'estensione del traffico.
Console
Nella Google Cloud console vai alla pagina Service Extensions.
Fai clic su Crea estensione.
Si apre una procedura guidata che ti illustra alcuni passaggi iniziali.
Per il prodotto, seleziona Bilanciamento del carico. Poi fai clic su Continua.
Viene visualizzato un elenco di bilanciatori del carico delle applicazioni supportati.
Per il tipo di bilanciatore del carico, seleziona Bilanciatore del carico delle applicazioni esterno globale o Bilanciatore del carico delle applicazioni interno tra regioni. Poi fai clic su Continua.
Per il tipo di estensione, seleziona Estensioni del traffico e poi fai clic su Continua.
Per aprire il modulo Crea estensione, fai clic su Continua.
Nel modulo Crea estensione, tieni presente che le selezioni precedenti, che vengono visualizzate nella parte superiore della pagina, non sono modificabili.
Nella sezione Informazioni di base, segui questi passaggi:
Specifica un nome univoco per l'estensione.
Il nome deve iniziare con una lettera minuscola seguita da un massimo di 62 lettere minuscole, numeri o trattini e non deve terminare con un trattino.
(Facoltativo) Inserisci una breve descrizione dell'estensione utilizzando un massimo di 1024 caratteri.
(Facoltativo) Nella sezione Etichette, fai clic su Aggiungi etichetta. Poi, nella riga visualizzata, segui questi passaggi:
- In Chiave, inserisci un nome chiave.
- In Valore, inserisci un valore per la chiave.
Per aggiungere altre coppie chiave-valore, fai clic su Aggiungi etichetta. Puoi aggiungere un massimo di 64 coppie chiave-valore.
Per saperne di più sulle etichette, consulta Creare e aggiornare le etichette per i progetti.
In Regole di forwarding, seleziona una o più regole di forwarding da associare all'estensione, ad esempio
http-content-rule.Le regole di forwarding già associate a un'altra estensione non possono essere selezionate e vengono visualizzate come non disponibili.
In Estensione, per aggiungere un'estensione da eseguire per una richiesta corrispondente, segui questi passaggi:
Per trovare le richieste per le quali viene eseguita la catena di estensioni, in Condizione di corrispondenza, specifica un'espressione CEL (Common Expression Language) , ad esempio
request.host == "example.com".In Tipo di programmabilità, seleziona Plug-in.
In Plug-in, seleziona un plug-in creato utilizzando Service Extensions per lo stesso tipo di estensione e prodotto.
In Eventi, seleziona uno o più tipi di eventi HTTP che chiamano l'estensione.
In Attributi di forwarding, seleziona gli attributi che tu vuoi che l'estensione inoltri. Per saperne di più, consulta Attributi supportati.
In Intestazioni di forwarding, fai clic su Aggiungi intestazione, quindi aggiungi le intestazioni HTTP da inoltrare all'estensione (dal client o dal backend). Se non viene specificata un'intestazione, vengono inviate tutte le intestazioni.
(Facoltativo) Se l'estensione va in timeout o non riesce e vuoi che l'elaborazione della richiesta o della risposta continui, in Fail open, seleziona Attivato. Vengono eseguite anche le estensioni successive nella catena.
Per impostazione predefinita, l'opzione Fail open non è selezionata. In questo caso, quando si verifica un errore, l'elaborazione della richiesta o della risposta si interrompe. Se le intestazioni della risposta non sono state inviate al client downstream, al client viene restituito un codice di stato HTTP
500generico. Se le intestazioni della risposta sono state recapitate, il flusso HTTP al client viene reimpostato.L'opzione predefinita di mantenere Fail open deselezionata è preferibile quando si dà la priorità alla sicurezza o all'integrità. L'attivazione di Fail open, soprattutto per le operazioni non critiche, è utile quando si dà la priorità alla disponibilità.
Se vuoi specificare più estensioni o catene di estensioni anziché una singola estensione, fai clic sul pulsante Passa alla modalità avanzata alla fine del modulo e specifica le estensioni e le catene richieste. Le estensioni vengono eseguite nella sequenza in cui sono elencate.
Specifica nomi univoci per ogni estensione e catena di estensioni. I nomi devono essere conformi a RFC-1034, utilizzare solo lettere minuscole, numeri e trattini e avere una lunghezza massima di 63 caratteri. Inoltre, il primo carattere deve essere una lettera e l'ultimo carattere deve essere una lettera o un numero.
Fai clic su Crea estensione.
gcloud
Definisci il plug-in in un file YAML e associalo a una regola di forwarding, ad esempio
http-content-rule.cat >traffic-plugin.yaml <<EOF name: traffic-ext forwardingRules: - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/http-content-rule loadBalancingScheme: EXTERNAL_MANAGED extensionChains: - name: "chain1" matchCondition: celExpression: 'request.host == "example.com"' extensions: - name: 'ext1' service: projects/PROJECT_ID/locations/LOCATION/wasmPlugins/WASM_PLUGIN failOpen: false supportedEvents: - RESPONSE_HEADERS forwardAttributes: - request.host - request.path EOFSostituisci quanto segue:
PROJECT_ID: l' ID progetto.REGION: la regione della regola di forwarding. Il valore deve corrispondere al valore specificato per la località del plug-in.LOCATION: la località del plug-in comeglobalo una regione.WASM_PLUGIN: l'ID o il nome completo del plug-in.
Per saperne di più sui campi del file YAML, consulta ExtensionChain nella documentazione dell'API. Per informazioni sugli attributi supportati, consulta Attributi supportati.
Importa l'estensione del traffico. Utilizza il
gcloud service-extensions lb-traffic-extensions importcomando con i seguenti valori di esempio.gcloud service-extensions lb-traffic-extensions import traffic-ext \ --source=traffic-plugin.yaml \ --location=global
Dopo aver creato un'estensione del traffico, è necessario un po' di tempo prima che il nuovo plug-in venga distribuito in tutte le località. Il tempo potrebbe variare a seconda delle località perché il plug-in non viene distribuito contemporaneamente in tutte le località.
Per verificare che l'estensione del traffico funzioni come previsto, utilizza lo stesso comando
curl:curl -D - -H "host: example.com" FORWARDING_RULE_IP
L'output include l'intestazione della risposta
hello: service-extensions.HTTP/1.1 200 OK ... content-length: 46 content-type: text/ hello: service-extensions via: 1.1 googlePer verificare che l'estensione sia destinata solo al traffico
example.com, ripeti il comandocurlsenza l'intestazionehost.curl -D - FORWARDING_RULE_IP
L'output è simile al seguente:
HTTP/1.1 200 OK ... content-length: 46 content-type: text/html via: 1.1 google
Configurare le estensioni del traffico per i servizi gestiti dall'utente utilizzando i callout
Questa sezione mostra come configurare un'estensione del traffico per un servizio di backend di callout gestito dall'utente utilizzando un callout.
Prima di iniziare
Crea le risorse richieste come descritto in Configurare un servizio di backend di callout.
Configurare un'estensione del traffico utilizzando un callout
L'esempio seguente ti aiuta a configurare un'estensione del traffico utilizzando un callout da chiamare quando l'host corrisponde a example.com. Il server di estensione del traffico nella VM callout-vm aggiunge un'intestazione della risposta, hello: service-extensions, alle richieste corrispondenti.
Verifica se esiste una corrispondenza per
example.comnella mappa URL.Esegui il seguente comando
curlsulla regola di forwarding nella VM client:curl -D - -H "host: example.com" FORWARDING_RULE_IP
Sostituisci
FORWARDING_RULE_IPcon l'indirizzo IP della regola di forwarding. Per trovare l'indirizzo IP, utilizza ilgcloud compute forwarding-rules describecomando.L'output è simile al seguente:
HTTP/1.1 200 OK ... content-length: 46 content-type: text/html via: 1.1 google Page served from: l7-ilb-backend-example-1c7t
Configura l'estensione del traffico.
Console
Nella Google Cloud console vai alla pagina Service Extensions.
Fai clic su Crea estensione.
Si apre una procedura guidata che ti illustra alcuni passaggi iniziali.
Per il prodotto, seleziona Bilanciamento del carico. Poi fai clic su Continua.
Viene visualizzato un elenco di bilanciatori del carico delle applicazioni supportati.
Seleziona un tipo di bilanciatore del carico. Per i bilanciatori del carico a livello di regione, specifica anche la regione. Fai clic su Continua.
Per il tipo di estensione, seleziona Estensioni del traffico e poi fai clic su Continua.
Per aprire il modulo Crea estensione, fai clic su Continua.
Nel modulo Crea estensione, tieni presente che le selezioni precedenti, che vengono visualizzate nella parte superiore della pagina, non sono modificabili.
Nella sezione Informazioni di base, segui questi passaggi:
Specifica un nome univoco per l'estensione.
Il nome deve iniziare con una lettera minuscola seguita da un massimo di 62 lettere minuscole, numeri o trattini e non deve terminare con un trattino.
(Facoltativo) Inserisci una breve descrizione dell'estensione utilizzando un massimo di 1024 caratteri.
(Facoltativo) Nella sezione Etichette, fai clic su Aggiungi etichetta. Poi, nella riga visualizzata, segui questi passaggi:
- In Chiave, inserisci un nome chiave.
- In Valore, inserisci un valore per la chiave.
Per aggiungere altre coppie chiave-valore, fai clic su Aggiungi etichetta. Puoi aggiungere un massimo di 64 coppie chiave-valore.
Per saperne di più sulle etichette, consulta Creare e aggiornare le etichette per i progetti.
In Regole di forwarding, seleziona una o più regole di forwarding da associare all'estensione, ad esempio
l7-ilb-forwarding-rule.Le regole di forwarding già associate a un'altra estensione non possono essere selezionate e vengono visualizzate come non disponibili.
In Estensione, per aggiungere un'estensione da eseguire per una richiesta corrispondente, segui questi passaggi:
In Tipo di programmabilità, seleziona Callout.
Per trovare le richieste per le quali viene eseguita la catena di estensioni, in Condizione di corrispondenza, specifica un'espressione CEL (Common Expression Language) , ad esempio
request.host == "example.com".In Autorità, inserisci l'intestazione
authorityda la richiesta gRPC inviata dal bilanciatore del carico al servizio di estensione.In Servizio di backend, seleziona un servizio di backend creato seguendo le istruzioni riportate in Configurare un servizio di backend di callout.
In Timeout, specifica un valore compreso tra 10 e 1000 millisecondi dopo il quale un messaggio sul flusso va in timeout.
In Eventi, seleziona uno o più tipi di eventi HTTP che chiamano l'estensione.
In Attributi di forwarding, seleziona gli attributi che tu vuoi che l'estensione inoltri. Per saperne di più, consulta Attributi supportati.
In Intestazioni di forwarding, fai clic su Aggiungi intestazione, quindi aggiungi le intestazioni HTTP da inoltrare all'estensione (dal client o dal backend). Se non viene specificata un'intestazione, vengono inviate tutte le intestazioni.
(Facoltativo) Se l'estensione va in timeout o non riesce e vuoi che l'elaborazione della richiesta o della risposta continui, in Fail open, seleziona Attivato. Vengono eseguite anche le estensioni successive nella catena.
Per impostazione predefinita, l'opzione Fail open non è selezionata. In questo caso, quando si verifica un errore, l'elaborazione della richiesta o della risposta si interrompe. Se le intestazioni della risposta non sono state inviate al client downstream, al client viene restituito un codice di stato HTTP
500generico. Se le intestazioni della risposta sono state recapitate, il flusso HTTP al client viene reimpostato.L'opzione predefinita di mantenere Fail open deselezionata è preferibile quando si dà la priorità alla sicurezza o all'integrità. L'attivazione di Fail open, soprattutto per le operazioni non critiche, è utile quando si dà la priorità alla disponibilità.
In Metadati, fai clic su Aggiungi metadati e specifica i valori di esempio come suggerito. In Chiave, specifica
keye in Valore, specificavalue.Fai clic su Aggiungi metadati per aggiungere un'altra coppia chiave-valore. In Chiave, specifica
fre in Valore, specificaforwarding_rule_id.Il campo Metadati consente di trasmettere eventuali informazioni aggiuntive dal bilanciatore del carico al server di estensione. I metadati vengono inviati in un messaggio
ProcessingRequeste codificati comeprotobuf.Struct. Qualsiasi testo all'interno dei metadati che corrisponde all'ID della regola di forwarding specificato viene sostituito con l'URL della risorsa completo della regola di forwarding associata alla richiesta del client.La dimensione totale dei metadati deve essere inferiore a 1 KiB. Il numero totale di chiavi nei metadati deve essere inferiore a 20. La lunghezza di ogni chiave deve essere inferiore a 64 caratteri. La lunghezza di ogni valore deve essere inferiore a 1024 caratteri. Tutti i valori devono essere stringhe.
Se vuoi specificare più estensioni o catene di estensioni anziché una singola estensione, fai clic sul pulsante Passa alla modalità avanzata alla fine del modulo e specifica le estensioni e le catene richieste. Le estensioni vengono eseguite nella sequenza in cui sono elencate.
Specifica nomi univoci per ogni estensione e catena di estensioni. I nomi devono essere conformi a RFC-1034, utilizzare solo lettere minuscole, numeri e trattini e avere una lunghezza massima di 63 caratteri. Inoltre, il primo carattere deve essere una lettera e l'ultimo carattere deve essere una lettera o un numero.
Fai clic su Crea estensione.
gcloud
Definisci il callout in un file YAML e associalo alla regola di forwarding. Utilizza i valori di esempio forniti.
cat >traffic.yaml <<EOF name: traffic-ext forwardingRules: - https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/l7-ilb-forwarding-rule loadBalancingScheme: INTERNAL_MANAGED extensionChains: - name: "chain1" matchCondition: celExpression: 'request.host == "example.com"' extensions: - name: 'ext11' authority: ext11.com service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-callout-service failOpen: false timeout: 0.1s metadata: "key": "value" "fr": "forwarding_rule_id" supportedEvents: - RESPONSE_HEADERS forwardAttributes: - request.host - request.path EOFSostituisci
PROJECT_IDcon l' ID progetto.Il campo
metadatanella configurazione dell'estensione consente di trasmettere eventuali informazioni aggiuntive dal bilanciatore del carico al server di estensione. I metadati vengono inviati in un messaggioProcessingRequeste codificati comeprotobuf.Struct. Qualsiasi testo all'interno dei metadati che corrisponde all'ID della regola di forwarding specificato viene sostituito con l'URL della risorsa completo della regola di forwarding associata alla richiesta del client.La dimensione totale di
metadatadeve essere inferiore a 1 KiB. Il numero totale di chiavi nei metadati deve essere inferiore a 16. La lunghezza di ogni chiave deve essere inferiore a 64 caratteri. La lunghezza di ogni valore deve essere inferiore a 1024 caratteri. Tutti i valori devono essere stringhe.Per saperne di più sui campi del file YAML, consulta ExtensionChain nella documentazione dell'API. Per informazioni sugli attributi supportati, consulta Attributi supportati.
Importa l'estensione del traffico. Utilizza il
gcloud service-extensions lb-traffic-extensions importcomando con i seguenti valori di esempio.gcloud service-extensions lb-traffic-extensions import traffic-ext \ --source=traffic.yaml \ --location=us-west1
Verifica che l'estensione del traffico funzioni come previsto. Utilizza lo stesso comando
curl:curl -D - -H "host: example.com" FORWARDING_RULE_IP
L'output include l'intestazione della risposta
hello: service-extensions.HTTP/1.1 200 OK ... content-length: 46 content-type: text/ hello: service-extensions via: 1.1 google Page served from: l7-ilb-backend-example-1c7tPer verificare che l'estensione sia destinata solo al traffico
example.com, ripeti il comandocurlsenza l'intestazionehost.curl -D - FORWARDING_RULE_IP
L'output è simile al seguente:
HTTP/1.1 200 OK ... content-length: 46 content-type: text/html via: 1.1 google Page served from: l7-ilb-backend-example-1c7t
Passaggi successivi
- Visualizza esempi di plug-in Rust, Go e C++ e strumenti di test nel repository GitHub di Service Extensions per i plug-in.
- Visualizza esempi di server
ext_procin Python e Go nel repository GitHub di Service Extensions per i callout. - Configurare le estensioni di route
- Gestire le estensioni
- Gestire i plug-in
- Configurare un'estensione per un servizio Google