Migration vers la Gateway API (NGF)
Plan de migration étape par étape depuis le contrôleur NGINX Ingress vers NGINX Gateway Fabric (NGF) sur les clusters cegedim.cloud
Contexte
Le contrôleur NGINX Ingress (ingress-nginx) a atteint sa fin de vie. Le projet upstream ne reçoit plus de nouvelles fonctionnalités — uniquement des correctifs de sécurité, pour une durée limitée. NGINX Gateway Fabric (NGF) est son remplaçant sur cegedim.cloud, implémentant la Kubernetes Gateway API standard.
Ce guide couvre la migration des clusters existants depuis ingress-nginx vers NGF.
Pour une explication complète de la Gateway API et de NGF, voir Gateway API.
Processus RFC
La migration des clusters existants est gérée via deux RFCs — et non une RFC par cluster :
RFC 1
Tous les clusters hors production
Valide la procédure sur tous les environnements hors-prod en une seule opération coordonnée
RFC 2
Tous les clusters de production
Applique la procédure validée sur tous les clusters de prod après la RFC hors-prod réussie
État Actuel
État Cible
Jour 1 — Migration Plateforme (Zéro Impact Client)
Le Jour 1 est réalisé par l'équipe plateforme cegedim.cloud. Aucun changement F5, aucun changement aux ressources Ingress des clients, aucune interruption de service.
Flux de Trafic Durant le Jour 1
Étapes du Jour 1
Déployer NGF via Helm dans le namespace
nginx-gateway(nouveau namespace — aucun conflit avec les ressources existantes)Créer les ressources Gateway
internal-gatewayetexternal-gatewayCréer le
ReferenceGrantautorisant les HTTPRoutes dansnginx-gatewayà cibler des Services dansingress-nginxnginx-intlibère les hostPorts 80/443 — le DaemonSetinternal-gatewayles prendnginx-extlibère les hostPorts 8081/8443 — le DaemonSetexternal-gatewayles prendCréer les HTTPRoutes catch-all :
internal-gateway→ ClusterIPnginx-int,external-gateway→ ClusterIPnginx-extConfig F5 : aucun changement. Clients : aucun impact. Le trafic transite NGF → nginx-int/nginx-ext → backends, sans changement.
Jour 2+ — Playbook de Migration Applicative
Après le Jour 1, les équipes applicatives peuvent migrer leurs services indépendamment, dans n'importe quel ordre, à leur propre rythme. Il n'y a pas de date limite — les ressources Ingress legacy continuent de fonctionner via la route catch-all jusqu'à ce qu'elles soient explicitement migrées.
Étapes de Migration par Service
Pour chaque service :
Créer un
HTTPRouteavec le hostname exact pointant directement vers leServicebackendSupprimer la ressource
IngresscorrespondanteVérifier — la spécificité du hostname garantit que la nouvelle route prend automatiquement la priorité sur le catch-all
Exemple : Migration d'un Service Simple
Exemple : Migration Partielle par Chemin
Migrer un sous-ensemble de chemins pour un hostname pendant que le reste transite toujours par nginx-int via le catch-all :
Référence de Migration des Annotations
rewrite-target: /$2 (suppression de préfixe)
URLRewrite + ReplacePrefixMatch
Faible
rewrite-target: /chemin-statique
URLRewrite + ReplaceFullPath
Faible
use-regex: "true"
path.type: RegularExpression
Faible
server-snippet / configuration-snippet (en-têtes)
filtre ResponseHeaderModifier
Faible
permanent-redirect
filtre RequestRedirect (statusCode: 301)
Faible
proxy-read/send/connect-timeout
UpstreamSettingsPolicy
Faible
proxy-body-size
ClientSettingsPolicy
Faible
x-forwarded-prefix
filtre RequestHeaderModifier
Faible
auth-type: basic
AuthenticationFilter (alpha)
Moyen
whitelist-source-range
SnippetsFilter (alpha)
Moyen
Limitation de débit (limit-rps / limit-rpm)
RateLimitPolicy (alpha)
Moyen
use-regex + réécriture avec groupe de capture
SnippetsFilter (alpha) + directive rewrite
Moyen
Exemples de cas d'usage
Les 15 cas d'usage suivants ont été validés sur des clusters cegedim.cloud. Chacun présente la ressource NGINX Ingress d'origine et son équivalent NGF.
01 — Suppression de préfixe
Supprimer un préfixe de chemin avant de transmettre au backend (ex. /myapp/hello → /hello).
02 — Réécriture statique de chemin
Remplacer l'intégralité du chemin de la requête par une valeur fixe (/probe → /health).
03 — Correspondance par expression régulière
Faire correspondre des chemins à l'aide d'une expression régulière (ex. /api/v1/resource et /api/v42/resource correspondent ; /api/vX/resource ne correspond pas).
04 — En-têtes de sécurité en réponse
Injecter des en-têtes de sécurité standard (Content-Security-Policy, X-Content-Type-Options, X-XSS-Protection) sur chaque réponse.
05 — Authentification basique (alpha)
Protéger une route avec une authentification HTTP Basic adossée à un secret htpasswd.
06 — Liste blanche d'IP (alpha)
Autoriser les requêtes uniquement depuis des plages CIDR spécifiques ; rejeter toutes les autres avec un 403.
07 — Redirection permanente
Rediriger un chemin vers un hôte et/ou un chemin différent avec un HTTP 301.
08 — Timeouts proxy (alpha)
Configurer les timeouts NGINX par route : connexion, envoi et lecture.
09 — Limite de taille de corps de requête (alpha)
Limiter la taille maximale du corps de la requête (ex. rejeter les uploads au-delà de 700 Ko avec un 413).
10 — Limitation de débit (alpha)
Limiter les requêtes par IP client. Le RateLimitPolicy NGF utilise la sémantique NGINX limit_req — le code de rejet est configurable (503 par défaut avec ingress-nginx, 429 avec NGF).
11 — Réécriture avec groupes de capture regex (alpha)
Réordonner des segments de chemin à l'aide de groupes de capture regex (ex. /foo/status/bar → /bar/foo). Il n'existe pas d'équivalent standard dans la Gateway API — SnippetsFilter est requis.
12 — En-têtes dynamiques via variables NGINX (alpha)
Injecter des en-têtes utilisant des variables NGINX runtime ($host, $request_id, etc.) dans les réponses au client ou dans les requêtes vers le backend. Les filtres standard ResponseHeaderModifier et RequestHeaderModifier ne supportent que des valeurs statiques — utilisez SnippetsFilter pour les valeurs dynamiques.
13 — Retry sur échec upstream (alpha)
Retenter silencieusement les requêtes échouées sur un autre pod avant de renvoyer une erreur au client. Évite qu'un pod défaillant unique ne génère des erreurs 502 lorsque des pods sains sont disponibles.
14 — X-Forwarded-Prefix
Informer le backend du préfixe de chemin public sous lequel il est exposé. Nécessaire lorsque la gateway supprime un préfixe et que le backend génère des URLs absolues ou des redirections (Spring Boot, Django, etc.).
15 — IP client réelle depuis F5 (alpha)
Restaurer l'IP client réelle depuis l'en-tête X-Forwarded-For positionné par le load balancer F5. Sans cette configuration, les backends voient l'IP du F5 sur chaque requête.
Calendrier Récapitulatif
Jour 1
Équipe plateforme
NGF déployé ; nginx-int/nginx-ext libèrent les hostPorts ; HTTPRoutes catch-all créées ; F5 inchangé ; zéro impact client
Jour 2+
Équipes applicatives
Migration des ressources Ingress vers HTTPRoutes, service par service, dans n'importe quel ordre
Jour N
Équipe plateforme
Décommissionnement de nginx-int une fois tout le trafic interne migré vers les HTTPRoutes NGF
Jour M
Équipe plateforme
Décommissionnement de nginx-ext une fois tout le trafic externe migré vers les HTTPRoutes NGF
Support
Pour demander une assistance à la migration ou signaler un problème de compatibilité, ouvrez un ticket via ITCare avec le label Migration Gateway API.
Pour un guide de migration annotation par annotation au-delà du tableau ci-dessus, référez-vous à la documentation officielle de migration de NGINX Gateway Fabric :
Last updated

