Containers : à quoi sert vraiment Kubernetes
Une architecture de micro-services bouleverse considérablement l'IT des entreprises. Kubernetes peut les aider à gérer, à orchestrer et à sécuriser les micro-services basés sur les containers.
Kubernetes organise les containers en groupes de Pods. Cette structure organisationnelle apporte de la cohérence car cela permet de gérer les Pods plutôt que des containers individuels. Chaque Pod agit comme une machine virtuelle à laquelle vous pouvez attribuer des tâches. Kubernetes affecte dynamiquement les Pods aux services au fur et à mesure que les nœuds sont ajoutés et supprimés. Chaque Pod possède un replica qui sert de sauvegarde – là est la haute disponibilité (HA) de Kubernetes.
Avec Kubernetes, les micro-services apportent certes plus de contrôle et de simplicité en matière d’administration, mais la façon dont sont gérés des aspects tels que le stockage, la mise en réseau et la sécurité de ces Pods est fondamentalement différente d'une infrastructure traditionnelle.
Stockage persistant des données
Avec les grandes quantités de données et les nombreux types de bases de données utilisées aujourd'hui dans les applications, le stockage est un facteur clé qui influence les performances. Comme Kubernetes démarre et arrête dynamiquement les containers ou redémarre les containers défaillants, les volumes de stockage qui leur sont attachés sont perdus. Pour stocker les données persistantes au-delà de la durée de vie du container individuel, Kubernetes utilise une fonction appelée PersistentVolumes. Les fournisseurs de Cloud public, comme AWS, offrent plusieurs options pour le stockage persistant, tels que le Elastic File System, Elastic Block Store ou Simple Storage Service (S3).
Kubernetes supporte des outils de gestion de stockage comme Portworx et Ceph. Cela permet de gérer ce stockage séparément du reste de votre système. Il apporte des capacités puissantes, comme associer plusieurs Cloud publics pour le stockage, la mise à l'échelle dynamique des volumes de stockage ou la haute disponibilité pour les données.
Mise en réseau en couches multiples
Avec la complexité croissante des piles de containers, la mise en réseau de ces éléments occupe une place centrale dans les conversations sur les micro-services. Kubernetes dispose en la matière de bases solides. Il fournit une adresse IP à chaque Pod et ne vous oblige pas à gérer le partage d'IP et le mapping des ports.
L'une des principales difficultés de la mise en réseau des containers est la communication entre les différents composants. Les containers doivent en effet pouvoir communiquer avec d'autres containers et les pods avec d'autres pods.
La réponse de Kubernetes ? Confier la gestion de la communication réseau à des outils de réseau externes. Il applique un protocole commun appelé Container Networking Interface (CNI) et permet aux outils de mise en réseau d'agir en tant que plug-ins. Aujourd'hui, les entreprises utilisent plusieurs outils pour la mise en réseau de conteneurs.
Flannel fournit un réseau overlay qui agit comme une couche réseau abstraite au-dessus du réseau hôte. Il utilise un agent (flanneld) sur chaque nœud et achemine la communication entre ces agents. Weave est un outil similaire qui utilise un système de micro système de noms de domaine au niveau de chaque hôte pour créer un réseau virtuel au-dessus du réseau de l'hôte. Calico permet quant à lui de mettre en place des politiques de sécurité réseau. Il s'adapte dynamiquement aux changements de Pod ou de service pour appliquer des politiques de sécurité aux ressources au fur et à mesure qu'elles sont créées ou remplacées.
Sécurité des pods et des données
L'exécution de containers dans le Cloud exige également une approche différente de la sécurité. Sécuriser les Pods et les données dans votre système nécessite la mise en place d’un dispositif. Il commence par définir le bon contexte de sécurité pour chaque Pod. Ces informations de sécurité sont stockées dans un fichier YAML, apportent des détails sur les ressources qu'un Pod peut utiliser et définissent son accès à l'hôte.
Kubernetes, via une fonction Secrets, garantit que toutes les informations sensibles - comme les mots de passe, les jetons OAuth et les clés Secure Shell - sont chiffrées et mises à la disposition de chaque Pod uniquement lorsqu'elles sont nécessaires. Cette fonction utilise le principe du moindre privilège pour s'assurer que les données sensibles ne sont pas partagées par inadvertance à l'extérieur ou avec un utilisateur ou une application qui n'a pas besoin d'y accéder.
Avec Kubernetes, les micro-services modifient véritablement l’architecture des applications. Les ressources sont distribuées, évolutives, dynamiques et multi-couches. Pour exploiter les micro-services, il faut la puissance et le contrôle qu'offrent les conteneurs, et Kubernetes peut justement gérer ces containers. Il a certes ses défauts mais dispose d’une architecture robuste adaptée à un système de micro-services. Si vous cherchez à moderniser vos applications, les micro-services avec Kubernetes sont la voie à suivre. Mais seul, la magie Kubernetes n’agira pas. Les entreprises doivent repenser les processus en place et, surtout, en apprendre de nouveaux qui conviennent mieux à une application moderne en containers.