Éditeur – Cet article est un extrait de notre livre électronique complet, Managing Kubernetes Traffic with F5 NGINX : Un guide pratique . Téléchargez-le gratuitement aujourd'hui .
De nombreuses organisations qui configurent Kubernetes pour la première fois commencent avec le contrôleur NGINX Ingress développé et maintenu par la communauté Kubernetes ( kubernetes/ingress-nginx ). Cependant, à mesure que les déploiements Kubernetes arrivent à maturité, certaines organisations constatent qu'elles ont besoin de fonctionnalités avancées ou souhaitent un support commercial tout en conservant NGINX comme plan de données.
Une option consiste à migrer vers le contrôleur d'entrée NGINX développé et maintenu par F5 NGINX ( nginxinc/kubernetes-ingress ), et nous fournissons ici des instructions complètes afin que vous puissiez éviter certaines complications résultant des différences entre les deux projets.
Vous ne savez pas en quoi ces options diffèrent ? Lisez le guide pour choisir un contrôleur d'entrée, partie 4 : Options du contrôleur d'entrée NGINX sur notre blog.
Pour faire la distinction entre les deux projets dans le reste de cet article, nous désignons le contrôleur d'entrée NGINX maintenu par la communauté Kubernetes ( kubernetes/ingress-nginx ) par le terme « contrôleur d'entrée communautaire » et celui maintenu par F5 NGINX ( nginxinc/kubernetes-ingress ) par le terme « contrôleur d'entrée NGINX ».
Il existe deux manières de migrer du contrôleur d'entrée de la communauté vers le contrôleur d'entrée NGINX :
Avec cette option de migration, vous utilisez la ressource Kubernetes Ingress standard pour définir les capacités racine et les ressources NGINX Ingress pour améliorer votre configuration avec des capacités accrues et une facilité d'utilisation.
Les définitions de ressources personnalisées (CRD) pour les ressources NGINX Ingress ( VirtualServer, VirtualServerRoute , TransportServer , GlobalConfiguration et Policy ) vous permettent de déléguer facilement le contrôle de différentes parties de la configuration à différentes équipes (telles que les équipes AppDev et de sécurité) et de fournir une meilleure sécurité et validation de la configuration.
Le tableau mappe la configuration de la terminaison SSL et du routage basé sur le chemin de couche 7 dans le champ spec
de la ressource Kubernetes Ingress standard avec le champ spec
de la ressource NGINX VirtualServer . La syntaxe et l’indentation diffèrent légèrement dans les deux ressources, mais elles accomplissent les mêmes fonctions Ingress de base.
Ressource d'entrée Kubernetes | Ressource du serveur virtuel NGINX |
---|---|
|
|
Avec le contrôleur Ingress communautaire, un objet API Kubernetes ConfigMap est le seul moyen d'exposer les services TCP et UDP .
Avec NGINX Ingress Controller, les ressources TransportServer définissent une large gamme d'options pour l'équilibrage de charge TCP/UDP et TLS Passthrough. Les ressources TransportServer sont utilisées conjointement avec les ressources GlobalConfiguration pour contrôler les connexions entrantes et sortantes.
Pour plus d’informations, consultez Prise en charge des services de relais TCP, UDP et TLS dans les ressources NGINX Ingress sur notre blog.
Les déploiements Kubernetes de niveau production doivent souvent étendre les règles d’entrée de base pour implémenter des cas d’utilisation avancés, notamment les déploiements Canary et Blue-Green, la limitation du trafic, la manipulation du trafic entrant-sortant, etc.
Le contrôleur Ingress communautaire implémente bon nombre de ces cas d'utilisation avec des annotations Kubernetes. Cependant, bon nombre de ces annotations sont créées avec des extensions Lua personnalisées qui se rapportent à des définitions de ressources NGINX Ingress très spécifiques et ne sont donc pas adaptées à la mise en œuvre de fonctionnalités avancées dans un environnement de production stable et pris en charge.
Dans les sections suivantes, nous montrons comment convertir les annotations du contrôleur Ingress de la communauté en ressources du contrôleur Ingress NGINX.
Même si vous appliquez des modifications de code fréquentes à vos charges de travail de conteneur de production, vous devez continuer à servir vos utilisateurs existants. Les déploiements Canary et Blue-Green vous permettent de le faire, et vous pouvez les exécuter sur le plan de données NGINX Ingress Controller pour obtenir des mises à jour stables et prévisibles dans les environnements Kubernetes de niveau production.
Le tableau affiche les champs des ressources NGINX VirtualServer et VirtualServerRoute qui correspondent aux annotations du contrôleur d'entrée de la communauté pour les déploiements Canary .
Le contrôleur Ingress de la communauté évalue les annotations canari dans cet ordre de priorité :
nginx.ingress.kubernetes.io/canary-by-header
nginx.ingress.kubernetes.io/canary-by-cookie
nginx.ingress.kubernetes.io/canary-by-weight
Pour que NGINX Ingress Controller les évalue de la même manière, ils doivent apparaître dans cet ordre dans le manifeste NGINX VirtualServer ou VirtualServerRoute.
Contrôleur d'entrée communautaire | Contrôleur d'entrée NGINX |
---|---|
|
|
|
|
|
|
|
|
Dans les environnements de microservices, où les applications sont éphémères par nature et donc plus susceptibles de renvoyer des réponses d'erreur, les équipes DevOps utilisent largement les politiques de contrôle du trafic – telles que la coupure de circuit et la limitation du débit et de la connexion – pour éviter les conditions d'erreur lorsque les applications ne sont pas saines ou ne fonctionnent pas comme prévu.
Le tableau affiche les champs des ressources NGINX VirtualServer et VirtualServerRoute qui correspondent aux annotations du contrôleur d'entrée de la communauté pour la limitation du débit , les erreurs HTTP personnalisées , un backend par défaut personnalisé et la réécriture d'URI .
Contrôleur d'entrée communautaire | Contrôleur d'entrée NGINX |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Comme indiqué dans le tableau, au moment de la rédaction de cet article, les ressources NGINX Ingress n'incluent pas de champs qui traduisent directement les quatre annotations suivantes du contrôleur Ingress de communauté, et vous devez utiliser des extraits. La prise en charge directe des quatre annotations, à l’aide des ressources de stratégie , est prévue pour les futures versions de NGINX Ingress Controller.
nginx.ingress.kubernetes.io/limit-connections
nginx.ingress.kubernetes.io/limit-rate
nginx.ingress.kubernetes.io/limit-rate-after
nginx.ingress.kubernetes.io/limit-whitelist
La manipulation des en-têtes HTTP est utile dans de nombreux cas d'utilisation, car ils contiennent des informations supplémentaires importantes et pertinentes pour les systèmes impliqués dans une transaction HTTP. Par exemple, le contrôleur Ingress de communauté prend en charge l'activation et la définition des en-têtes de partage de ressources inter-origines (CORS), qui sont utilisés avec les applications AJAX, où le code JavaScript frontal d'un navigateur se connecte à une application principale ou à un serveur Web.
Le tableau affiche les champs des ressources NGINX VirtualServer et VirtualServerRoute qui correspondent aux annotations du contrôleur d'entrée de la communauté pour la manipulation des en-têtes .
Contrôleur d'entrée communautaire | Contrôleur d'entrée NGINX |
---|---|
|
|
Il existe d’autres fonctionnalités de proxy et d’équilibrage de charge que vous souhaiterez peut-être configurer dans NGINX Ingress Controller en fonction du cas d’utilisation spécifique. Ces fonctionnalités incluent la définition de l’algorithme d’équilibrage de charge ainsi que les paramètres de délai d’expiration et de mise en mémoire tampon pour les connexions proxy.
Le tableau affiche les instructions dans le champ en amont
des ressources NGINX VirtualServer et VirtualServerRoute qui correspondent aux annotations du contrôleur d'entrée de communauté pour l'équilibrage de charge NGINX personnalisé , les délais d'expiration du proxy , la mise en mémoire tampon du proxy et les connexions de routage vers l'adresse IP et le port du cluster d'un service .
Contrôleur d'entrée communautaire | Contrôleur d'entrée NGINX |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Un service mesh est particulièrement utile dans un environnement de confiance zéro strict, où les applications distribuées au sein d’un cluster communiquent de manière sécurisée en s’authentifiant mutuellement. Que se passerait-il si nous devions imposer le même niveau de sécurité au trafic entrant et sortant du cluster (trafic nord-sud) ?
Nous pouvons configurer l’authentification mTLS au niveau de la couche Ingress Controller afin que les systèmes d’extrémité des connexions externes s’authentifient mutuellement en présentant un certificat valide.
Le tableau affiche les champs des ressources de stratégie NGINX qui correspondent aux annotations du contrôleur d’entrée de la communauté pour l’authentification du certificat client et l’authentification du certificat back-end .
Contrôleur d'entrée communautaire | Contrôleur d'entrée NGINX |
---|---|
|
|
|
|
Le tableau affiche les champs des ressources de stratégie NGINX qui sont exclusifs au contrôleur d'entrée NGINX basé sur NGINX Plus et correspondent aux annotations du contrôleur d'entrée de la communauté pour la persistance de session (affinité).
Contrôleur d'entrée communautaire | Contrôleur d'entrée NGINX |
---|---|
|
|
La deuxième option pour migrer du contrôleur Ingress de la communauté vers le contrôleur Ingress NGINX consiste à utiliser uniquement des annotations et des ConfigMaps dans la ressource Ingress Kubernetes standard et à s'appuyer potentiellement sur un traitement de type « master/minion ». Cela conserve toute la configuration dans l'objet Ingress.
Note: Avec cette méthode, ne modifiez pas le champ spec
de la ressource Ingress.
Le tableau suivant décrit les annotations du contrôleur Ingress de la communauté qui correspondent directement aux annotations prises en charge par NGINX Ingress Controller.
1Le contrôleur Ingress communautaire utilise Lua pour implémenter certains de ses algorithmes d’équilibrage de charge. NGINX Ingress Controller n’a pas d’équivalent pour tous.
2Redirige le trafic HTTP vers HTTPS. Le contrôleur Ingress communautaire implémente cela avec du code Lua, tandis que le contrôleur Ingress NGINX utilise les conditions if
NGINX natives.
Le tableau suivant décrit les annotations du contrôleur d’entrée de la communauté qui correspondent directement aux annotations prises en charge par le contrôleur d’entrée NGINX basé sur NGINX Plus.
Contrôleur d'entrée communautaire | Contrôleur d'entrée NGINX basé sur NGINX Plus |
---|---|
|
|
Note: Le contrôleur d'entrée NGINX basé sur NGINX Plus dispose d'annotations supplémentaires pour les fonctionnalités que le contrôleur d'entrée de la communauté ne prend pas du tout en charge, notamment les contrôles de santé actifs et l'authentification à l'aide de jetons Web JSON (JWT).
Le tableau suivant mappe les clés ConfigMap du contrôleur d'entrée de la communauté à leurs clés ConfigMap du contrôleur d'entrée NGINX directement correspondantes. Notez qu’une poignée de noms de clés ConfigMap sont identiques. De plus, le contrôleur d’entrée de la communauté et le contrôleur d’entrée NGINX disposent tous deux de clés ConfigMaps que l’autre n’a pas (non affichées dans le tableau).
Vous pouvez migrer du contrôleur Ingress de la communauté vers le contrôleur Ingress NGINX à l'aide de ressources Ingress NGINX personnalisées ou de la ressource Ingress Kubernetes standard avec des annotations et des ConfigMaps. La première option prend en charge un ensemble plus large de fonctionnalités réseau et est donc plus adaptée aux environnements Kubernetes de niveau production.
Cet article est un extrait de notre eBook complet, Gérer le trafic Kubernetes avec F5 NGINX : Un guide pratique . Téléchargez-le gratuitement dès aujourd'hui .
Essayez dès aujourd'hui le contrôleur d'entrée NGINX basé sur NGINX Plus dans le cadre d'un essai gratuit de 30 jours ou contactez-nous pour discuter de vos cas d'utilisation .
« 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."