
Kubernetes ha rivoluzionato l'orchestrazione dei container e Google Kubernetes Engine (GKE) offre una piattaforma gestita e potente per il deployment e lo scaling di applicazioni containerizzate. Pur disponendo di solide funzionalità di service discovery e load balancing, GKE presenta ancora alcuni limiti quando si tratta di applicare logiche di elaborazione personalizzate al traffico prima che raggiunga i workloads.
È qui che entrano in gioco le Service Extensions: una soluzione efficace per personalizzare e potenziare il Cloud Load Balancing tramite la GKE Gateway API (Nota: si tratta di una funzionalità Kubernetes, non correlata al servizio Google Cloud API Gateway).
Cosa sono le Service Extensions in GCP?
Le Service Extensions consentono di iniettare logica personalizzata direttamente nel data path, abilitando modifiche avanzate al traffico che attraversa il load balancer. Funzionano come una pipeline in cui è possibile inserire il proprio codice in vari punti per manipolare richieste e risposte senza alcun impatto sui backend.
Esistono due tipologie principali di Service Extensions:
- Plugins: consentono di inserire codice personalizzato in modalità inline direttamente nel data path di rete. Realizzati con WebAssembly (Wasm) e con la Proxy-Wasm ABI, i plugin vengono eseguiti come moduli Wasm su un'infrastruttura sandbox gestita da Google. Sono progettati per operazioni a bassa latenza e si rivelano ideali per logiche leggere che devono essere eseguite molto vicino al data plane.

- Callouts: permettono al Cloud Load Balancing di effettuare chiamate gRPC verso servizi esterni — sia servizi gestiti da Google sia servizi gestiti dall'utente (inclusi quelli in esecuzione su Pod GKE). I Callouts offrono maggiore flessibilità, perché possono riutilizzare software esistente e presentano meno restrizioni a runtime, risultando adatti a logiche più complesse che richiedono dati o stato esterni.

Il team di GKE ha recentemente annunciato il supporto in preview alle Service Extensions nella Gateway API. Questo permette di manipolare header e payload HTTP di richieste e risposte e persino di controllare il routing del traffico, il tutto senza alterare le selezioni dei backend service esistenti né le policy di sicurezza.
Tipi di Service Extensions per la GKE Gateway API
Il controller GKE Gateway supporta attualmente due tipologie di Callouts Service Extensions, ciascuna pensata per finalità specifiche:
- ``GCPRoutingExtension: questa tipologia di estensione è dedicata al controllo del routing del traffico. È ideale negli scenari in cui occorre indirizzare il traffico verso backend service diversi o applicare logiche di routing personalizzate.

- ``GCPTrafficExtension: questa tipologia di estensione consente di modificare header e payload di richieste e risposte. Opera senza incidere sulla selezione del backend service né sulle policy di sicurezza, risultando perfetta per la trasformazione e l'arricchimento dei dati.

Configurare le Service Extensions nella GKE Gateway API
Per sperimentare la funzionalità Service Extensions in GKE serve un cluster GKE in versione 1.33 o successiva con la Gateway API abilitata. Prima di testare la funzionalità, si consiglia inoltre di consultare le attuali restrizioni e limitazioni delle Gateway Service Extensions in GKE.
Effettuare il deploy di un Gateway
Per configurare una Service Extension occorre prima effettuare il deploy di una risorsa Gateway, oppure verificare che la risorsa Gateway esistente utilizzi una GatewayClass supportata. Per i dettagli sui load balancer supportati si rimanda a Google Cloud Service Extension compatibility with GatewayClasses.
- Applicare il manifest seguente per effettuare il deploy di un semplice gateway regionale di tipo application load balancer.

Effettuare il deploy di un'applicazione di backend di esempio
- Applicare il manifest seguente per effettuare il deploy dell'applicazione di backend di esempio e delle risorse HTTPRoute. La HTTPRoute definisce il comportamento di routing delle richieste HTTP da un listener Gateway verso l'applicazione di backend.

- Inviare una richiesta di esempio all'indirizzo IP della Gateway API per verificare la risposta del backend.
L'output sarà simile al seguente:

Effettuare il deploy di un servizio di callout di backend
Un servizio di callout implementa la logica personalizzata per le Gateway Service Extensions in GKE. Il Load Balancer invoca le applicazioni di backend in base alle configurazioni GCPTrafficExtension o GCPRoutingExtension per modificare o instradare il traffico.
Quando si effettua il deploy di un servizio di callout nel cluster GKE, occorre soddisfare tutti i requisiti indicati nelle limitazioni.
Generare un certificato self-signed per il backend del servizio di callout utilizzando mkcert o un altro metodo a piacere. È un passaggio necessario perché bisogna usare HTTP2 come
appProtocol, che richiede TLS end-to-end.Creare un Secret K8S con il certificato self-signed.

- Applicare il manifest seguente per effettuare il deploy dell'applicazione di callout di esempio. Per ulteriori esempi di codice si rimanda al repository GitHub service-extensions.

- L'applicazione di esempio esegue una semplice modifica degli header sia per la richiesta sia per la risposta. Per maggiori dettagli si veda service_callout_example.py; da qui è possibile sviluppare la propria applicazione in base ai requisiti di business.
Configurare le Service Extensions
Per personalizzare il flusso di traffico è possibile configurare una GCPRoutingExtension oppure una GCPTrafficExtension.
- Applicare il manifest seguente per creare una risorsa
GCPRoutingExtension: il load balancer invocherà l'app del servizio di estensione per le richieste inviate al pathrouteextensione le inoltrerà poi all'applicazione di backend store.

- Aggiornare la risorsa
HTTPRoutecon l'hostservice-extensions.com, dato che il servizio di callout esegue una modifica dell'header host prima di inoltrare le richieste all'app store.

- Il controller della Gateway API potrebbe impiegare alcuni minuti per sincronizzare le modifiche. Eseguire il comando
kubectl describe gateway GATEWAY_NAMEper confermare che laGCPRoutingExtensionsia associata al Gateway.

- L'output mostra le annotation che GKE utilizza per memorizzare i collegamenti tra il Gateway e le risorse Google Cloud sottostanti. L'annotation
networking.gke.io/lb-route-extensionsconferma il binding del gateway allaGCPRoutingExtension. - A questo punto, testare il traffico verso il path
routeextensionsostituendoGATEWAY_IP_ADDRESS.

- L'output sarà simile al seguente: si possono notare le modifiche all'
host_headerall'interno della risposta.
La GCPTrafficExtension consente di implementare logiche personalizzate su richieste e risposte, routing sofisticato, trasformazioni e policy di sicurezza.
Applicare il manifest seguente per creare una risorsa
GCPTrafficExtension: il load balancer invocherà l'app del servizio di estensione per le richieste inviate al pathtrafficetension. È possibile personalizzare e controllare l'invocazione del load balancer verso l'applicazione di callout aggiornando il camposupportedEvents.A questo punto, testare il traffico verso il path
trafficextensionsostituendoGATEWAT_IP_ADDRESS.

- L'output sarà simile al seguente: si possono notare le modifiche all'header di risposta in
helloe la rimozione del response body.
Sample Pod logs:Le GCP Service Extensions per la GKE Gateway API rappresentano un significativo passo avanti nelle possibilità che i team di piattaforma hanno per gestire, modellare e mettere in sicurezza il traffico a livello di ingress. Che si tratti di applicare un'autenticazione personalizzata, manipolare header, eseguire traffic shaping o integrarsi con sistemi esterni, le Service Extensions permettono di farlo in modo dichiarativo e scalabile.
Pur essendo ancora in preview, è un'ottima occasione per esplorare le Service Extensions, testarle in ambienti non di produzione e sviluppare servizi di estensione riutilizzabili e su misura per i requisiti della propria piattaforma.
Se sta valutando un PoC, non è il solo. DoiT è al Suo fianco per aiutarLa a valutare, pianificare e migrare, con un forte focus sui Suoi obiettivi di business. Con oltre 100 senior cloud expert specializzati nella progettazione di soluzioni cloud su misura, il nostro team è pronto a guidarLa in questo percorso in modo fluido e a ottimizzare la Sua infrastruttura per garantire compliance e rispondere in modo efficiente alle esigenze future.
I nostri esperti sono pronti a offrirLe guida strategica e competenza tecnica in ogni fase del percorso. Valutiamo insieme la soluzione più adatta alla Sua azienda in questa fase di policy enforcement, per assicurare un'infrastruttura cloud robusta, conforme e ottimizzata per il successo. Ci contatti oggi stesso.