Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Meilleures pratiques pour le contrôleur NGINX Ingress

Dernière mise à jour :Sep 12, 2026

Cette rubrique décrit les meilleures pratiques de configuration du contrôleur NGINX Ingress afin d'obtenir des performances optimales dans divers scénarios.

Dans cette rubrique

Performances et stabilité du contrôleur NGINX Ingress

Nombre approprié de réplicas et limites de ressources

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. Ajustez ce nombre en fonction de vos besoins métier. Répartissez les pods du contrôleur NGINX Ingress sur différents nœuds pour é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. Afin d'é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 absolument 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 principalement sur deux axes : le réglage des paramètres système et celui des paramètres NGINX.

  • Réglage des paramètres système : les systèmes d'exploitation Alibaba Cloud intègrent des optimisations par défaut pour les paramètres courants. Parmi les autres paramètres système susceptibles de nécessiter un ajustement figurent la taille maximale de la file d'attente système (backlog) et la plage de ports disponibles. Le réglage de ces paramètres permet à NGINX de gérer une forte concurrence et évite les échecs de connexion aux backends dus à l'épuisement des ports.

  • Réglage des paramètres NGINX :

    • Ajustez le nombre maximal de connexions par processus worker pour permettre au contrôleur NGINX Ingress de gérer une forte concurrence.

    • 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. Augmentez donc le délai d'expiration de la connexion afin qu'une seule connexion puisse 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 des 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 s 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 besoins spécifiques, optimisez davantage les paramètres système et NGINX en utilisant les champs pertinents dans la 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 s'avère 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 d'arrêt 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 terminaison, les requêtes en cours peuvent échouer. En raison de problèmes de synchronisation, une partie du nouveau trafic peut encore être acheminée vers le pod arrêté, entraînant une perte de trafic.

Pour éviter toute perte de trafic lors des mises à jour progressives, configurez un hook preStop dans les pods de votre service backend. Ce hook permet au pod de continuer à traiter les requêtes en cours après la suppression de son point de terminaison, évitant 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 vos services.

  • Journaux Log Service (SLS) :

    • Si vous sélectionnez Enable Log Service et Create Ingress Dashboard lors de la création d'un cluster, accédez à la console ACK, choisissez Network > Ingresses, puis consultez le tableau de bord basé sur Log Service sur la page NGINX Ingress Overview. Vous pouvez également accéder à Operations > Log Center pour consulter 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, configurez manuellement le composant de collecte des journaux et les règles associées. 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 : choisissez d'installer la surveillance Managed Service for Prometheus lors de la création d'un cluster. Alternativement, après la création du cluster, installez-la ou consultez-la en choisissant Operations > Prometheus Monitoring. Pour plus d'informations, consultez Connecter et configurer Managed Service for Prometheus.

    Remarque

    Lorsque vous utilisez 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. Vous pouvez également ajouter 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 du trafic 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 destiné au 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 ne s'exécute 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é lorsque vous accédez à l'adresse Classic Load Balancer (CLB) associée depuis l'intérieur du cluster. Pour l'accès intra-cluster, utilisez l'IP Cluster 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-accesser, ce qui peut entraîner des pannes réseau dues à 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, activez 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 Secret Kubernetes 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 l'IP Cluster 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 à la ConfigMap (par défaut, nginx-configuration dans le kube-system namespace 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

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

Transmettre les requêtes non HTTP

Par défaut, le contrôleur NGINX Ingress se connecte aux services backend en utilisant le protocole HTTP. Cependant, 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 prend nativement en charge WebSocket. Aucune configuration supplémentaire n'est requise pour transférer les connexions WebSocket. Si vous disposez de connexions WebSocket de longue durée, utilisez 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'attente. Pour plus d'informations sur les ajustements, consultez Custom timeouts.

  • HTTPS : pour les services backend utilisant HTTPS, ajoutez 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.