For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

Les clusters provisionnés avec Traefik ou Istio supportent déjà la Gateway API nativement — ce plan de migration s'applique uniquement aux clusters utilisant le contrôleur NGINX Ingress (ingress-nginx).

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
Périmètre
Condition

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

  1. Déployer NGF via Helm dans le namespace nginx-gateway (nouveau namespace — aucun conflit avec les ressources existantes)

  2. Créer les ressources Gateway internal-gateway et external-gateway

  3. Créer le ReferenceGrant autorisant les HTTPRoutes dans nginx-gateway à cibler des Services dans ingress-nginx

  4. nginx-int libère les hostPorts 80/443 — le DaemonSet internal-gateway les prend

  5. nginx-ext libère les hostPorts 8081/8443 — le DaemonSet external-gateway les prend

  6. Créer les HTTPRoutes catch-all : internal-gateway → ClusterIP nginx-int, external-gateway → ClusterIP nginx-ext

  7. Config 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 :

  1. Créer un HTTPRoute avec le hostname exact pointant directement vers le Service backend

  2. Supprimer la ressource Ingress correspondante

  3. Vé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

Annotation NGINX Ingress
Équivalent NGF
Effort

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

Les fonctionnalités alpha (AuthenticationFilter, RateLimitPolicy, SnippetsFilter) sont opérationnelles mais présentent un risque de stabilité d'API lors des mises à jour de NGF. SnippetsFilter est désactivé par défaut et doit être activé par l'équipe plateforme. Contactez ITCare si votre application utilise ces patterns.

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.

Les cas d'usage marqués (alpha) font appel à des ressources spécifiques à NGF (SnippetsFilter, AuthenticationFilter, RateLimitPolicy, ClientSettingsPolicy) dont l'API peut évoluer lors des mises à jour de NGF. SnippetsFilter est désactivé par défaut — ouvrez un ticket ITCare pour en faire la demande.

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

L'annotation nginx.ingress.kubernetes.io/x-forwarded-prefix est peu fiable depuis ingress-nginx v1.12+. Utilisez directement configuration-snippet avec proxy_set_header comme indiqué ci-dessous.

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.

En alternative au SnippetsFilter (portée par route), l'équipe plateforme peut configurer la réécriture de l'IP réelle globalement pour toutes les routes via une ressource NginxProxy. Contactez ITCare si une configuration à l'échelle du cluster est préférable.

Calendrier Récapitulatif

Phase
Responsable
Description

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