Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Best practices for the NGINX Ingress controller

Dernière mise à jour :Aug 11, 2026

Cette rubrique décrit les bonnes pratiques de configuration du contrôleur NGINX Ingress afin d'optimiser ses performances dans divers scénarios.

Dans cette rubrique

Performances et stabilité du contrôleur NGINX Ingress

Répliques et limites de ressources appropriées

Par défaut, un contrôleur NGINX Ingress installé lors de la création du cluster ou depuis la page Add-ons dispose de deux réplicas. Vous pouvez ajuster ce nombre en fonction de vos besoins métier. Assurez-vous que les pods du contrôleur NGINX Ingress sont répartis sur différents nœuds afin d'éviter la contention des ressources et les points de défaillance uniques. Vous pouvez également attribuer des nœuds dédiés pour garantir les performances et la stabilité. Pour plus d'informations, consultez la section Utiliser des nœuds dédiés pour améliorer les performances et la stabilité de NGINX Ingress. Pour éviter les interruptions de trafic dues à des événements d'épuisement de la mémoire (OOM), ne définissez pas de limites de ressources pour le contrôleur NGINX Ingress. Si vous devez définir des limites, fixez la limite CPU à au moins 1 000 millicœurs et la limite de mémoire à au moins 2 GiB.

Utiliser des nœuds dédiés

Optimiser les performances de NGINX Ingress

L'optimisation des performances du contrôleur NGINX Ingress repose sur deux axes principaux : le réglage des paramètres système et le réglage des paramètres NGINX.

  • Réglage des paramètres système : les systèmes d'exploitation Alibaba Cloud incluent des optimisations par défaut pour les paramètres courants. Parmi les autres paramètres système que vous pourriez avoir besoin d'ajuster figurent la taille maximale de la file d'attente système (backlog) et la plage de ports disponibles. Le réglage des paramètres système permet de s'assurer que NGINX peut gérer une concurrence élevée et évite les échecs de connexion aux backends dus à l'épuisement des ports.

  • Réglage des paramètres NGINX :

    • L'ajustement du nombre maximal de connexions par processus worker garantit que le contrôleur NGINX Ingress peut gérer une concurrence élevée.

    • Augmentez le délai d'expiration de la connexion : contrairement au comportement par défaut de NGINX, le contrôleur NGINX Ingress utilise des connexions keep-alive pour envoyer des requêtes aux pods backend. Par conséquent, augmentez le délai d'expiration de la connexion afin de permettre à une seule connexion de traiter davantage de requêtes, réduisant ainsi la surcharge liée à la création de nouvelles connexions.

    • Définissez le délai d'expiration keep-alive : configurez le délai d'expiration keep-alive pour les services backend de manière à ce qu'il soit supérieur ou égal au délai d'expiration de la connexion du contrôleur NGINX Ingress, qui est par défaut de 900 secondes dans les clusters ACK.

Le composant NGINX Ingress inclut des paramètres de réglage par défaut qui offrent des performances optimales dans la plupart des scénarios. Si vous avez des exigences spécifiques, vous pouvez optimiser davantage les paramètres système et NGINX en utilisant les champs pertinents dans le ConfigMap. Pour plus d'informations sur les ConfigMaps, consultez ConfigMaps.

Mise à l'échelle automatique avec HPA

Dans la plupart des cas, le contrôleur NGINX Ingress peut absorber les pics de trafic soudains. Si la capacité par défaut est insuffisante pour vos scénarios à charge élevée, configurez un Horizontal Pod Autoscaler (HPA) pour mettre à l'échelle automatiquement le contrôleur NGINX Ingress. Pour plus d'informations, consultez Utiliser Horizontal Pod Autoscaler (HPA).

Important

Les événements de mise à l'échelle des pods peuvent interrompre temporairement les connexions existantes. Configurez cette fonctionnalité avec prudence.

Voici un exemple de configuration YAML :

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-ingress-controller-hpa
  namespace: kube-system
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-ingress-controller
  minReplicas: 2
  maxReplicas: 5
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

Configurer un hook preStop

Lors d'une mise à jour progressive d'un service backend, le contrôleur NGINX Ingress supprime le point de terminaison d'un pod en cours de termination tout en maintenant les connexions pour les requêtes en cours de traitement. Si un pod de service backend s'arrête immédiatement après réception du signal de termination, les requêtes en cours peuvent échouer. En raison de problèmes de synchronisation, une partie du nouveau trafic pourrait encore être routée vers le pod terminé, entraînant une perte de trafic.

Pour éviter toute perte de trafic lors des mises à jour progressives, configurez un hook preStop dans vos pods de service backend. Ce hook permet au pod de continuer à traiter les requêtes en cours après la suppression de son point de terminaison, empêchant ainsi les interruptions de service.

Ajoutez le code suivant à la configuration du conteneur dans le modèle de pod :

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - name: app
        lifecycle:
          # Configure a preStop hook to wait for 30 seconds before exiting.
          # The sleep command must be available in the container.
          preStop:
            exec:
              command:
              - sleep
              - "30"

Observabilité du contrôleur NGINX Ingress

Log Service et Managed Service for Prometheus

Le contrôleur NGINX Ingress fournit des tableaux de bord de surveillance basés sur les journaux Log Service (SLS) et Prometheus pour vous aider à mieux comprendre le trafic de votre service.

  • Journaux Log Service (SLS) :

    • Si vous sélectionnez Enable Log Service et Create Ingress Dashboard lors de la création d'un cluster, vous pouvez accéder à la console ACK, choisir Network > Ingresses, puis consulter le tableau de bord basé sur Log Service sur la page NGINX Ingress Overview. Vous pouvez également accéder à Operations > Log Center pour afficher les journaux générés par le contrôleur NGINX Ingress. Pour plus d'informations, consultez Collecter et analyser les journaux d'accès NGINX Ingress.

    • Si vous n'avez pas activé ces options lors de la création du cluster, vous pouvez configurer manuellement le composant de collecte de journaux et les règles. Pour plus d'informations, consultez Collecter et analyser les journaux d'accès NGINX Ingress. Pour plus d'informations sur la surveillance, consultez Surveillance du tableau de bord Ingress.

  • Surveillance Managed Service for Prometheus : vous pouvez choisir d'installer la surveillance Managed Service for Prometheus lors de la création d'un cluster. Alternativement, après la création du cluster, vous pouvez l'installer ou le consulter en choisissant Operations > Prometheus Monitoring. Pour plus d'informations, consultez Connecter et configurer Managed Service for Prometheus.

    Remarque

    Lors de l'utilisation de Managed Service for Prometheus, ajoutez le champ host aux ressources Ingress du cluster. Sinon, certaines métriques pour l'Ingress seront manquantes par défaut. Alternativement, ajoutez l'argument de démarrage --metrics-per-host=false au controller dans le Deployment du contrôleur NGINX Ingress.

Fonctionnalités avancées du contrôleur NGINX Ingress

Utiliser plusieurs contrôleurs NGINX Ingress

Vous pouvez avoir besoin de déployer plusieurs contrôleurs NGINX Ingress dans un cluster, par exemple pour isoler le trafic interne et externe. Pour plus d'informations, consultez Déployer plusieurs contrôleurs Ingress pour l'isolation du trafic.

Accès intra-cluster

Dans un cluster, le trafic vers le point de terminaison externe d'un service LoadBalancer (l'adresse IP publique du contrôleur NGINX Ingress) est généralement intercepté et transféré par iptables ou IPVS. Lorsque externalTrafficPolicy est défini sur Local et qu'aucun pod NGINX Ingress n'est exécuté sur un nœud, des problèmes de connectivité réseau surviennent. Par défaut, le contrôleur NGINX Ingress dans un cluster ACK utilise un service LoadBalancer en mode Local. Par conséquent, vous pouvez rencontrer des problèmes de connectivité lors de l'accès à l'adresse Classic Load Balancer (CLB) associée depuis l'intérieur du cluster. Ainsi, pour l'accès intra-cluster, utilisez le ClusterIP du service ou le nom de domaine interne (nginx-ingress-lb.kube-system). Évitez également les scénarios où le contrôleur NGINX Ingress tente de s'auto-acceder, ce qui peut entraîner des échecs réseau dus à des problèmes de hairpinning. Pour plus d'informations sur la résolution de ce problème, consultez Impossible d'accéder à l'instance SLB d'un service LoadBalancer depuis l'intérieur d'un cluster Kubernetes.

Utiliser WAF

Pour bloquer les requêtes malveillantes, vous pouvez activer Web Application Firewall (WAF) pour le Classic Load Balancer (CLB) utilisé par le contrôleur NGINX Ingress de votre cluster. Lorsque vous activez WAF sur un port HTTPS, vous devez également configurer le certificat requis dans la console WAF. Cela peut entraîner les problèmes suivants :

  • Les requêtes TLS sont terminées au niveau de la couche WAF. Par conséquent, les certificats configurés dans un Kubernetes Secret ne seront pas utilisés pour le point de terminaison public.

  • Lorsque vous accédez au port 443 depuis l'intérieur du cluster en utilisant l'adresse IP CLB ou le ClusterIP du service, le trafic peut ne pas passer par WAF, ce qui provoque des erreurs de certificat.

  • Avec WAF activé, le contrôleur NGINX Ingress ne peut pas obtenir l'adresse IP réelle du client par défaut. Ajoutez le contenu suivant au ConfigMap (par défaut, nginx-configuration dans le namespace kube-system pour les contrôleurs NGINX Ingress installés via la gestion des composants) pour activer le module Realip de NGINX et utiliser l'en-tête X-Forwarded-For afin d'obtenir l'adresse IP réelle du client.

    use-forwarded-headers: "true" # Use this option for NGINX Ingress controller version 0.30.0 and earlier.
    enable-real-ip: "true" # Use this option for NGINX Ingress controller version 0.44.0 and later.
    proxy-real-ip-cidr: <The back-to-origin CIDR block that you obtain from WAF>

Déploiements blue-green ou versions canary

Vous pouvez mettre en œuvre une version canary avec le contrôleur NGINX Ingress en utilisant la fonctionnalité disponible dans la console ACK ou en ajoutant manuellement une annotation. Pour plus d'informations, consultez Utiliser NGINX Ingress pour mettre en œuvre des versions canary et des déploiements blue-green.

Important

Les services original et canary doivent uniquement être référencés par l'Ingress canary. Sinon, des conflits de règles canary peuvent survenir et entraîner des erreurs de routage du trafic.

Proxyser les requêtes non HTTP

Par défaut, le contrôleur NGINX Ingress se connecte aux services backend en utilisant le protocole HTTP. Toutefois, il prend également en charge plusieurs protocoles backend, WebSocket, HTTPS et gRPC étant les plus courants. Pour la liste complète des protocoles backend pris en charge, consultez Backend Protocol.

  • WebSocket : le contrôleur NGINX Ingress offre un support natif pour WebSocket. Aucune configuration supplémentaire n'est requise pour transférer les connexions WebSocket. Si vous avez des connexions WebSocket de longue durée, vous pouvez utiliser une annotation pour ajuster le délai d'expiration de la connexion backend afin d'éviter les déconnexions liées aux délais d'expiration. Pour plus d'informations sur les ajustements, consultez Custom timeouts.

  • HTTPS : pour les services backend qui utilisent HTTPS, vous pouvez ajouter l'annotation nginx.ingress.kubernetes.io/backend-protocol:"HTTPS" à l'Ingress pour basculer vers des connexions HTTPS.

  • gRPC : gRPC n'est accessible que via des ports TLS. Par conséquent, assurez-vous d'utiliser un port TLS chiffré lorsque votre application accède aux services gRPC via le contrôleur NGINX Ingress. Pour plus d'informations sur la configuration de gRPC, consultez Configurer un service gRPC pour NGINX Ingress.