Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Ingress2gateway: migrare da Kubernetes Ingress a Gateway API senza complicazioni

By Chimbu ChinnaduraiMar 31, 20254 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

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

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