Formation DevOps | Formation kubernetes​ : Ingress

www.itgalaxy.io

Ingress dans Kubernetes: Une Exploration Approfondie

L’architecture moderne des applications s’appuie de plus en plus sur des microservices déployés dans des containers, et Kubernetes est le leader dans l’orchestration de ces containers. Dans ce contexte, la gestion des accès externes à ces services devient cruciale. C’est ici qu’interviennent les objets Ingress. Cet article offre une exploration en profondeur des Ingress dans Kubernetes, couvrant leur but, leur fonctionnement, et des exemples pratiques d’implémentation.

Qu’est-ce qu’un Ingress ?

Un Ingress est un objet Kubernetes qui configure l’accès externe aux services déployés dans un cluster. Plus précisément, il gestionne typiquement le trafic HTTP/HTTPS. Un Ingress permet non seulement de diriger le trafic vers des services spécifiques en fonction de l’URL demandée, mais il fournit également d’autres fonctionnalités comme la terminaison TLS, le routage basé sur des règles, et la manipulation du trafic (par exemple, via des réécritures d’URL).

Ingress

Un Ingress est un objet Kubernetes qui gère l’accès externe aux services dans un cluster, généralement du trafic HTTP.
Les Ingress permettent d’avoir un LoadBalancer de niveau 7 automatisé capable de faire du routage basé sur les noms d’hôtes.

Les Ingress nécessitent l’utilisation d’un LoadBalancer piloté par un Ingress Controller. L’Ingress Controller est un logiciel à déployer par les administrateurs du cluster.

Plus de shemas pour meiux comprendre :

Principales Caractéristiques des Ingress

  1. Routage Basé sur le Nom d’Hôte et le Chemin: Les Ingress vous permettent de router le trafic basé sur les en-têtes HTTP, tels que le nom d’hôte ou le chemin de l’URL. Cela signifie qu’un seul point d’entrée (load balancer) peut gérer plusieurs services.

  2. Terminaison TLS: Les Ingress permettent de gérer les certificats SSL/TLS pour sécuriser les communications entre l’utilisateur et le service.

  3. Simplification de la Configuration: Au lieu de déployer des Load Balancers individuels pour chaque service, les Ingress centralisent la gestion des accès.

Cette image illustre la façon dont un Ingress Controller interagit avec les services et gère le trafic entrant vers ces services.

Ingress et Ingress Controller

Pour que les Ingress soient opérationnels, un composant appelé Ingress Controller doit être déployé dans le cluster. L’Ingress Controller est responsable de lire les ressources Ingress et de programmer le routage du trafic au sein du cluster. Kubernetes ne fournit pas de contrôleur Ingress par défaut; les deux options les plus populaires sont NGINX et Traefik. Chacun a ses propres caractéristiques et avantages en termes de performance, de simplicité d’utilisation et de fonctionnalités.

YAML pour Configurer un Ingress

La configuration d’un Ingress se fait par le biais de fichiers YAML, qui définissent les règles et les comportements souhaités. Voici un exemple simple :

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx-example
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          service:
            name: test
            port:
              number: 80

Dans cet exemple :

apiVersion: indique la version de l’API Kubernetes utilisée.
kind: spécifie le type de ressource, ici un Ingress.
metadata: contient des informations supplémentaires comme le nom et des annotations.
spec: définit la configuration spécifique de l’Ingress, incluant les règles de routage.
Les règles définies ici font que toute requête HTTP adressée à /testpath est routée vers le service nommé test sur le port 80.
Ingress avec TLS

Un scénario courant implique la sécurisation des communications à l’aide de la terminaison TLS. Pour ce faire, nous devons créer un secret contenant le certificat et la clé privés.

Voici comment cela fonctionne :

Création d’un certificat et d’une clé:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/tls.key -out /tmp/tls.crt -subj “/CN=demo-formation.k8s”

Création d’un secret dans Kubernetes:

kubectl create secret tls demo-formation-tls --key /tmp/tls.key --cert /tmp/tls.crt

Une fois que le certificat est créé, nous pouvons l’inclure dans la configuration de l’Ingress :

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tls-example-ingress
spec:
  tls:
  - hosts:
      - demo-formation.k8s
    secretName: demo-formation-tls
  rules:
  - host: demo-formation.k8s
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

Dans cet exemple, nous spécifions que pour le nom d’hôte demo-formation.k8s, le trafic sera sécurisé à l’aide du secret demo-formation-tls, et tout le trafic sera dirigé vers le service service1 sur le port 80.

Avantages des Ingress

Centralisation: En utilisant un Ingress, vous évitez la complexité de déployer des load balancers pour chaque service individuel.

Routage Avancé: Grâce à la capacité de routage basée sur les en-têtes et les chemins, vous pouvez facilement diriger le trafic de manière granulaire.

SSL/TLS: La gestion des certificats devient plus simple et robuste, unifiant la terminaison TLS à travers plusieurs services.

Scalabilité: Les Ingress sont conçus pour fonctionner avec des clusters de grande taille et pour gérer un volume élevé de requêtes.

Limitations et Considérations

Malgré ses nombreux atouts, l’utilisation des Ingress a aussi certaines limitations. Par exemple, certains contrôleurs peuvent ne pas prendre en charge les fonctionnalités les plus avancées ou peuvent nécessiter une configuration spécifique pour fonctionner correctement. De plus, la dépendance à un Ingress Controller signifie que la disponibilité de ce composant est cruciale pour l’accès à vos services.
Conclusion

Les Ingress dans Kubernetes jouent un rôle fondamental dans la gestion de l’accès externe aux services. En fournissant une interface unique et flexible pour le routage du trafic HTTP/HTTPS, les Ingress permettent un meilleur contrôle, une sécurité accrue, et une optimisation générale de l’architecture des applications modernes. Il est essentiel pour les administrateurs et les développeurs de comprendre et de maîtriser les Ingress pour tirer pleinement parti des capacités de Kubernetes. Avec les bonnes configurations et pratiques, les Ingress peuvent transformer la façon dont les applications sont accessibles sur Internet.





1. Nous contactez


2. Infra as a Service

  • Description: Infrastructure cloud évolutive et sécurisée
  • Links:

3. Projets Développeurs


4. Développeurs


5. Formations Complètes


6. Marketplace

7. Blogs


This website is powered by ItGalaxy.io