Nginx Logo

Migrer Kubernetes de nginx-ingress vers ingress-nginx

Posted by

Un Ingress est un objet Kubernetes qui va vous permettre de rediriger un access externe vers d’un de vos service à l’intérieur de votre cluster. Nginx-ingress et Ingress-nginx sont tous les deux basés sur Nginx. Nginx-ingress est un ingress controller polulaire, il utilise un ConfigMap pour customiser Nginx. Il a recement été déprécié en faveur de la charte communautaire Ingress-nginx.

Quelles sont les différences ?

  • La charte Helm est stockée dans un autre repo
  • Le fichier de configuration de Ingress-nginx est plus complet

Allons-y, migrons

Ajouter le repo de Ingress-nginx

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

Prenez votre ConfigMap. Celui-ci est un exemple, adaptez le à votre cas.

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-ingress-controller
  namespace: nginx-ingress
  labels:
    app.kubernetes.io/name: nginx-ingress
    app.kubernetes.io/part-of: nginx-ingress
data:
  proxy-protocol: "True"
  use-proxy-protocol: "True"
  real-ip-header: "proxy_protocol"
  ssl-protocols: "TLSv1.3 TLSv1.2"

Ajoutez le dans votre fichier de configuration, dans la partie controller.config. J’ai supprimé l’option TLS, TLSv1.3 étant désormais la version par défaut.

controller:
  config: {
    proxy-protocol: "True",
    use-proxy-protocol: "True",
    real-ip-header: "proxy_protocol"
  }
  service:
    annotations: 
      metallb.universe.tf/address-pool: nginx-ingress
      nginx.ingress.kubernetes.io/proxy-body-size: 8m
      externalTrafficPolicy: Local

Migration

Avec MetalLB

Si comme moi vous avez une IP fixe pour le Load Balancer, le plus simple est de désinstaller nginx-ingress et d’installer ingress-nginx. La coupure sera brève et il n’y aura pas beaucoup de modifications à faire.
J’utilise le namespace nginx-ingress et nginx-ingress comme nom pour le déploiement.

helm -n nginx-ingress uninstall nginx-ingress
helm install nginx-ingress ingress-nginx/ingress-nginx --namespace nginx-ingress -f nginx-values.yaml

Avec un fournisseur de Cloud

Nous allons réaliser l’opération en trois parties :

  • Installer Ingress-nginx, pour créer le nouveau Load Balancer
  • Rediriger nos domaines vers le nouveau Load Balancer
  • Supprimer nginx-ingress

Installons ingress-nginx

helm install nginx-ingress ingress-nginx/ingress-nginx --namespace nginx-ingress -f nginx-values.yaml

Le Load Balancer va être créé par votre fournisseur de Cloud. Vous pouvez obtenir son IP ou son nom de domaine (suivant le fournisseur), en utilisant la commande kubectl.

kubectl -n nginx-ingress get svc -o wide

Redirigez vos DNS vers le nouveau Load balancer. Attendez le temps de propagation et supprimez l’ancienne charte.

helm -n nginx-ingress uninstall nginx-ingress

Conclusion

Nous avons migré depuis nginx-ingress, vers ingress-nginx, avec une coupure minimale pour nos services. Le nouveau contrôleur est plus flexible et je trouve cela plus facile de ne dépendre que d’un seul fichier de configuration.

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *