Kubernetes Ingress è da sempre il metodo standard per esporre i servizi all'esterno del cluster, mettendo a disposizione routing, terminazione TLS e load balancing. Con l'aumentare della complessità delle esigenze di networking in Kubernetes, però, Ingress ha iniziato a mostrare i propri limiti, soprattutto negli ambienti multi-tenant, nel controllo avanzato del traffico e nell'estendibilità.
È qui che entra in gioco Gateway API. Pensata come evoluzione di Ingress, Gateway API offre funzionalità più ricche, maggiore flessibilità e un approccio più cloud-native alla gestione del traffico esterno. Introduce elementi chiave come l'accesso basato sui ruoli per le risorse di networking, un modo standardizzato per definire le policy di traffico e il supporto ai pattern di service mesh.
La scelta tra Ingress e Gateway API dipende dai requisiti specifici del progetto: Gateway API è la soluzione ideale per scenari di routing complessi e requisiti di sicurezza stringenti, mentre Ingress resta più adatto agli approcci Kubernetes-native più semplici. In questo articolo vedremo lo strumento ingress2gateway e come può semplificare la migrazione da Ingress a Gateway API.
Cos'è **ingress2gateway?**
Lo strumento Ingress2gateway nasce per semplificare il passaggio dalle risorse Kubernetes Ingress alla più potente ed espressiva Gateway API. Offre un processo di conversione automatizzato e affidabile, che rende la migrazione fluida riducendo al minimo le interruzioni.
Caratteristiche e funzionalità principali:
✅ Conversione automatica
- Analizza in modo intelligente le risorse Ingress esistenti e genera le configurazioni Gateway API equivalenti, comprese le risorse Gateway, HTTPRoute e BackendPolicy.
- Gestisce regole, annotazioni e configurazioni Ingress complesse, traducendole nelle corrispondenti specifiche Gateway API.
✅ Conserva le regole di routing:
- Mappa con precisione percorsi URL, hostname e servizi di backend dalle regole Ingress alle regole HTTPRoute.
- Garantisce la coerenza del routing del traffico dopo la migrazione, evitando interruzioni di servizio inattese.
- Supporta diverse modalità di routing, come path matching (prefix, exact, regex), hostname matching e routing basato sugli header.
✅ Supporta diversi Ingress Controller
- Allo stato attuale lo strumento supporta i provider apisix, cilium, ingress-nginx, istio, gce, kong e openapi, e la community è al lavoro per aggiungerne altri.
✅ Favorisce una migrazione graduale:
- Permette un'adozione incrementale di Gateway API, consentendo la conversione selettiva delle risorse Ingress.
- Supporta la modalità dry-run per visualizzare in anteprima i risultati della conversione prima di applicare le modifiche al cluster.
- Consente di testare in parallelo le risorse Ingress e Gateway API.
Ingress2gateway in azione
Per provare lo strumento serve un cluster Kubernetes con Gateway API installata. Diversi progetti supportano Gateway API e alcuni cloud provider ne offrono anche un'implementazione completamente gestita.
Nell'esempio che segue utilizzo Google Kubernetes Engine e l'ingress controller predefinito di GKE, ingress-gce.
Deploy del workload e della risorsa ingress di esempio
- Eseguire il deploy del workload di esempio httpbin.
---
apiVersion: v1
kind: Service
metadata:
name: httpbin
labels:
app: httpbin
spec:
ports:
- name: http
port: 8000
targetPort: 80
selector:
app: httpbin
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin
spec:
replicas: 1
selector:
matchLabels:
app: httpbin
template:
metadata:
labels:
app: httpbin
spec:
containers:
- image: docker.io/kennethreitz/httpbin
imagePullPolicy: IfNotPresent
name: httpbin
ports:
- containerPort: 80

Esempio di deployment e service Kubernetes
- Creare una risorsa Ingress per il deployment di httpbin.
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: httpbin-ingress
namespace: default
spec:
rules:
- host: httpbin.example.com
http:
paths:
- backend:
service:
name: httpbin
port:
number: 8000
path: /
pathType: Prefix

Esempio di risorsa ingress
Installare ed eseguire ingress2gateway
- Seguire la documentazione di installazione per installare ingress2gateway oppure scaricare il binario dalla pagina delle release.
- Eseguire ingress2gateway per il provider in uso. Lo strumento legge le risorse ingress e/o le CRD specifiche del provider da un cluster Kubernetes o da un file e restituisce su stdout le risorse Gateway API equivalenti in formato YAML/JSON.
L'output sarà simile al seguente:

Esempio di risorse gatewayapi generate da ingress2gateway
Nota: ingress2gateway non è pensato per copiare le annotazioni da Ingress a Gateway API, ma per convertirle in CRD Gateway; alcune annotazioni e/o CRD specifiche dei provider, anche se molto diffuse, potrebbero non essere ancora supportate. Per l'elenco aggiornato dei provider supportati e la relativa documentazione consultare la pagina dei provider supportati.

Esempio di risorse gateway api
- Verificare il manifest generato per assicurarsi che contenga tutte le configurazioni necessarie prima di applicarlo in produzione. Eseguire un test end-to-end prima di rimuovere le risorse ingress esistenti.
Ingress tradizionale ha svolto bene il suo lavoro per anni, ma Gateway API porta la gestione del traffico in Kubernetes a un nuovo livello di controllo e flessibilità. Con funzionalità di routing avanzate, policy di sicurezza più solide e supporto nativo al multi-tenancy, Gateway API è progettata per rispondere alle esigenze in continua evoluzione del networking cloud-native. Pronti a fare il salto? Lo strumento community-driven ingress2gatewayapi semplifica il processo di migrazione e garantisce una transizione senza intoppi.
Ci auguriamo che questo articolo Le sia stato utile. Se desidera approfondire o è interessato ai nostri servizi, non esiti a contattarci qui.