Kubernetes, également abrégé en K8s, est une plate-forme open source permettant d'automatiser et d'orchestrer le déploiement, la mise à l'échelle et la gestion des applications et des charges de travail conteneurisées. Il fournit une infrastructure de calcul avec flexibilité, évolutivité, fiabilité, haute disponibilité et portabilité intégrées pour les applications exécutées en tant que conteneurs dans n'importe quel environnement : sur site, dans le cloud et en périphérie.
Kubernetes automatise les tâches les plus courantes associées à la gestion des charges de travail conteneurisées à grande échelle, notamment le déploiement, l'équilibrage de charge, la mise à l'échelle horizontale, les déploiements et les restaurations, ainsi que l'auto-réparation.
De nombreuses organisations utilisent déjà Kubernetes en production – que ce soit pour certaines ou la majorité de leurs applications – et d’autres l’évaluent. Sa popularité a fait de Kubernetes la norme de facto pour l’orchestration et la gestion des conteneurs.
L’adoption de Kubernetes se développe rapidement car elle peut aider à :
La refactorisation des applications monolithiques traditionnelles en parties plus petites et faiblement couplées, appelées microservices , contribue à améliorer l'agilité de l'entreprise, car les nouvelles fonctionnalités et mises à jour des applications peuvent être publiées plus rapidement et mises à l'échelle plus facilement. L’adoption d’une architecture de microservices native du cloud entraîne la nécessité de faire évoluer l’infrastructure de calcul sous-jacente. Nous observons donc la transition des systèmes physiques et des machines virtuelles vers les conteneurs comme l’un des moyens les plus efficaces d’exécuter des microservices.
À mesure que le nombre de microservices et de conteneurs augmente, le besoin d’automatiser la gestion des conteneurs augmente également. C'est là que Kubernetes entre en jeu.
Kubernetes orchestre et exécute des applications conteneurisées à grande échelle ; cependant, il ne fournit pas les moyens de conditionner le code application dans un format conteneurisé pour la distribution et l'exécution (une image de conteneur inclut le code de l'application et les environnements d'exécution, bibliothèques et autres dépendances logicielles nécessaires). Pour que les pods fonctionnent, Kubernetes nécessite également qu'un environnement d'exécution de conteneur soit installé sur chaque nœud. Kubernetes utilisait à l’origine Docker Engine comme environnement d’exécution du conteneur. Cependant, à partir de Kubernetes 1.24, l'environnement d'exécution du conteneur doit être conforme à l'interface d'exécution du conteneur (CRI), ce que Docker Engine ne fait pas. CRI-O et containerd (à l'origine un projet Docker) sont deux environnements d'exécution de conteneurs compatibles CRI populaires.
Pour regrouper des applications dans des conteneurs, vous avez besoin d'un outil comme Docker , l'un des outils les plus populaires pour créer, partager et exécuter des applications conteneurisées. Il rationalise et automatise le packaging des applications dans des images de conteneurs portables prêtes à être exécutées et déployées sur site, dans le cloud, y compris dans les environnements Kubernetes. Les conteneurs packagés Docker peuvent être exécutés de manière native sur les environnements d'exécution containerd et CRI-O.
Une plateforme Kubernetes est composée de nœuds réunis dans un cluster où ils partagent des ressources de calcul mutualisées. Chaque cluster gère des pods qui sont les plus petites unités déployables dans l'architecture Kubernetes. Un pod contient un ou plusieurs conteneurs d'applications. Les pods sont regroupés pour constituer un service. Les applications à l'intérieur d'un cluster Kubernetes sont accessibles depuis l'extérieur à l'aide de plusieurs méthodes , le contrôleur Ingress étant l'une des plus populaires et des plus efficaces.
Examinons de plus près les composants d’un environnement Kubernetes :
Un pod Kubernetes est la plus petite unité exécutable pouvant être déployée dans Kubernetes. Le pod est un « hôte virtuel » pour l’image ou les images du conteneur d’applications (comme un serveur physique ou une machine virtuelle pour les applications traditionnelles), et il encapsule un ou plusieurs conteneurs qui partagent les mêmes ressources de calcul, de stockage et de réseau (et peuvent donc être considérés comme étant couplés relativement étroitement). Les pods sont déployés et exécutés sur des nœuds Kubernetes.
Un nœud Kubernetes est la plus petite unité d'une infrastructure de calcul. Le nœud peut être une machine virtuelle ou un serveur physique qui alloue des ressources de processeur, de mémoire, de stockage et de réseau pour déployer, exécuter, mettre à l'échelle et gérer des pods. Les nœuds sont réunis pour former un cluster.
Un cluster Kubernetes est un groupe de nœuds où les ressources de calcul mutualisées sont partagées entre les pods. Il existe deux types de nœuds dans un cluster :
En règle générale, il existe plusieurs nœuds de chaque type dans un cluster Kubernetes, pour une haute disponibilité et une tolérance aux pannes.
Un déploiement Kubernetes décrit comment exécuter une application en tant qu’ensemble de répliques (ou instances) du pod dans un cluster. Un déploiement définit :
Kubernetes prend en charge une double pile IPv4/IPv6 pour fournir une connectivité réseau aux applications conteneurisées exécutées dans un cluster. La communication vers et depuis les applications du cluster Kubernetes et la communication entre les services au sein du cluster sont gérées au niveau de la couche 4 (adresse IP, port) et de la couche 7 (nom d'hôte, identifiant de ressource universel [URI]) et incluent des capacités de routage, d'équilibrage de charge, de sécurité, de surveillance et de visibilité.
Dans le modèle de mise en réseau Kubernetes , chaque pod possède une adresse IP unique qui est attribuée dynamiquement à partir du pool d'adresses privées du cluster. Tous les pods exécutés sur tous les nœuds du même cluster appartiennent au même réseau IP et peuvent communiquer entre eux via ce réseau. Plusieurs conteneurs au sein d'un pod communiquent entre eux via l'interface de bouclage.
Un service Kubernetes rend l'application ou le microservice exécuté en tant qu'un ou plusieurs pods du cluster accessible (« l'expose ») sur le réseau. Un service Kubernetes représente l'application sous la forme d'un groupe logique de pods désignés qui exécutent la même fonction, par exemple, le service Web. Le même sélecteur (ou étiquette) est appliqué à tous les pods d’un service pour marquer leur appartenance au service. Kubernetes utilise l'étiquette pour suivre l'ensemble des pods d'un service lorsque de nouveaux pods sont déployés ou que les pods en cours d'exécution sont arrêtés.
Les services Kubernetes peuvent communiquer entre eux au sein du cluster selon les politiques de connectivité définies et peuvent être rendus accessibles depuis l'extérieur du cluster, par exemple, en utilisant un contrôleur Ingress.
L'objet Ingress, une partie de l'API Kubernetes Ingress, peut être utilisé pour exposer en externe des applications exécutées dans Kubernetes via des protocoles de couche 7 (couche application ) comme HTTP. Les passerelles d'entrée et les contrôleurs d'entrée sont des outils conçus pour contrôler l'objet Ingress et gérer les communications entre les utilisateurs et les applications (connectivité utilisateur-service ou nord-sud).
De par sa conception, l'objet Ingress offre une prise en charge limitée des stratégies de gestion des demandes personnalisées ; par exemple, vous ne pouvez pas définir ni lui associer de stratégies de sécurité. Par conséquent, de nombreux fournisseurs utilisent des définitions de ressources personnalisées (CRD) pour étendre les capacités de leurs contrôleurs Ingress, afin de répondre aux exigences évolutives des clients.
À titre d’exemple, NGINX Ingress Controller définit des ressources personnalisées (VirtualServer, VirtualServerRoute, TransportServer et Policy) pour améliorer les performances, la résilience, la disponibilité, la sécurité et l’observabilité de la passerelle API, de l’équilibreur de charge et des fonctionnalités Ingress à la périphérie d’un cluster Kubernetes.
NGINX fournit des services d'équilibrage de charge, d'authentification, d'autorisation, de contrôle d'accès, de cryptage, d'observabilité et de répartition du trafic (disjoncteur, tests A/B et déploiements bleu-vert et canari) pour garantir que la communication est rapide, fiable et sécurisée. Pour prendre en charge les versions fréquentes d'applications, les ressources personnalisées NGINX permettent également une gouvernance en libre-service au sein des équipes de développement multi-locataires et DevOps.
L' API Gateway est un projet open source destiné à améliorer et à standardiser la mise en réseau des services dans Kubernetes. Gérée par la communauté Kubernetes, la spécification de l'API Gateway a évolué à partir de l'API Kubernetes Ingress pour résoudre les limitations de la ressource Ingress dans les environnements de production, y compris la possibilité de définir des politiques précises pour le traitement des demandes et de déléguer le contrôle de la configuration à plusieurs équipes et rôles.
Apprenez-en plus sur l'implémentation de l'API Gateway par NGINX dans 5 choses à savoir sur NGINX Gateway Fabric sur notre blog.
Un maillage de services est une couche d’infrastructure qui contrôle les communications entre les services d’un cluster Kubernetes (connectivité de service à service ou est-ouest). Les cas d’utilisation de maillage de services les plus courants incluent l’authentification/le chiffrement mTLS et l’observabilité des communications se produisant entre les services d’un cluster K8s.
Pour en savoir plus sur la distribution d'applications unifiée avec NGINX Gateway Fabric , conçue pour combiner efficacement les cas d'utilisation du contrôleur Ingress et du service mesh dans un seul outil , consultez l'annonce de NGINX Gateway Fabric version 1.0 sur notre blog.
La sécurité Kubernetes est une approche en couches visant à protéger l'infrastructure (ressources de calcul sur site et dans le cloud, communications réseau et plan de gestion) et les applications exécutées dans un cluster Kubernetes.
Pour sécuriser l’infrastructure, suivez les recommandations générales de sécurité, les tutoriels et les bonnes pratiques pour protéger les implémentations cloud et sur site.
Pour des applications sécurisées, implémentez des contrôles de sécurité renforcés en périphérie et au sein d'un cluster Kubernetes pour fournir l'authentification, l'autorisation, le contrôle d'accès, le chiffrement, la surveillance et la visibilité, avec un pare-feu application Web en option et une protection contre le déni de service, pour toutes les communications vers/depuis et au sein d'un cluster.
Pour en savoir plus sur la sécurisation de Kubernetes, consultez notre blog Six façons de sécuriser Kubernetes à l'aide d'outils de gestion du trafic .
Aux premiers jours de l’adoption de Kubernetes, l’approche Do-It-Yourself (DIY) était dominante. Cependant, elle est complexe et difficile à créer et à exploiter pour de nombreuses organisations. Pour cette raison, pour les déploiements de production, les organisations adoptent des plateformes Kubernetes gérées dans le cloud et des distributions Kubernetes prépackagées qui intègrent divers composants technologiques, simplifiant le cycle de vie de la maintenance et peuvent être déployées dans des environnements hybrides et multicloud.
Quelques exemples de plateformes Kubernetes gérées et pré-packagées sont présentés ci-dessous :
Kubernetes géré dans le cloud :
Distributions Kubernetes pré-packagées :
La pile de connectivité et de sécurité native Kubernetes de NGINX contribue à améliorer l'expérience client avec une complexité réduite, une disponibilité accrue et une visibilité détaillée en temps réel à grande échelle pour les applications Kubernetes exécutées sur site, dans le cloud et en périphérie.
Connectivity Stack pour Kubernetes – Optimisez, faites évoluer et sécurisez les applications Kubernetes dans des environnements hybrides et multicloud.
Commencez par demander votre essai gratuit de 30 jours de NGINX Ingress Controller avec NGINX App Protect WAF et DoS.