Nous pouvons le dire, la technologie des conteneurs applicatifs a complétement transformé le monde des développeurs. Ce monde a désormais son outil phare : Kubernetes. S’il est définitivement le système d’orchestration le plus utilisé et le plus performant, il est aussi parfois d’une grande complexité. Dans cet article, nous allons tâcher de démystifier les concepts de mise en réseaux.
Vous souhaitez devenir incollable sur la mise en réseau de vos conteneurs applicatifs ? Notre formation Kubernetes de 3 jours en inter et intraentreprise vous permettra de maitriser tous les aspects de l’outil et de l’utiliser dans vos missions DevOps quotidiennes.
L’équipe Ambient IT
Kubernetes : rappel des bases
Kubernetes (K8s pour les intimes) est une solution open source utulisée par les experts du DevOps pour orchestrer des conteneurs applicatifs.
Sa popularité, bien que fulgurante, n’est pas usurpée. C’est un outil très puissant qui permet d’automatiser un grand nombre de tâches essentielles au DevOps comme le déploiement, la gestion et le scaling des applications.
Qu’est-ce que le modèle de réseau ?
Kubernetes utilise un modèle de réseaux unique en son genre. Chaque pod (qui représente l’unité de base dans les déploiements) contient un ou plusieurs conteneurs et se voit attribuer une adresse IP qui lui est propre.
Les pods peuvent alors communiquer directement entre eux sans avoir besoin de mappage complexe avec des ports NAT.
En quoi le modèle de réseau Kubernetes est-il différent ?
Kubernetes est unique par rapport aux architectures réseau traditionnelles. Avec lui, plus besoin de lier les ports des hôtes aux ports des conteneurs.
Cette approche qui simplifie énormément la communication entre les différents services et qui améliore grandement la scalabilité des applications.
Communication interpod : les fondamentaux
Au cœur de la mise en réseau dans Kubernetes, la communication entre les pods permet aux différents composants de votre application de « parler » entre eux, peu importe leur position dans les nœuds ou à travers le cluster.
Les pods communiquent via l’espace de nommage réseau qu’ils partagent entre eux. L’attribut local
host
permet de considérer qu’ils sont bien sûr le même hôte.
Ils utilisent leur adresse IP unique, attribuée par Kubernetes pour communiquer. Les pods n’ont même pas besoin de connaître les détails sous-jacents du réseau, car les tâches de communication sont assurées par les plugins CNI (Container Network Interface).
Démystifier les types de Services Kubernetes
Abstractions servant à définir comment exposer les applications, les services sont essentiels au fonctionnement de Kubernetes et fonctionnent aussi bien pour l’intérieur que l’extérieur du cluster. Il en existe plusieurs types :
- ClusterIP expose les services à l’intérieur du cluster
- NodePort et LoadBalancer permettent d’accéder aux services depuis l’extérieur du cluster
- ExternalName redirige le service vers un nom DNS externe
Ils offrent tous des méthodes différentes pour accéder aux applications.
La résolution DNS dans Kubernetes
Les DNS sont une composante cruciale de la mise en réseau Kubernetes. Ils permettent aux services de se trouver et de communiquer entre eux en utilisant des noms lisibles par des êtres humains plutôt que des adresses IP (qui sont des suites de chiffres impossibles à retenir correctement).
Kubernetes intègre un service DNS interne : CoreDNS.
Il joue un rôle crucial dans la gestion des requêtes dans le cluster. C’est lui qui traduit les noms de services en adresse IP. Il s’assure ainsi que les requêtes aboutissent là où elles doivent bien aller, à l’extérieur comme à l’intérieur du cluster.
Ingress et accès externe
L’ingress est un objet gérant l’accès externe pour les services du cluster. Il fonctionne de la même façon qu’un contrôleur de routage HTTP/HTTPS.
L’ingress est configuré de manière à définir des règles d’accès pour les services. Il utilise des chemins d’URL et des hôtes virtuels pour déterminer comment le trafic en provenance de l’extérieur doit être redirigé vers les différents services.
Il permet donc de centraliser le trafic entrant et simplifie grandement la tâche des loads balancers et des proxys.
Qu’est-ce que le réseau sous-jacent ?
Le réseau sous-jacent et son impact dans les performances et la fiabilité de vos clusters est un élément essentiel de la mise en réseau sur Kubernetes.
Le CNI, pour Container Network Interface, est le standard qui définit comment les interfaces réseau sont rattachées aux conteneurs. Les plugins CNI fournissent les détails permettant la communication inter-pods et avec l’extérieur du cluster.
Quel est le plugin CNI idéal ?
Il n’existe pas réellement de plugin idéal. Vous devez faire vous-même l’arbitrage en matière de performance, de sécurité et de scalabilité. Toutefois, des outils comme Calico, Flannel, ou Weave Net sont plutôt populaires et remportent souvent la préférence des experts DevOps.
Conclusion
La mise en réseau est un aspect essentiel de Kubernetes, car c’est ce concept qui permet de maintenir la connectivité entre les services et les applications. Le déploiement, la scalabilité et la gestion des conteneurs applicatifs dans leur ensemble sont donc concernés.
Si vous souhaitez devenir des professionnels du Devops, vous devrez maitriser tous les aspects de la mise en réseau. Cela vous permettra d’optimiser les performances, la sécurité et la fiabilité de vos applications.