Da NGINX Ingress a HAProxy: come tradurre gli snippet di redirect su Kubernetes

Da NGINX Ingress a HAProxy: come tradurre gli snippet di redirect su Kubernetes
Step-by-step migration plan from NGINX to HAProxy with testing and feature comparison

Migrare da NGINX Ingress a HAProxy: la traduzione degli snippet di redirect

Chi gestisce cluster Kubernetes prima o poi si scontra con la necessità di cambiare Ingress Controller, magari passando da NGINX Ingress a HAProxy per motivi di performance, licenze, o standardizzazione aziendale. Uno degli scogli meno documentati di questa migrazione è la traduzione degli snippet personalizzati usati per i redirect su path esatti.

Il problema di partenza

Con NGINX Ingress è comune usare l’annotazione nginx.ingress.kubernetes.io/server-snippet per iniettare regole di redirect personalizzate direttamente nella configurazione del server virtuale, ad esempio per reindirizzare un path esatto verso un altro URL senza toccare l’applicazione backend. Il problema è che questa sintassi non è portabile: HAProxy Ingress Controller non capisce le annotazioni NGINX e richiede un approccio completamente diverso.

La traduzione verso HAProxy

HAProxy Ingress Controller lavora tramite annotazioni proprie e, per i casi più complessi, tramite frontend-snippet con sintassi ACL, il meccanismo nativo di HAProxy per definire condizioni e azioni. Un redirect su path esatto che in NGINX si scriveva come una semplice regola rewrite o return dentro un server-snippet, in HAProxy diventa una combinazione di:

  • una ACL che identifica la condizione (es. path_beg o path esatto)
  • una regola http-request redirect associata a quella ACL

La sintassi ACL richiede un mindset diverso rispetto alle direttive dichiarative di NGINX: non si scrive “cosa fare”, ma si definiscono condizioni booleane e poi si associano azioni a quelle condizioni. Per chi viene da anni di NGINX, è il cambio di paradigma più insidioso della migrazione, più della sintassi in sé.

Un consiglio pratico

Prima di lanciarsi nella traduzione annotazione per annotazione, conviene sempre verificare quale variante di HAProxy Ingress Controller è effettivamente in uso nel cluster: esistono più progetti con questo nome (es. quello mantenuto dalla community Kubernetes vs. quello commerciale di HAProxy Technologies), e le annotazioni supportate, oltre alla sintassi esatta degli snippet, cambiano sensibilmente tra le due.

Un errore comune è copiare esempi trovati online basati sulla variante sbagliata, ottenendo errori di parsing della configurazione che sembrano casuali ma sono in realtà dovuti a un semplice mismatch di versione/progetto.