Concepts de mise en réseau pour les conteneurs Kubernetes
Kubernetes est une plateforme open source, extensible et portable permettant d’automatiser le déploiement, la mise à l’échelle et la gestion de vos charges de travail conteneurisées. Comme plateforme d’orchestration, Kubernetes offre la simplicité d’utilisation et la flexibilité que les offres PaaS (Platform as a Service) et IaaS (Infrastructure as a Service).
Important
Vous devez comprendre des concepts comme les réseaux virtuels, les équilibreurs de charge et les proxys inverses pour configurer la mise en réseau Kubernetes.
Clusters et nœuds
Kubernetes est basé sur les clusters. Au lieu d’avoir une unique machine virtuelle, elle utilise plusieurs machines virtuelles (appelées nœuds) qui fonctionnent ensemble comme une machine virtuelle. Kubernetes utilise une architecture de cluster avec un nœud principal et un ou plusieurs nœuds Worker. Le nœud principal exécute les composants du plan de contrôle, notamment le serveur d’API, le planificateur et le gestionnaire de contrôleurs. Les nœuds Worker exécutent les composants du plan de données, notamment kubelet, kube-proxy et le runtime de conteneur.
Le composant kube-proxy est responsable du réseau du cluster local et s’exécute sur chaque nœud. Il s’assure que chaque nœud a une adresse IP unique. Cela implémente également des règles pour gérer le routage et l’équilibrage de charge du trafic avec des tables IP et un serveur IP virtuel. Ce proxy ne fournit pas de services DNS par lui-même. Une extension de cluster DNS basé sur CoreDNS est recommandé et installé par défaut.
Pods
Un pod Kubernetes regroupe des conteneurs et des applications dans une structure logique. Ces pods n’ont pas d’intelligence, et se composent d’un ou de plusieurs conteneurs d’application. Chacun a une adresse IP, des règles réseau et des ports exposés.
Un déploiement Kubernetes est une évolution des pods. Un déploiement encapsule les pods dans un objet intelligent qui leur permet d’effectuer un scale-out. Vous pouvez facilement dupliquer et mettre à l’échelle votre application pour qu’elle exécute une charge plus importante sans devoir configurer des règles réseau complexes.
Ressources de la couche d’abstraction
Pour autoriser l’accès à vos applications ou entre les composants d’application, Kubernetes fournit une couche d’abstraction à la mise en réseau virtuel. Des nœuds Kubernetes connectés à un réseau virtuel qui fournit une connectivité entrante et sortante aux pods. Le composant kube-proxy s’exécute sur chaque nœud afin de fournir ces fonctionnalités de réseau.
Dans Kubernetes :
- Services regroupant des pods de manière logique pour permettre un accès direct à un port spécifique par une adresse IP ou un nom DNS.
- Les ServiceTypes vous permettent de spécifier le type de service souhaité.
- Vous pouvez distribuer le trafic à l’aide d’un équilibreur de charge.
- Vous pouvez affiner le routage de couche 7 du trafic des applications avec des contrôleurs d’entrée.
- Vous pouvez contrôler le trafic sortant (sortant) pour les nœuds de cluster.
- La sécurité et le filtrage du trafic réseau pour les pods sont possibles avec des stratégies réseau.
Réseaux dans Kubernetes
Kubernetes a des exigences spécifiques concernant la façon dont vous implémentez la mise en réseau d’un cluster. Vos choix de configuration affectent les options d’exposition de vos applications sur le réseau du cluster et le stockage des données. Pour simplifier la communication, Kubernetes s’attend à une configuration réseau telle que :
- Les pods puissent communiquer les uns avec les autres sur les nœuds sans traduction d’adresses réseau (NAT).
- Les nœuds et les pods peuvent communiquer ensemble sans NAT.
- Les agents sur un nœud puissent communiquer avec tous les nœuds et tous les pods.
La configuration d’un conteneur et les données qu’il contient ne sont pas persistantes entre les exécutions. Une fois que vous supprimez un conteneur, toutes les informations sont supprimées, sauf si ce conteneur est configuré pour utiliser un volume. Il en va de même pour la configuration réseau du conteneur et de toutes les adresses IP qui lui sont affectées.
Un déploiement est un regroupement logique de pods. Il n’est pas considéré comme une charge de travail physique et aucune adresse IP ne lui est affectée. Chaque pod reçoit automatiquement une adresse IP qui est perdue à la destruction du pod. Ce comportement rend complexe une stratégie de configuration réseau manuelle.
Options de mise en réseau Kubernetes pour des conteneurs Windows
Lorsque vous déployez Kubernetes avec des conteneurs Windows, deux options de mise en réseau sont disponibles : Services et contrôleurs d’entrée. Pour utiliser ces options, Windows dépend des plug-ins CNI (Container Network Interface).
Pour simplifier la configuration réseau pour les charges de travail d’application, Kubernetes utilise des services pour regrouper logiquement un ensemble de pods et assurer la connectivité réseau. Le service fonctionne comme un point d’entrée pour le groupe de pods, tout en fournissant une adresse IP statique. Le trafic arrive au niveau du service du groupe et est distribué dans un modèle en tourniquet (round robin) aux pods. Les adresses IP des pods changeant au fil du temps, le service effectue le suivi des modifications pour garantir un flux correct du trafic réseau vers les pods.
Les applications conteneurisées, s’exécutant sur Kubernetes, doivent envoyer et recevoir des données sur Internet. Kubernetes prend en charge cette communication par des composants d’entrée et de sortie. Le contrôleur d’entrée spécifie le trafic et les sources pouvant se connecter à vos services. Le contrôleur de sortie vous permet de connecter vos applications à des entités externes par une passerelle Internet.
Les plug-ins CNI permettent à Kubernetes d’utiliser différentes interfaces réseau pour la mise en réseau des conteneurs. Les plug-ins connectent vos pods au réseau et leur allouent des adresses IP. Ils interagissent avec les services HNS (Host Networking Service) et HCS (Host Compute Service) de Windows pour créer et gérer les ressources réseau des conteneurs Windows. Calico, Flannel et Azure CNI sont des exemples de plug-ins.
Kubernetes ServiceTypes
Pour configurer le service que vous souhaitez, vous pouvez spécifier l’un des ServicesTypes Kubernetes suivants :
- ClusterIP crée une adresse IP interne à utiliser dans le cluster. Ce service s’avère utile aux applications exclusivement internes qui prennent en charge d’autres charges de travail au sein du cluster. Il s’agit de la valeur par défaut utilisée si vous ne spécifiez pas explicitement un type de service.
- NodePort crée un mappage de port sur le nœud sous-jacent qui rend l’application accessible directement avec l’adresse IP et le port du nœud.
- LoadBalancer crée une ressource de l’équilibreur de charge, configure une adresse IP externe et connecte les pods demandés au pool de back-ends de l’équilibreur de charge. Pour que le trafic des clients puisse atteindre l’application, des règles d’équilibrage de charge sont créées sur les ports souhaités.
Pour l’équilibrage de charge HTTP/S du trafic entrant, une autre option consiste à utiliser un contrôleur d’entrée.
- ExternalName crée une entrée DNS spécifique pour faciliter l’accès à l’application.
Entrée Kubernetes
Le composant d’entrée Kubernetes expose des routes vers le trafic HTTP et HTTPS depuis l’extérieur d’un cluster vers des services dans le cluster. Vous définissez des routes d’entrée en utilisant des règles d’entrée. Un cluster Kubernetes rejette tout le trafic entrant si ces routes ne sont pas définies.
Contrôleur d’entrée
Un contrôleur d’entrée est un logiciel qui fournit un routage du trafic configurable pour les services Kubernetes. Des ressources d’entrée Kubernetes sont utilisées pour configurer les règles d’entrée et les itinéraires des services Kubernetes individuels. En utilisant un contrôleur d’entrée et des règles d’entrée, vous pouvez utiliser une seule adresse IP pour acheminer le trafic vers plusieurs services dans un cluster Kubernetes. Après avoir déployé le contrôleur dans votre environnement, vous pouvez créer et déployer le manifeste d’entrée. Kubernetes utilise des contrôleurs d’entrée pour gérer la configuration de l’entrée dans un cluster et fournit plusieurs fonctionnalités.
Règles d’entrée
Les règles d’entrée définissent d’où provient le trafic et où le diriger au sein d’un cluster. Vous définissez des règles d’entrée dans un fichier manifeste de déploiement d’entrée. Ces règles sont définies dans la clé des règles du fichier manifeste. Chaque règle est un ensemble de valeurs qui décrit la règle.
Annotations de l’entrée
Une annotation vous permet d’attacher des métadonnées non identifiantes, comme des configurations d’entrée, pour les charges de travail. Vous pouvez considérer l’annotation comme une étiquette interne qui définit des configurations spécifiques pour des ressources. Par exemple, vous pouvez utiliser un contrôleur d’entrée spécifique qui prend en charge la réécriture de noms ou la limitation des charges utiles.
Stratégies réseau
Kubernetes fournit la fonctionnalité stratégie réseau afin de contrôler le flux du trafic entre des pods. Vous pouvez autoriser ou refuser le trafic en fonction de vos paramètres pour les étiquettes, l’espace de noms et le port de trafic attribués. Les stratégies réseau permettent une approche native cloud, idéale pour contrôler le trafic entre les pods Kubernetes.