Configurare un'estensione del traffico

Service Extensions consente ai bilanciatori del carico delle applicazioni supportati di utilizzare 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 la panoramica delle estensioni Cloud Load Balancing.

Un'estensione del traffico per un bilanciatore del carico delle applicazioni punta 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 Common Expression Language (CEL). Il bilanciatore del carico valuta una richiesta in base alla condizione di corrispondenza di ogni catena in modo sequenziale. Quando una richiesta corrisponde alle condizioni definite da una catena, tutte le estensioni della catena agiscono sulla richiesta. Solo una catena corrisponde a una determinata richiesta.

Ogni estensione di una catena può avere il proprio insieme di eventi supportati. Le modifiche apportate da un'estensione ai contenuti di richiesta e risposta sono visibili alle estensioni rimanenti nella catena. Per le estensioni configurate per supportare gli eventi di risposta, la sequenza di 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. Inoltre, le estensioni devono avere lo stesso schema di bilanciamento del carico. Non puoi configurare le estensioni Cloud Load Balancing con plug-in già utilizzati nelle estensioni Media CDN.

Prima di iniziare

  1. Crea un plug-in che contenga il tuo codice personalizzato.

  2. 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.

  3. 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 il 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 di risposta, hello: service-extensions, quando l'host corrisponde a example.com.

  1. Controlla se esiste una corrispondenza per example.com nella mappa URL.

    1. Esegui il seguente comando curl sulla regola di forwarding nella VM client:

      curl -D - -H "host: example.com" FORWARDING_RULE_IP
      

      Sostituisci FORWARDING_RULE_IP con l'indirizzo IP della regola di forwarding. Per trovare l'indirizzo IP, utilizza il comando gcloud compute forwarding-rules describe.

      L'output è simile al seguente:

      HTTP/1.1 200 OK
      ...
      content-length: 46
      content-type: text/html
      via: 1.1 google
      
  2. Configura l'estensione del traffico.

    Console

    1. Nella console Google Cloud , vai alla pagina Estensioni di servizio.

      Vai a Service Extensions

    2. Fai clic su Crea estensione.

      Si apre una procedura guidata che ti guiderà attraverso alcuni passaggi iniziali.

    3. Per il prodotto, seleziona Bilanciamento del carico. Quindi, fai clic su Continua.

      Viene visualizzato un elenco di bilanciatori del carico delle applicazioni supportati.

    4. Per il tipo di bilanciatore del carico, seleziona il bilanciatore del carico delle applicazioni esterno globale o il bilanciatore del carico delle applicazioni interno tra regioni. Quindi, fai clic su Continua.

    5. Per il tipo di estensione, seleziona Estensioni di traffico, quindi fai clic su Continua.

    6. Per aprire il modulo Crea estensione, fai clic su Continua.

      Nel modulo Crea estensione, nota che le selezioni precedenti, visualizzate nella parte superiore della pagina, non sono modificabili.

    7. Nella sezione Nozioni di base, segui questi passaggi:

      1. 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.

      2. (Facoltativo) Inserisci una breve descrizione dell'estensione utilizzando fino a 1024 caratteri.

      3. (Facoltativo) Nella sezione Etichette, fai clic su Aggiungi etichetta. Quindi, nella riga visualizzata, procedi nel seguente modo:

        • In Chiave, inserisci un nome per la 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.

    8. Per Regole di forwarding, seleziona una o più regole di forwarding da associare all'estensione, ad esempio http-content-rule.

      Le regole di inoltro già associate a un'altra estensione non possono essere selezionate e vengono visualizzate come non disponibili.

    9. Per le catene di estensioni, aggiungi una o più catene di estensioni da eseguire per una richiesta corrispondente.

      Per aggiungere una catena di estensioni, procedi nel seguente modo, quindi fai clic su Fine:

      • Per Nuova catena di estensioni, specifica un nome univoco.

        Il nome deve essere conforme 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.

      • Per trovare le richieste per le quali viene eseguita la catena di estensioni, specifica un'espressione Common Expression Language (CEL) per Condizione di corrispondenza, ad esempio request.host == "example.com".

        Per ulteriori informazioni sulle espressioni CEL, fai clic su Guida alla sintassi o consulta il riferimento al linguaggio del matcher CEL.

      • Aggiungi una o più estensioni da eseguire per una richiesta corrispondente.

        Per ogni estensione, nella sezione Estensioni, procedi nel seguente modo e poi fai clic su Fine:

        • Per Tipo di programmabilità, seleziona Plug-in.

        • In Nome estensione, specifica un nome univoco.

          Il nome deve essere conforme 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.

        • In Plug-in, seleziona un plug-in creato utilizzando Service Extensions per lo stesso prodotto e tipo di estensione.

        • Per Eventi, seleziona uno o più tipi di eventi HTTP che chiamano l'estensione.

        • Per Inoltra intestazioni, fai clic su Aggiungi intestazione e poi 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 scade o non funziona e vuoi che l'elaborazione della richiesta o della risposta continui, per 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 500 generico. Se le intestazioni della risposta sono state recapitate, il flusso HTTP al client viene reimpostato.

          L'opzione predefinita di non selezionare Fail open è preferibile quando si dà la priorità alla sicurezza o all'integrità. L'attivazione di Fail open, in particolare per le operazioni non critiche, è utile quando si dà la priorità alla disponibilità.

    10. Fai clic su Crea estensione.

    gcloud

    1. Definisci il plug-in in un file YAML e associalo a una regola di inoltro, 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
      EOF
      

      Sostituisci quanto segue:

      • PROJECT_ID: l'ID progetto.
      • REGION: la regione della regola di forwarding. Il valore deve corrispondere a quello specificato per la posizione del plug-in.
      • LOCATION: la posizione del plug-in come global o una regione.
      • WASM_PLUGIN: l'ID o il nome completo del plug-in.
    2. Importa l'estensione traffico. Utilizza il comando gcloud service-extensions lb-traffic-extensions import con i seguenti valori di esempio.

      gcloud service-extensions lb-traffic-extensions import traffic-ext \
          --source=traffic-plugin.yaml \
          --location=global
      

    Dopo la creazione di un'estensione del traffico, è necessario un po' di tempo prima che il nuovo plug-in venga distribuito in tutte le sedi. L'ora potrebbe variare a seconda della località perché il plug-in non viene distribuito in tutte le località contemporaneamente.

  3. 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 google
    

    Per verificare che l'estensione abbia come target solo il traffico example.com, ripeti il comando curl senza l'intestazione host.

    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
    

Configura le estensioni del traffico ai servizi gestiti dall'utente utilizzando i callout

Questa sezione mostra come configurare un'estensione del traffico a un servizio di backend di callout gestito dall'utente utilizzando un callout.

Prima di iniziare

Crea le risorse richieste come descritto in Configura un servizio di backend 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 in callout-vm aggiunge un'intestazione di risposta, hello: service-extensions, alle richieste corrispondenti.

  1. Controlla se esiste una corrispondenza per example.com nella mappa URL.

    1. Esegui il seguente comando curl sulla regola di forwarding nella VM client:

      curl -D - -H "host: example.com" FORWARDING_RULE_IP
      

      Sostituisci FORWARDING_RULE_IP con l'indirizzo IP della regola di forwarding. Per trovare l'indirizzo IP, utilizza il comando gcloud compute forwarding-rules describe.

      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
      
  2. Configura l'estensione del traffico.

    Console

    1. Nella console Google Cloud , vai alla pagina Estensioni di servizio.

      Vai a Service Extensions

    2. Fai clic su Crea estensione.

      Si apre una procedura guidata che ti guiderà attraverso alcuni passaggi iniziali.

    3. Per il prodotto, seleziona Bilanciamento del carico. Quindi, fai clic su Continua.

      Viene visualizzato un elenco di bilanciatori del carico delle applicazioni supportati.

    4. Seleziona un tipo di bilanciatore del carico. Per i bilanciatori del carico a livello di regione, specifica anche la regione. Fai clic su Continua.

    5. Per il tipo di estensione, seleziona Estensioni di traffico, quindi fai clic su Continua.

    6. Per aprire il modulo Crea estensione, fai clic su Continua.

      Nel modulo Crea estensione, nota che le selezioni precedenti, visualizzate nella parte superiore della pagina, non sono modificabili.

    7. Nella sezione Nozioni di base, segui questi passaggi:

      1. 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.

      2. (Facoltativo) Inserisci una breve descrizione dell'estensione utilizzando fino a 1024 caratteri.

      3. (Facoltativo) Nella sezione Etichette, fai clic su Aggiungi etichetta. Quindi, nella riga visualizzata, procedi nel seguente modo:

        • In Chiave, inserisci un nome per la 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.

    8. Per Regole di forwarding, seleziona una o più regole di forwarding da associare all'estensione, ad esempio l7-ilb-forwarding-rule.

      Le regole di inoltro già associate a un'altra estensione non possono essere selezionate e vengono visualizzate come non disponibili.

    9. Per le catene di estensioni, aggiungi una o più catene di estensioni da eseguire per una richiesta corrispondente.

      Per aggiungere una catena di estensioni, procedi nel seguente modo, quindi fai clic su Fine:

      • Per Tipo di programmabilità, seleziona Callout.

      • Per Nome nuova catena di estensioni, specifica un nome univoco.

        Il nome deve essere conforme 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.

      • Per trovare le richieste per le quali viene eseguita la catena di estensioni, specifica un'espressione Common Expression Language (CEL) per Condizione di corrispondenza, ad esempio request.host == "example.com".

        Per ulteriori informazioni sulle espressioni CEL, fai clic su Guida alla sintassi o consulta il riferimento al linguaggio del matcher CEL.

      • Aggiungi una o più estensioni da eseguire per una richiesta corrispondente.

        Per ogni estensione, nella sezione Estensioni, procedi nel seguente modo e poi fai clic su Fine:

        • In Nome estensione, specifica un nome univoco.

          Il nome deve essere conforme 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.

        • Per Authority, inserisci l'intestazione authority dalla richiesta gRPC inviata dal bilanciatore del carico al servizio di estensione.

        • Per Servizio di backend, seleziona un servizio di backend creato seguendo le istruzioni riportate in Configurare un servizio di backend callout.

        • Per Timeout, specifica un valore compreso tra 10 e 1000 millisecondi dopo il quale un messaggio nello stream scade.

        • Per Eventi, seleziona uno o più tipi di eventi HTTP che chiamano l'estensione.

        • Per Inoltra intestazioni, fai clic su Aggiungi intestazione e poi 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 scade o non funziona e vuoi che l'elaborazione della richiesta o della risposta continui, per 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 500 generico. Se le intestazioni della risposta sono state recapitate, il flusso HTTP al client viene reimpostato.

          L'opzione predefinita di non selezionare Fail open è preferibile quando si dà la priorità alla sicurezza o all'integrità. L'attivazione di Fail open, in particolare 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 key e in Valore, specifica value.

          Fai clic su Aggiungi metadati per aggiungere un'altra coppia chiave-valore. Per Chiave, specifica fr e per Valore, specifica forwarding_rule_id.

          Il campo Metadati consente di trasferire informazioni aggiuntive dal bilanciatore del carico al server delle estensioni. I metadati vengono inviati in un messaggio ProcessingRequest e codificati come protobuf.Struct. Qualsiasi testo all'interno dei metadati che corrisponde all'ID 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.

    10. Fai clic su Crea estensione.

    gcloud

    1. 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
      EOF
      

      Sostituisci PROJECT_ID con l'ID progetto.

      Il campo metadata nella configurazione dell'estensione consente di trasferire informazioni aggiuntive dal bilanciatore del carico al server di estensione. I metadati vengono inviati in un messaggio ProcessingRequest e codificati come protobuf.Struct. Qualsiasi testo all'interno dei metadati che corrisponde all'ID regola di forwarding specificato viene sostituito con l'URL risorsa completo della regola di forwarding associata alla richiesta del client.

      La dimensione totale di metadata deve 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.

    2. Importa l'estensione traffico. Utilizza il comando gcloud service-extensions lb-traffic-extensions import con i seguenti valori di esempio.

      gcloud service-extensions lb-traffic-extensions import traffic-ext \
          --source=traffic.yaml \
          --location=us-west1
      
  3. 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-1c7t
    

    Per verificare che l'estensione abbia come target solo il traffico example.com, ripeti il comando curl senza l'intestazione host.

    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