Ingress-NGINX est le contrôleur Ingress le plus répandu dans l’écosystème Kubernetes. Il fait office de Reverse Proxy en s’appuyant sur NGINX pour router le trafic HTTP/HTTPS entrant vers les bons services du cluster.


Rôle dans l’architecture

Sans Ingress, exposer un service nécessite un LoadBalancer par service (coûteux sur cloud) ou un NodePort. L’Ingress centralise tout le trafic entrant sur un seul point d’entrée.

Internet
   │
   ▼
ingress-nginx (pod)
   ├── /api  → Service "api-svc"        → Pods API
   ├── /app  → Service "frontend-svc"   → Pods Frontend
   └── /auth → Service "auth-svc"       → Pods Auth

Installation via Helm

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
 
helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --create-namespace

Exemple : Ingress simple (HTTP)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mon-app-ingress
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: monapp.exemple.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-svc
            port:
              number: 8080
      - path: /
        pathType: Prefix
        backend:
          service:
            name: frontend-svc
            port:
              number: 80

Exemple : Ingress avec TLS (cert-manager)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mon-app-ingress-tls
  namespace: default
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - monapp.exemple.com
    secretName: monapp-tls-secret     # cert-manager crée ce secret automatiquement
  rules:
  - host: monapp.exemple.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: frontend-svc
            port:
              number: 80

Annotations utiles

AnnotationEffet
nginx.ingress.kubernetes.io/rewrite-target: /Réécriture du chemin avant envoi au backend
nginx.ingress.kubernetes.io/ssl-redirect: "true"Force la redirection HTTP → HTTPS
nginx.ingress.kubernetes.io/proxy-body-size: "50m"Taille max du body des requêtes
nginx.ingress.kubernetes.io/rate-limit: "100"Limite de requêtes par seconde
nginx.ingress.kubernetes.io/use-regex: "true"Active les regex dans les paths

Vérification

# Voir les ingress déployés
kubectl get ingress -A
 
# Logs du contrôleur
kubectl logs -n ingress-nginx deploy/ingress-nginx-controller
 
# IP externe du LoadBalancer
kubectl get svc -n ingress-nginx

Liens