Un aperçu détaillé de l’exécution de Kubernetes qui vous aidera à bien faire les choses du premier coup
Dans un article précédent, nous nous sommes concentrés sur six choses les plus importantes dont vous avez besoin pour exécuter Kubernetes en production. Pour obtenir un aperçu plus approfondi de la configuration d’un cluster Kubernetes prêt pour la production, nous avons créé une série plus détaillée sur la façon d’exécuter Kubernetes en production. Ceci est le premier article.
L’infrastructure est l’une des six catégories. Lorsque vous configurez un cluster Kubernetes, c’est là que vous commencerez. Cet article se concentrera sur l’infrastructure cloud nécessaire pour une pile Kubernetes prête pour la production, de sorte que vous réussirez (espérons-le) du premier coup.
La configuration de Kubernetes dans le cloud peut se faire en quelques clics sur le portail cloud de votre choix. Azure rend cela encore plus simple qu’AWS. Cependant, si vous voulez une pile mature et prête pour la production, les actions manuelles dans un portail, une console ou tout autre type d’interface utilisateur ne sont pas la solution. De plus, la configuration par défaut de Kubernetes, par exemple du point de vue de la mise en réseau, n’est malheureusement pas la méthode la plus sécurisée. Vous devez concevoir votre configuration IaC, votre stratégie de mise en réseau, vos pools de nœuds et l’infrastructure environnante lorsque vous créez un cluster Kubernetes.
Tout d’abord, Infrastructure as Code devrait être votre seule stratégie de déploiement si vous travaillez avec une infrastructure cloud. N’utilisez pas une interface utilisateur pour créer une infrastructure de production. Essayez également d’éviter de créer des scripts pour votre infrastructure en utilisant directement les API cloud ou en utilisant des CLI cloud, car vous auriez besoin d’écrire une logique de code pour l’ensemble du CRUD de votre infrastructure (créer, lire, mettre à jour, supprimer). La meilleure façon est de configurer votre infrastructure de manière déclarative et de ne spécifier que l’état final souhaité.
Sélection d’outils
De nombreux outils font de l’infrastructure en tant que code. Terraforme est l’outil IaC open source le plus utilisé et possède la meilleure documentation pour démarrer rapidement. birman peut être une bonne alternative si vous souhaitez un outil IaC axé sur les développeurs. Une solution IaC plus récente et prometteuse est Plan croisé, qui est entièrement basé sur Kubernetes et a un grand potentiel en tant que solution IaC de style GitOps. Il exécute même Terraform. Mais avant de vous engager dans cette voie, assurez-vous de faire des tests approfondis. À l’heure actuelle, Terraform est la solution la plus mature et la plus utilisée.
Créer des pipelines de déploiement d’infrastructure
Avoir IaC est déjà un grand avantage, mais pour être complètement piloté par le code, assurez-vous d’automatiser le déploiement autant que possible. Utilisez des pipelines semi-automatisés pour les déploiements d’infrastructure, et n’oubliez pas de traiter votre infrastructure « comme du code », ce qui signifie que vous devez tester automatiquement votre infrastructure dans votre pipeline de déploiement (par exemple, en utilisant Terratest).
Utiliser des déploiements bleu/vert
Sans aucun doute, la meilleure façon de déployer de nouvelles versions d’une infrastructure moderne est de la recréer. Par exemple, les mises à jour de l’infrastructure sans temps d’arrêt peuvent être effectuées à l’aide de déploiements bleu/vert. De cette façon, vous pouvez traiter votre Les clusters Kubernetes comme du bétail, ce qui signifie que votre cluster Kubernetes peut être recréé à tout moment s’il n’est pas sain. Assurez-vous de tester fréquemment votre stratégie de déploiement bleu/vert pour éviter toute dérive de configuration.
Kubernetes n’est probablement pas le seul élément de votre pile technologique. Vous pouvez avoir des machines virtuelles, des bases de données, des VPN ou même un réseau complet sur site. Cela signifie que Kubernetes doit s’intégrer à votre réseau actuel.
Planification d’adresse IP
La plupart des services cloud gérés (comme AKS ou EKS) sont livrés avec un réseau par défaut avec une plage d’adresses IP par défaut (souvent 10.0.0.0/16
). Si vous vous en tenez aux valeurs par défaut du cloud, vous aurez des difficultés à appairer les réseaux. Cela se traduit souvent par des règles NAT complexes et déroutantes pour acheminer le trafic vers des réseaux qui se chevauchent. Il est préférable de bien faire les choses du premier coup en mettant en place une bonne architecture réseau avec des blocs CIDR prédéfinis. Assurez-vous que vos adresses IP privées ne se chevauchent pas, y compris lorsque les réseaux ne sont pas encore appairés.
Grappes privées
Vous savez probablement que Kubernetes se compose d’un plan de contrôle (également appelé nœuds maîtres) et de nœuds sur lesquels vous exécutez vos applications (nœuds de travail). Par défaut, dans Azure (AKS) et AWS (EKS), votre API de plan de contrôle sera exposée publiquement à Internet, ce qui constitue un risque de sécurité inutile. Dans un analyse récente, 380 000 des 450 000 clusters analysés ont été exposés publiquement à Internet. Cela augmente la surface d’attaque et doit être évité. En savoir plus sur la façon de résoudre ce problème sur AK ou alors EX. Une liste blanche VPN ou IP peut permettre aux ingénieurs d’accéder à l’API Kubernetes tout en bloquant tout autre trafic externe.
Une autre partie qui peut facilement être manquée est les applications de gestion qui exposent les API et les interfaces utilisateur (ArgoCD, Prometheus, Grafana, Kubernetes Dashboard, etc.). Assurez-vous que ces applications ne sont accessibles qu’en privé à l’aide d’une liste blanche IP ou d’un VPN. Inutile de dire que vous devez également les sécuriser à l’aide de mécanismes d’authentification et d’autorisation.
Trafic entrant et sortant
La meilleure pratique pour les API et les interfaces utilisateur accessibles au public dans votre cluster Kubernetes consiste à utiliser un contrôleur d’entrée lié à un Cloud LoadBalancer, une adresse IP et un DNS. De cette façon, vous pouvez gérer de manière centralisée tout le trafic entrant avec les politiques de mise en réseau et les règles d’entrée correspondantes. Assurez-vous que ces composants sont configurés en toute sécurité et que votre contrôleur d’entrée est régulièrement corrigé.
Par défaut, les conteneurs Kubernetes dans le cloud peuvent communiquer avec Internet. Cependant, certaines entreprises (comme les grandes entreprises) ont des normes de sécurité plus strictes. Restreindre le trafic Internet de vos applications est une exigence très courante. Si tel est le cas, concevez vos règles de pare-feu en conséquence. Cela peut également être organisé à l’intérieur de Kubernetes en utilisant Politiques réseau.
Les clusters Kubernetes peuvent être comparés à des organismes vivants. Comme les cellules, les applications se déplacent en permanence sur vos nœuds (VM). Ils peuvent être tués ou mis à l’échelle. Vous devez concevoir l’architecture de vos applications et clusters pour ce mouvement continu. Pensez à vos applications et à leurs exigences telles que le processeur, la mémoire, le stockage, la mise à l’échelle automatique et la haute disponibilité.
Mise à l’échelle automatique
L’autoscaling peut être mis en œuvre à plusieurs niveaux, au niveau de l’application et du nœud. Il a de multiples avantages. Tout d’abord, cela vous fera économiser des coûts car vous ne payez que pour les ressources que vous utilisez. Deuxièmement, vos applications deviendront plus matures. Les applications doivent faire face à la mort, vous donnant automatiquement une architecture plus robuste.
La haute disponibilité
Kubernetes est censé être « opérationnel » tout le temps. Si vous souhaitez éviter les temps d’arrêt en cas de panne, assurez-vous de configurer votre pile pour qu’elle soit hautement disponible sur plusieurs niveaux de panne. Voici comment procéder :
- Exécutez plusieurs répliques de votre application – plusieurs pods (au niveau du pod)
- Déployez plusieurs nœuds sur votre cluster (au niveau du nœud)
- Déployez vos nœuds dans plusieurs zones de disponibilité (niveau AZ)
Un cluster Kubernetes géré ne doit jamais être un service autonome. De nombreux services gérés (cloud) peuvent être utilisés pour décharger certaines fonctionnalités. Beaucoup de choses ne doivent pas être gérées au sein du cluster, car cela entraîne une surcharge de maintenance importante. Quelques exemples de services externes sont listés ci-dessous :
- Registre des conteneurs
- Gestion des identités et des accès (IAM)
- Coffres secrets
- Les plateformes de notification d’alerte comme Slack, PagerDuty, etc.
- Bases de données externes
- Référentiels Git pour les déploiements GitOps
- Émetteurs de certificats SSL (par exemple, LetsEncrypt)
Pour intégrer ces services externes (cloud), vous devez configurer des comptes de service Kubernetes avec l’accès approprié et installer des opérateurs Kubernetes tels que ArgoCD ou alors SecretsExternes. Avec tous ces outils externes, assurez-vous de respecter le principe du moindre privilège pour des raisons de sécurité.
Il faut un peu de planification et de conception pour mettre en place une infrastructure cloud de production pour Kubernetes. Tout d’abord, assurez-vous d’avoir une infrastructure déclarative en tant que configuration de code pour toute votre infrastructure cloud. Deuxièmement, pensez à votre réseau à l’avance afin de ne pas rencontrer de problèmes plus tard. Enfin, assurez-vous que vos groupes de nœuds sont correctement configurés et que vous disposez d’une bonne intégration avec les services cloud externes.
S’il vous plaît, ne réinventez pas la roue. Il existe de nombreux exemples et bonnes pratiques que vous pouvez utiliser pour mettre en place une bonne architecture. Pour gagner un temps précieux et passer directement au développement d’applications, notre équipe de Pionatif peut aider.
Merci d’avoir lu. Restez à l’écoute pour plus.