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.