La ressource Kubernetes Ingress standard vous permet de gérer et configurer l’équilibrage de charge Ingress basique, mais elle ne propose pas les fonctionnalités de personnalisation indispensables pour rendre Kubernetes adapté à la production. Les utilisateurs d’autres solutions que NGINX doivent alors se contenter d’annotations, de ConfigMaps et de modèles personnalisés, qui sont sources d’erreurs, complexes à utiliser, peu sûrs, et manquent de granularité. Les ressources NGINX Ingress répondent précisément à ce besoin.
Les ressources NGINX Ingress sont accessibles pour les versions NGINX Open Source et NGINX Plus du contrôleur NGINX Ingress. Elles offrent un style de configuration natif, type-safe et indenté, qui facilite la mise en place de l'équilibrage de charge Ingress. Dans ce blog, nous mettons en avant deux fonctionnalités introduites dans NGINX Ingress Controller 1.11.0 qui simplifient la configuration des politiques WAF et d'équilibrage de charge :
NGINX Ingress Controller 1.11.0 améliore la ressource TransportServer (TS) dans les aspects suivants :
Remarque : Les ajouts à la ressource TransportServer dans la version 1.11.0 représentent un aperçu technologique encore en plein développement. Nous vous garantissons qu'ils évolueront vers une qualité stable, prête pour la production, dans une prochaine version.
Avec NGINX Ingress Controller, nous avons introduit des extraits de configuration pour les ressources VirtualServer et VirtualServerRoute (VS et VSR) qui vous permettent d’étendre nativement les configurations NGINX Ingress destinées aux clients HTTP. La version 1.11.0 ajoute des extraits pour les ressources TS, vous offrant ainsi la possibilité d’exploiter pleinement les fonctionnalités de NGINX et NGINX Plus pour assurer la livraison de services basés sur TCP/UDP. Par exemple, vous pouvez utiliser des extraits pour insérer les directives deny
et allow
, qui reposent sur des adresses IP et des plages, afin de contrôler quels clients peuvent accéder à un service
Version de l'API : k8s.nginx.org/v1alpha1kind : TransportServer
métadonnées :
nom : café
spécification :
hôte : café.exemple.com
extraits de serveur : |
refuser 192.168.1.1 ;
autoriser 192.168.1.0/24 ;
amont :
- nom : thé
service : thé-svc
port : 80
Pour surveiller l'état de santé d'un cluster Kubernetes, NGINX Ingress Controller prend non seulement en compte les sondes Kubernetes locales aux pods d'application, mais surveille également l'état du réseau entre les services en amont basés sur TCP/UDP, avec des contrôles de santé passifs pour évaluer l'état de santé des transactions en cours et des contrôles de santé actifs (exclusifs à NGINX Plus) pour sonder périodiquement les points de terminaison avec des demandes de connexion synthétiques.
Les contrôles de santé peuvent être très utiles pour couper les circuits et gérer les erreurs d'application. Vous pouvez personnaliser le contrôle d'intégrité à l'aide de paramètres dans le champ healthCheck
de la ressource TS qui définissent l'intervalle entre les sondes, le délai d'expiration de la sonde, les délais entre les sondes, etc.
De plus, vous pouvez définir le service en amont et la destination du port des sondes d’intégrité à partir de NGINX Ingress Controller. Cela est utile dans les situations où l’état de santé de l’application en amont est exposé sur un écouteur différent par un autre processus ou sous-système qui surveille plusieurs composants en aval de l’application.
ingressClassName
Lorsque vous mettez à jour et appliquez une ressource TS, vérifiez que la configuration est valide et qu’elle a été correctement appliquée au déploiement du contrôleur d’entrée correspondant. La version 1.11.0 introduit le champ ingressClassName
et le rapport d’état pour la ressource TS. Le champ ingressClassName
garantit que la ressource TS est prise en charge par un déploiement particulier du contrôleur d’entrée dans les environnements avec plusieurs déploiements.
Pour afficher le statut d'une ou de toutes les ressources TS, lancez la commande kubectl
get
transportserver
; vous obtiendrez l'état (Valide
ou Invalide
), la raison de la dernière mise à jour, ainsi qu’un message personnalisé pour un TS unique.
$ kubectl get transportserver NOM ÉTAT RAISON ÂGE dns-tcp Valide Ajouté ou mis à jour 47 m $ kubectl describe transportserver dns-tcp . . .
Statut:
Message: La configuration de default/dns-tcp a été ajoutée ou mise à jour Raison : État ajouté ou mis à jour : Valide
Lorsque plusieurs ressources TS réclament le même hôte/écouteur, NGINX Ingress Controller choisit la ressource TS avec l'horodatage le plus ancien pour garantir un résultat clair et prévisible.
Les ressources NGINX Ingress simplifient la configuration tout en offrant plus de flexibilité. Elles vous permettent aussi de déléguer le contrôle du trafic à différentes équipes et d’imposer des restrictions de privilèges plus strictes aux utilisateurs responsables des sous-routes d’applications, selon les ressources VirtualServerRoute (VSR). En attribuant aux bonnes équipes l’accès aux ressources Kubernetes pertinentes, NGINX Ingress vous assure un contrôle granulaire des ressources réseau et limite les risques pour vos applications en cas de compromission ou de piratage des utilisateurs.
La version 1.11.0 introduit un objet natif Policy
de pare-feu applicatif web (WAF) pour étendre ces avantages à la configuration de NGINX App Protect dans vos déploiements Kubernetes. Cette policy utilise les objets APLogConf et APPolicy introduits dans la version 1.8.0 et peut s’attacher aux ressources VirtualServer (VS) et VSR. Ainsi, vous pouvez gérer entièrement la configuration Ingress avec les ressources VS, tout en confiant les responsabilités de sécurité à d’autres équipes via les ressources VSR.
Dans l'exemple ci-dessous, la politique waf-prod
s'applique aux utilisateurs dirigés vers l’upstream webapp-prod
. Pour transférer les responsabilités de sécurité de la route /v2
entre des namespaces gérés par différentes équipes, la directive route
mise en évidence renvoie à une ressource VSR.
Version de l'API : k8s.nginx.org/v1kind : Métadonnées du serveur virtuel : nom : webapp spec : hôte : webapp.example.com stratégies : - nom : waf-prod tls : secret : app-secret upstreams : - nom : webapp-prod service : webapp-svc port : 80 routes : - chemin : /v2 route : test/test - chemin : /v1 action : pass : webapp-prod
Les équipes qui gèrent l’espace de noms test
peuvent définir leurs propres paramètres et politiques Advanced WAF en utilisant les ressources VSR de cet espace de noms.
Version de l'API : k8s.nginx.org/v1kind : VirtualServerRoute
métadonnées :
nom : test
espace de noms : test
spécification :
hôte : webapp.example.com
flux en amont :
- nom : webapp
service : webapp-test-svc
port : 80
sous-routes :
- chemin : /v2
politiques :
- nom : waf-test
action :
passe : webapp
Cet exemple segmente les locataires par espace de noms et applique une politique WAF distincte pour le service webapp-test-svc
dans l’espace de noms test
. Il montre comment confier des ressources à différentes équipes et les encapsuler dans des objets facilite les tests de nouvelles fonctionnalités sans impacter les applications en production.
Avec NGINX Ingress Controller 1.11.0, nous poursuivons notre engagement à fournir un contrôleur Ingress de qualité industrielle, flexible, puissant et facile à utiliser. Outre les améliorations apportées au WAF et au TS, la version 1.11.0 inclut les améliorations suivantes :
de stratégie
avant qu’ils ne soient appliqués à la configuration d’entréeEn nous appuyant sur les améliorations apportées à la validation des annotations introduites dans la version 1.10.0, nous validons désormais les annotations supplémentaires suivantes :
Annotation | Validation |
---|---|
nginx.org/client-max-body-size |
Doit être un décalage valide |
nginx.org/fail-timeout |
Doit être une heure valide |
nginx.org/max-conns |
Doit être un entier non négatif valide |
nginx.org/max-fails |
Doit être un entier non négatif valide |
nginx.org/proxy-buffer-size |
Doit être une taille valide |
nginx.org/proxy-buffers |
Doit être une spécification de tampon proxy valide |
nginx.org/proxy-connect-timeout |
Doit être une heure valide |
nginx.org/proxy-max-temp-file-size |
Doit être une taille valide |
nginx.org/proxy-read-timeout |
Doit être une heure valide |
nginx.org/proxy-send-timeout |
Doit être une heure valide |
nginx.org/upstream-zone-size |
Doit être une taille valide |
Si la valeur de l'annotation n’est pas valide lors de l’application de la ressource Ingress, le contrôleur Ingress rejette la ressource et supprime la configuration correspondante dans NGINX.
La commande kubectl
get
policy
signale désormais l'état de la politique ( valide
ou non valide
) et (pour un seul TS) un message personnalisé et la raison de la mise à jour la plus récente.
$ kubectl get policy NOM ÉTAT ÂGE webapp-policy Valide 30 s $ kubectl describe policy webapp-policy . . .
Statut:
Message: La configuration de default/webapp-policy a été ajoutée ou mise à jour Raison : État ajouté ou mis à jour : Valide
NGINX Ingress Controller peut désormais être utilisé comme contrôleur d’entrée pour les applications exécutées dans un maillage de service Istio. Cela permet aux utilisateurs de continuer à utiliser les fonctionnalités avancées fournies par NGINX Ingress Controller sur les environnements basés sur Istio sans recourir à des solutions de contournement. Cette intégration implique deux exigences :
Pour satisfaire à la première exigence, incluez les éléments suivants dans le champ d’annotations
de votre fichier de déploiement NGINX Ingress.
annotations : traffic.sidecar.istio.io/includeInboundPorts : ""
traffic.sidecar.istio.io/excludeInboundPorts : « 80 443 » traffic.sidecar.istio.io/excludeOutboundIPRanges : "10.90.0.0/16,10.45.0.0/16" sidecar.istio.io/inject: 'true'
La deuxième exigence est satisfaite par une modification du comportement du champ requestHeaders
. Dans les versions précédentes, avec la configuration suivante, deux en-têtes d'hôte
étaient envoyés au backend : $host
et la valeur spécifiée, bar.example.com
.
Version de l'API : k8s.nginx.org/v1kind : Métadonnées du serveur virtuel : nom : foo spécification : hôte : foo.example.com amont : - nom : foo port : 8080 service : backend-svc use-cluster-ip : true routes : - chemin : « / » action : proxy : en amont : foo requestHeaders : set : - nom : Valeur de l'hôte : bar.example.com
Dans la version 1.11.0 et ultérieure, seule la valeur spécifiée est envoyée. Pour envoyer $host
, omettez entièrement le champ requestHeaders
.
Les points de terminaison en amont dans la configuration du contrôleur d’entrée NGINX peuvent désormais être renseignés avec des adresses IP de service/cluster, au lieu des adresses IP individuelles des points de terminaison de pod. Pour permettre à NGINX Ingress Controller d'acheminer le trafic vers les services Cluster-IP, incluez le champ use-cluster-ip:
true
dans la section upstreams
de votre configuration VS ou VSR :
en amont : - nom : service de thé : tea-svc port : 80 use-cluster-ip: true - nom: service café: port coffee-svc: 80 utilisation-cluster-ip : vrai
Pour le journal des modifications complet de la version 1.11.0, consultez les Notes de version .
Pour essayer NGINX Ingress Controller pour Kubernetes avec NGINX Plus et NGINX App Protect, démarrez votre essai gratuit de 30 jours dès aujourd'hui ou contactez-nous pour discuter de vos cas d'utilisation .
Pour essayer NGINX Ingress Controller avec NGINX Open Source, vous pouvez obtenir le code source de la version ou télécharger un conteneur préassemblé depuis DockerHub.
Pour une discussion sur les différences entre les contrôleurs d'entrée, consultez Attendez, quel contrôleur d'entrée NGINX pour Kubernetes suis-je en train d'utiliser ? sur notre blog.
« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."