Sécurité de Helm

L'essence de l'histoire sur le gestionnaire de paquets le plus populaire pour Kubernetes pourrait ĂȘtre reprĂ©sentĂ©e par ces Ă©mojis :

  • une boĂźte — c'est Helm (c'est ce qui convient le mieux dans la derniĂšre version d'Emoji);
  • un cadenas — sĂ©curitĂ©;
  • une petite figurine — la solution au problĂšme.

Sécurité de Helm

En réalité, tout sera un peu plus complexe, et l'histoire est pleine de détails techniques sur comment rendre Helm sécurisé..

  • En bref, qu'est-ce que Helm, si vous ne le saviez pas ou si vous l'avez oubliĂ©. Quels problĂšmes il rĂ©sout et oĂč il se situe dans l'Ă©cosystĂšme.
  • Examinons l'architecture de Helm. Aucune discussion sur la sĂ©curitĂ© et sur la façon de rendre un outil ou une solution plus sĂ©curisĂ©e ne peut se faire sans une comprĂ©hension de l'architecture du composant.
  • Discutons des composants de Helm.
  • La question la plus pressante — l'avenir — la nouvelle version de Helm 3. 

Tout dans cet article concerne Helm 2. Cette version est actuellement en production et c'est probablement celle que vous utilisez en ce moment, et c'est dans celle-ci qu'il existe des menaces pour la sécurité.

Lire la vidéo

À propos des intervenants : Alexandre Khayev (allexx) dĂ©veloppe depuis 10 ans, aide Ă  amĂ©liorer le contenu Moscow Python Conf++ et a rejoint le comitĂ© Helm Summit. Il travaille actuellement chez Chainstack en tant que responsable du dĂ©veloppement — un hybride entre un chef de dĂ©veloppement et quelqu'un qui est responsable de la livraison des versions finales. C'est-Ă -dire qu'il est sur le terrain, lĂ  oĂč tout se passe, de la crĂ©ation du produit Ă  son exploitation.

Chainstack est une petite start-up en forte croissance, dont la mission est de permettre aux clients d'oublier l'infrastructure et les complexités de l'exploitation des applications décentralisées, l'équipe de développement est à Singapour. Ne demandez pas à Chainstack de vendre ou d'acheter des cryptomonnaies, mais proposez de discuter des cadres blockchain pour les entreprises, et ils vous répondront avec plaisir.

Helm

C'est un gestionnaire de paquets (charts) pour Kubernetes. La maniĂšre la plus claire et universelle d'apporter des applications dans un cluster Kubernetes.

Sécurité de Helm

Il s'agit, bien sûr, d'une approche plus structurée et industrielle que de créer ses propres manifestes YAML et d'écrire de petites utilitaires.

Helm est le meilleur de ce qui est actuellement disponible et populaire.

Pourquoi Helm ? Tout d'abord, parce qu'il est soutenu par la CNCF. Cloud Native est une grande organisation, mĂšre des projets Kubernetes, etcd, Fluentd et d'autres.

Un fait important, Helm est un projet trÚs populaire. En janvier 2019, lorsque j'ai commencé à réfléchir à comment rendre Helm sécurisé, le projet avait mille étoiles sur GitHub. En mai, cela avait atteint 12 000.

Beaucoup s'intĂ©ressent Ă  Helm, donc mĂȘme si vous ne l'utilisez pas encore, il vous sera utile de connaĂźtre sa sĂ©curitĂ©. La sĂ©curitĂ© est importante.

L'équipe principale de Helm est soutenue par Microsoft Azure, ce qui en fait un projet assez stable comparé à beaucoup d'autres. La sortie de Helm 3 Alpha 2 à la mi-juillet montre qu'il y a de nombreuses personnes travaillant sur le projet, et qu'elles ont le désir et les capacités de développer et améliorer Helm.

Sécurité de Helm

Helm résout plusieurs problÚmes fondamentaux de gestion d'applications dans Kubernetes.

  • L'emballage d'applications. MĂȘme une application simple comme « Hello, World » sur WordPress reprĂ©sente dĂ©jĂ  plusieurs services, et il est souhaitable de les regrouper.
  • La gestion de la complexitĂ© qui Ă©merge de la gestion de ces applications.
  • Le cycle de vie qui ne se termine pas aprĂšs l'installation ou le dĂ©ploiement d'une application. Elle continue de vivre, elle doit ĂȘtre mise Ă  jour, et Helm aide Ă  cela en cherchant Ă  Ă©tablir les bonnes mesures et politiques.

L'emballage est organisé de maniÚre évidente : il y a des métadonnées en conformité avec le fonctionnement d'un gestionnaire de paquets classique pour Linux, Windows ou MacOS. C'est-à-dire un dépÎt, des dépendances entre différents paquets, des métainformations pour les applications, des configurations, des particularités de configuration, un index d'informations, etc. Tout cela Helm permet de récupérer et d'utiliser pour les applications.

La gestion de la complexité. Si vous avez beaucoup d'applications similaires, vous aurez besoin de paramétrisation. Cela conduit aux modÚles, mais pour ne pas avoir à inventer votre propre méthode de création de modÚles, vous pouvez utiliser ce que Helm offre tout de suite.

La gestion du cycle de vie d'une application — Ă  mon avis, c'est la question la plus intĂ©ressante et non rĂ©solue. C'est pourquoi Ă  l'Ă©poque, je me suis tournĂ© vers Helm. Nous devions suivre le cycle de vie d'une application, nous voulions transfĂ©rer notre CI/CD et nos cycles d'applications dans cette paradigme.

Helm permet de :

  • gĂ©rer les dĂ©ploiements, introduit la notion de configuration et de rĂ©vision ;
  • effectuer des rollback avec succĂšs ;
  • utiliser des hooks pour diffĂ©rents Ă©vĂ©nements ;
  • ajouter des vĂ©rifications supplĂ©mentaires des applications et rĂ©agir Ă  leurs rĂ©sultats.

De plus, Helm a des « batteries » — un grand nombre de choses dĂ©licieuses que vous pouvez inclure sous forme de plugins, simplifiant ainsi votre vie. Les plugins peuvent ĂȘtre Ă©crits vous-mĂȘme, ils sont assez isolĂ©s et ne nĂ©cessitent pas une architecture complexe. Si vous voulez rĂ©aliser quelque chose, je vous recommande de le faire sous forme de plugin, puis Ă©ventuellement de l'inclure dans l'upstream.

Helm repose sur trois concepts principaux :

  • Chart Repo — une description et un ensemble de paramĂštres possibles pour votre manifeste. 
  • Configuration — c'est-Ă -dire les valeurs qui seront appliquĂ©es (texte, valeurs numĂ©riques, etc.).
  • Publication combine les deux composants supĂ©rieurs, et ensemble ils se transforment en Release. Les releases peuvent ĂȘtre versionnĂ©es, assurant ainsi l'organisation du cycle de vie : petite au moment de l'installation et importante au moment de la mise Ă  niveau, de la rĂ©trogradation ou du retour en arriĂšre.

Architecture de Helm

Le schéma reflÚte conceptuellement l'architecture de haut niveau de Helm.

Sécurité de Helm

Je rappelle que Helm est liĂ© Ă  Kubernetes. Donc, nous ne pouvons pas nous passer d'un cluster Kubernetes (rectangle). Le composant kube-apiserver se trouve sur le maĂźtre. Sans Helm, nous avons Kubeconfig. Helm apporte un petit binaire, si l'on peut l'appeler ainsi, l'outil Helm CLI, qui s'installe sur un ordinateur, un portable, un mainframe — sur n'importe quoi.

Mais cela ne suffit pas. Helm a un composant serveur, Tiller. Il reprĂ©sente les intĂ©rĂȘts de Helm au sein du cluster, c'est une application Ă  l'intĂ©rieur du cluster Kubernetes, tout comme n'importe quelle autre.

Le composant suivant, Chart Repo, est un dépÎt de charts. Il existe un dépÎt officiel et il peut y avoir un dépÎt privé d'entreprise ou de projet.

Interaction

Voyons comment les composants de l'architecture interagissent lorsque nous voulons installer une application avec Helm.

  • Nous disons Helm install, nous nous adressons au dĂ©pĂŽt (Chart Repo) et obtenons le chart Helm.

  • L'outil Helm (Helm CLI) interagit avec Kubeconfig pour dĂ©terminer Ă  quel cluster s'adresser. 
  • Une fois cette information obtenue, l'outil s'adresse Ă  Tiller, qui se trouve dans notre cluster, en tant qu'application. 
  • Tiller interroge le Kube-apiserver pour effectuer des actions dans Kubernetes, crĂ©er des objets (services, pods, rĂ©pliques, secrets, etc.).

Ensuite, nous compliquerons le schĂ©ma pour voir les vecteurs d'attaque auxquels l'ensemble de l'architecture Helm peut ĂȘtre exposĂ©. Puis nous essaierons de le protĂ©ger.

Vecteur d'attaque

Le premier point potentiellement faible est — l'API privilĂ©giĂ©e—utilisateur. Dans le cadre du schĂ©ma, c'est un hacker ayant obtenu un accĂšs administrateur au Helm CLI.

Utilisateur API non privilĂ©giĂ© peut Ă©galement reprĂ©senter un danger s'il se trouve Ă  proximitĂ©. Cet utilisateur aura un autre contexte, par exemple, il peut ĂȘtre enregistrĂ© dans un namespace du cluster dans les paramĂštres de Kubeconfig.

Le vecteur d'attaque le plus intĂ©ressant pourrait ĂȘtre un processus qui se trouve Ă  l'intĂ©rieur du cluster, prĂšs de Tiller, et qui peut y accĂ©der. Cela pourrait ĂȘtre un serveur web ou un microservice qui voit l'environnement rĂ©seau du cluster.

Une variante exotique mais de plus en plus populaire d'attaque est liée au Chart Repo. Un chart créé par un auteur malintentionné peut contenir une ressource non sécurisée, et vous l'exécuterez en faisant confiance. Ou il peut remplacer le chart que vous téléchargez depuis le dépÎt officiel et, par exemple, créer une ressource sous forme de politiques et s'escalader l'accÚs.

Sécurité de Helm

Essayons de nous dĂ©fendre contre ces attaques venant de ces quatre angles et de comprendre oĂč se trouvent les problĂšmes dans l'architecture de Helm, et oĂč il n'y en a peut-ĂȘtre pas.

Consolidons le schéma, ajoutons plus d'éléments, mais gardons tous les composants de base.

Sécurité de Helm

Le Helm CLI communique avec le Chart Repo, interagit avec Kubeconfig, et le travail est transmis au cluster dans le composant Tiller.

Tiller est représenté par deux objets :

  • Le service Tiller-deploy, qui expose un certain service ;
  • Le pod Tiller-deploy (dans le schĂ©ma, en un seul exemplaire dans une rĂ©plique), qui gĂšre tout le travail et qui interroge le cluster.

Différents protocoles et schémas sont utilisés pour l'interaction. Du point de vue de la sécurité, ce qui nous intéresse le plus est :

  • Le mĂ©canisme par lequel le Helm CLI interroge le chart repo : quel protocole, y a-t-il une authentification et que peut-on en faire.
  • Le protocole selon lequel le Helm CLI, en utilisant kubectl, communique avec Tiller. Il s'agit d'un serveur RPC installĂ© Ă  l'intĂ©rieur du cluster.
  • Tiller lui-mĂȘme est accessible aux microservices qui se trouvent dans le cluster et interagit avec le Kube-apiserver.

Sécurité de Helm

Discutons de toutes ces directions dans l'ordre.

RBAC

Il est inutile de parler de sécurité dans Helm ou d'un autre service à l'intérieur du cluster sans avoir activé RBAC.

Il semble que ce ne soit pas la recommandation la plus rĂ©cente, mais je suis certain que beaucoup n'ont toujours pas activĂ© RBAC mĂȘme en production, car cela demande beaucoup de travail et nĂ©cessite de nombreuses configurations. NĂ©anmoins, je vous encourage Ă  le faire.

Sécurité de Helm

https://rbac.dev/ — un site d'avocat pour RBAC. Il rassemble une Ă©norme quantitĂ© de matĂ©riaux intĂ©ressants qui aideront Ă  configurer RBAC, montreront pourquoi il est bon et comment vivre avec en production.

Je vais essayer d'expliquer comment fonctionne Tiller et RBAC. Tiller fonctionne à l'intérieur du cluster sous un certain compte de service. En général, si RBAC n'est pas configuré, cela sera un super utilisateur. Dans la configuration de base, Tiller sera administrateur. C'est pourquoi on dit souvent que Tiller est un tunnel SSH vers votre cluster. En réalité, c'est le cas, donc vous pouvez utiliser un compte de service spécialisé au lieu du compte de service par défaut dans le schéma ci-dessus.

Lorsque vous initialisez Helm, que vous l'installez pour la premiÚre fois sur le serveur, vous pouvez définir un compte de service à l'aide de --service-account. Cela permettra d'utiliser un utilisateur avec le minimum de droits nécessaires. Cependant, vous devrez créer cette « guirlande » : Role et RoleBinding.

Sécurité de Helm

Malheureusement, Helm ne le fera pas pour vous. Vous ou votre administrateur de cluster Kubernetes devez préparer à l'avance un ensemble de Role et RoleBinding pour le compte de service à transmettre à Helm.

La question se pose — quelle est la diffĂ©rence entre Role et ClusterRole ? La diffĂ©rence est que ClusterRole s'applique Ă  tous les namespaces, contrairement aux rĂŽles et liaison de rĂŽle normaux, qui ne fonctionnent que pour un namespace spĂ©cialisĂ©. Vous pouvez configurer des politiques Ă  la fois pour l'ensemble du cluster et tous les namespaces, ainsi que de maniĂšre personnalisĂ©e pour chaque namespace individuellement.

Il convient de mentionner que RBAC permet de rĂ©soudre un autre gros problĂšme. Beaucoup se plaignent que Helm, malheureusement, n'est pas multitenancy (ne prend pas en charge la multi-location). Si plusieurs Ă©quipes consomment le cluster et utilisent Helm, il est impossible de configurer des politiques et de restreindre leur accĂšs dans ce cluster, car il y a un certain compte de service sous lequel Helm fonctionne, et il crĂ©e toutes les ressources dans le cluster Ă  partir de celui-ci, ce qui est parfois trĂšs gĂȘnant. C'est vrai — en tant que fichier binaire, en tant que processus, Helm Tiller n'a pas de notion de multitenancy..

Cependant, il existe un excellent moyen qui permet de lancer Tiller dans le cluster plusieurs fois. Il n'y a aucun problĂšme Ă  cela, Tiller peut ĂȘtre lancĂ© dans chaque namespace. Ainsi, vous pouvez profiter de RBAC, Kubeconfig comme contexte, et restreindre l'accĂšs Ă  un Helm spĂ©cial.

Cela ressemblera Ă  ce qui suit.

Sécurité de Helm

Par exemple, il existe deux Kubeconfig avec des contextes pour diffĂ©rentes Ă©quipes (deux namespaces): Équipe X pour l’équipe de dĂ©veloppement et un cluster pour l’administrateur. Le cluster de l'administrateur dispose de son propre Tiller large, situĂ© dans l’espace Kube-system namespace, avec un service-account avancĂ©. Et un namespace distinct pour l’équipe des dĂ©veloppeurs, qui pourront dĂ©ployer leurs services dans un namespace spĂ©cial.

C'est une approche fonctionnelle, Tiller n'est pas si gourmand, donc cela ne devrait pas affecter votre budget de maniĂšre significative. C'est l'une des solutions rapides.

N'hésitez pas à configurer Tiller séparément et à fournir Kubeconfig avec un contexte pour l'équipe, pour un développeur spécifique ou pour des environnements: Dev, Staging, Production (il est peu probable que tout soit sur un seul cluster, mais c'est possible).

En poursuivant notre histoire, passons de RBAC Ă  ConfigMaps.

ConfigMaps

Helm utilise des ConfigMaps comme stockage de données. Lorsque nous parlions d'architecture, il n'y avait pas de base de données contenant des informations sur les releases, configurations, rollbacks, etc. Pour cela, nous utilisons des ConfigMaps.

Le principal problĂšme avec les ConfigMaps est bien connu — elles ne sont pas sĂ©curisĂ©es par principe, elles ne peuvent pas stocker de donnĂ©es sensibles. Cela concerne tout ce qui ne doit pas ĂȘtre divulguĂ© au-delĂ  du service, par exemple, les mots de passe. Le moyen le plus natif pour Helm est actuellement de passer de l'utilisation de ConfigMaps aux secrets.

C'est trÚs simple à faire. Vous redéfinissez la configuration de Tiller et indiquez que le stockage sera des secrets. Ainsi, à chaque déploiement, vous obtiendrez non pas un ConfigMap, mais un secret.

Sécurité de Helm

Vous pourriez argumenter que les secrets eux-mĂȘmes sont un concept Ă©trange, et que ce n'est pas trĂšs sĂ»r. Cependant, il est important de comprendre que cela est gĂ©rĂ© par les dĂ©veloppeurs de Kubernetes eux-mĂȘmes. Depuis la version 1.10, c'est-Ă -dire il y a un certain temps, il est possible, au moins dans les cloud publics, de connecter un stockage appropriĂ© pour les secrets. L'Ă©quipe travaille actuellement Ă  amĂ©liorer encore l'accĂšs aux secrets, pour des pods ou d'autres entitĂ©s spĂ©cifiques.

Il est préférable de passer le stockage Helm aux secrets, et de les sécuriser de maniÚre centralisée.

Bien sĂ»r, il restera une limite de stockage de donnĂ©es de 1 Mo. Helm utilise ici etcd comme stockage distribuĂ© pour ConfigMaps. Et lĂ -bas, ils ont dĂ©cidĂ© que c'Ă©tait un chunk de donnĂ©es appropriĂ© pour les rĂ©pliques, etc. À ce sujet, il y a une discussion intĂ©ressante sur Reddit, je recommande de trouver cette lecture amusante pour le week-end ou de lire le rĂ©sumĂ©. ici.

DépÎts de chartes

Les chartes sont particuliÚrement vulnérables et peuvent devenir une source d'attaque de type « homme du milieu », surtout si une solution par défaut est utilisée. Cela concerne principalement les dépÎts accessibles par HTTP.

Il est certain que le dĂ©pĂŽt Helm doit ĂȘtre exposĂ© via HTTPS — c'est la meilleure option et cela ne coĂ»te pas cher.

Veuillez noter que mĂ©canisme de signature des chartes. La technologie est d'une simplicitĂ© dĂ©concertante. C'est la mĂȘme chose que vous utilisez sur GitHub, une machine PGP classique avec des clĂ©s publiques et privĂ©es. Configurez-le et vous serez en sĂ©curitĂ©, en ayant les bonnes clĂ©s et en signant tout pour prouver que c'est bien votre charte.

De plus, Le client Helm supporte TLS (pas dans le sens HTTP cĂŽtĂ© serveur, mais TLS mutuel). Vous pouvez utiliser des clĂ©s serveur et client pour communiquer. Pour ĂȘtre honnĂȘte, je n'utilise pas ce mĂ©canisme Ă  cause de mon aversion pour les certificats mutuels. En principe, chartmuseum — l'outil principal pour exposer un dĂ©pĂŽt Helm pour Helm 2 — prend Ă©galement en charge l'authentification de base. Vous pouvez utiliser l'authentification de base si cela est plus pratique et rassurant.

Il existe aussi un plugin helm-gcs, qui permet d'héberger des dépÎts de chartes dans Google Cloud Storage. C'est assez pratique, ça fonctionne trÚs bien et c'est suffisamment sécurisé, car tous les mécanismes décrits sont utilisés.

Sécurité de Helm

Si vous activez HTTPS ou TLS, utilisez mTLS, ajoutez l'authentification de base pour réduire davantage les risques, vous obtiendrez un canal de communication sécurisé entre Helm CLI et le dépÎt de chartes.

API gRPC

L'Ă©tape suivante est trĂšs importante — sĂ©curiser Tiller, qui se trouve dans le cluster et qui est, d'une part, le serveur, et d'autre part — il interagit avec d'autres composants et essaie de se faire passer pour quelqu'un d'autre.

Comme je l'ai déjà dit, Tiller est un service qui expose gRPC, le client Helm se connecte à lui via gRPC. Par défaut, il va sans dire que TLS est désactivé. La raison pour laquelle c'est fait est une question de débat, je pense que c'est pour simplifier la configuration au démarrage.

Pour la production et mĂȘme pour la mise en scĂšne, je recommande d'activer TLS sur gRPC.

À mon avis, contrairement Ă  mTLS pour les charts, ici c'est appropriĂ© et se fait trĂšs simplement — vous gĂ©nĂ©rez l'infrastructure PQI, crĂ©ez un certificat, lancez Tiller, et passez le certificat lors de l'initialisation. Ensuite, vous pouvez exĂ©cuter toutes les commandes Helm en vous prĂ©sentant avec le certificat gĂ©nĂ©rĂ© et la clĂ© privĂ©e.

Sécurité de Helm

De cette façon, vous vous protégez contre toutes les demandes à Tiller provenant de l'extérieur du cluster.

Ainsi, nous avons sécurisé le canal de connexion à Tiller, déjà discuté du RBAC et réglé les droits du Kubernetes apiserver, réduit le domaine avec lequel il peut interagir.

Helm sécurisé

Regardons le schĂ©ma final. C'est la mĂȘme architecture avec les mĂȘmes flĂšches.

Sécurité de Helm

Toutes les connexions peuvent maintenant ĂȘtre dessinĂ©es en vert :

  • pour le Chart Repo, nous utilisons TLS ou mTLS et l'authentification de base ;
  • mTLS pour Tiller, et il est exposĂ© comme un service gRPC avec TLS, nous utilisons des certificats ;
  • dans le cluster, un compte de service spĂ©cial avec un rĂŽle et un RoleBinding est utilisĂ©. 

Nous avons considérablement sécurisé le cluster, mais quelqu'un d'intelligent a dit :

« La seule solution absolument sĂ©curisĂ©e peut ĂȘtre un ordinateur Ă©teint, enfermĂ© dans une boĂźte en bĂ©ton et gardĂ© par des soldats ».

Il existe diffĂ©rentes maniĂšres de manipuler les donnĂ©es et de trouver de nouveaux vecteurs d'attaque. Cependant, je suis convaincu que ces recommandations permettront de mettre en Ɠuvre un standard de sĂ©curitĂ© industriel de base.

Bonus

Cette partie n'est pas directement liĂ©e Ă  la sĂ©curitĂ©, mais sera Ă©galement utile. Je vais montrer certaines choses intĂ©ressantes que peu de gens connaissent. Par exemple, comment rechercher des charts — officiels et non officiels.

Dans le rĂ©fĂ©rentiel github.com/helm/charts il y a maintenant environ 300 charts et deux flux : stable et incubator. Ceux qui contribuent savent trĂšs bien Ă  quel point il est difficile de passer de l'incubator au stable, et Ă  quel point il est facile de sortir du stable. Cependant, ce n'est pas le meilleur outil pour rechercher des charts pour Prometheus et tout ce que vous aimez, pour une raison simple : ce n'est pas un portail oĂč il est facile de rechercher des paquets.

Mais il existe un service hub.helm.sh, qui rend la recherche de charts beaucoup plus pratique. Le plus important, c'est qu'il y a beaucoup plus de dépÎts externes et presque 800 charts disponibles. De plus, vous pouvez connecter votre propre dépÎt si, pour une raison quelconque, vous ne souhaitez pas envoyer vos charts dans le stable.

Essayez hub.helm.sh et dĂ©veloppons-le ensemble. Ce service est sous le projet Helm, et vous pouvez mĂȘme contribuer Ă  son interface utilisateur si vous ĂȘtes un dĂ©veloppeur front-end et souhaitez simplement amĂ©liorer son apparence.

Je souhaite également attirer votre attention sur l'intégration de l'API Open Service Broker. Cela peut sembler encombrant et incompréhensible, mais cela résout des problÚmes auxquels tout le monde est confronté. Je vais l'expliquer avec un exemple simple.

Sécurité de Helm

Imaginons un cluster Kubernetes dans lequel nous voulons dĂ©ployer une application classique — WordPress. En gĂ©nĂ©ral, une base de donnĂ©es est nĂ©cessaire pour un fonctionnement complet. Il existe de nombreuses solutions, par exemple, vous pouvez lancer votre propre service stateful. Ce n'est pas trĂšs pratique, mais beaucoup font ainsi.

D'autres, comme nous chez Chainstack, utilisent des bases de données gérées, comme MySQL ou PostgreSQL, pour les serveurs. Donc, notre base de données se trouve quelque part dans le cloud.

Mais un problĂšme se pose : il faut lier notre service Ă  la base de donnĂ©es, crĂ©er un flavor de base de donnĂ©es, transmettre les informations d'identification et les gĂ©rer d'une certaine maniĂšre. Tout cela est gĂ©nĂ©ralement fait manuellement par un administrateur systĂšme ou un dĂ©veloppeur. Cela ne pose pas de problĂšme quand il y a peu d'applications. Lorsqu'il y en a beaucoup, il faut un combineur. Ce combineur existe — c'est le Service Broker. Il permet d'utiliser un plugin spĂ©cial sur le cluster de cloud public et de commander des ressources auprĂšs du fournisseur par le biais du Broker, comme si c'Ă©tait une API. Pour cela, vous pouvez utiliser les outils natifs de Kubernetes.

C'est trĂšs simple. Vous pouvez par exemple demander un Managed MySQL sur Azure avec un niveau de service de base (cela peut ĂȘtre configurĂ©). En utilisant l'API Azure, la base sera créée et prĂ©parĂ©e Ă  l'utilisation. Vous n'aurez pas besoin de vous en mĂȘler, le plugin s'en occupe. Par exemple, OSBA (plugin Azure) retournera les informations d'identification vers le service et les transmettra via Helm. Vous pourrez utiliser WordPress avec MySQL dans le cloud, sans vous occuper des bases de donnĂ©es gĂ©rĂ©es et sans vous soucier des services stateful en arriĂšre-plan.

On peut dire que Helm est la colle qui, d'un cÎté, permet de déployer des services et, de l'autre, de consommer des ressources des fournisseurs de cloud.

Vous pouvez écrire votre propre plugin et utiliser toute cette histoire sur site. Vous aurez simplement votre propre plugin pour le fournisseur de cloud d'entreprise. Je recommande d'essayer cette approche, surtout si vous avez une grande échelle et que vous souhaitez déployer rapidement le développement, la mise en scÚne ou l'ensemble de l'infrastructure pour une fonctionnalité. Cela simplifiera la vie de vos opérations ou de votre équipe DevOps.

Une autre dĂ©couverte que j'ai dĂ©jĂ  mentionnĂ©e — c'est le plugin helm-gcs, qui permet d'utiliser des Google-buckets (stockage d'objets) pour stocker des charts Helm.

Sécurité de Helm

Il vous suffit de quatre commandes pour commencer Ă  l'utiliser :

  1. installer le plugin ;
  2. l'initialiser ;
  3. définir le chemin vers le bucket situé dans gcp ;
  4. publier les charts de maniĂšre standard.

L'avantage est que la mĂ©thode d'autorisation native de gcp sera utilisĂ©e. Vous pouvez utiliser un compte de service, un compte dĂ©veloppeur — tout ce que vous voulez. C'est trĂšs pratique et cela ne coĂ»te rien en exploitation. Si vous, comme moi, dĂ©fendez la philosophie sans ops, cela sera trĂšs commode, surtout pour les petites Ă©quipes.

Alternatives

Helm n'est pas la seule solution pour gérer des services. De nombreuses questions se posent à son sujet, c'est probablement pour cela que la troisiÚme version est apparue si rapidement. Bien sûr, il existe des alternatives.

Il peut s'agir de solutions spĂ©cialisĂ©es comme Ksonnet ou Metaparticle. Vous pouvez utiliser vos outils classiques de gestion d'infrastructure (Ansible, Terraform, Chef, etc.) pour les mĂȘmes objectifs dont j'ai parlĂ©.

Enfin, il existe une solution Operator Framework, dont la popularité est en croissance.

L'Operator Framework est la principale alternative Ă  Helm Ă  laquelle il faut prĂȘter attention.

Il est plus natif pour CNCF et Kubernetes, mais la barriÚre d'entrée est beaucoup plus élevée, il faut programmer davantage et moins décrire des manifestes.

Il existe différents addons, comme Draft et Scaffold. Ils simplifient beaucoup la vie, par exemple, en facilitant aux développeurs le cycle d'envoi et de lancement de Helm pour déployer un environnement de test. Je les appellerais des enrichisseurs de capacités.

Voici un graphique illustratif montrant oĂč se trouve chaque Ă©lĂ©ment.

Sécurité de Helm

Sur l'axe des abscisses, le niveau de votre contrĂŽle personnel sur ce qui se passe, sur l'axe des ordonnĂ©es — le niveau de nativitĂ© de Kubernetes. Helm version 2 se situe quelque part au milieu. En version 3, il n'y a pas de changements colossaux, mais tant le contrĂŽle que le niveau de nativitĂ© ont Ă©tĂ© amĂ©liorĂ©s. Les solutions de niveau Ksonnet restent malgrĂ© tout infĂ©rieures Ă  Helm 2. Cependant, il vaut la peine de les examiner pour savoir ce qui existe encore dans ce monde. Bien entendu, votre gestionnaire de configuration sera sous votre contrĂŽle, mais il n'est absolument pas natif pour Kubernetes.

L'Operator Framework est complÚtement natif pour Kubernetes et permet de le gérer de maniÚre beaucoup plus élégante et minutieuse (mais rappelons-nous du niveau d'entrée). Il conviendra plutÎt à une application spécialisée et à la création de gestion à son égard, plutÎt qu'à un broyeur de masse pour emballer un grand nombre d'applications à l'aide de Helm.

Les enrichisseurs améliorent juste un peu le contrÎle, complÚtent le workflow ou prennent des raccourcis dans les pipelines CI/CD.

L'avenir de Helm

La bonne nouvelle, c'est qu'Helm 3 arrive. La version alpha d'Helm 3.0.0-alpha.2 est déjà sortie, et vous pouvez l'essayer. Elle est assez stable, mais ses fonctionnalités sont encore limitées.

Pourquoi Helm 3 est-il nécessaire ? Avant tout, il s'agit de la disparition de Tiller, en tant que composant. Comme vous le comprenez déjà, c'est un grand pas en avant, car cela simplifie l'architecture du point de vue de la sécurité.

Lorsque Helm 2 a Ă©tĂ© créé, Ă  l'Ă©poque de Kubernetes 1.8 ou mĂȘme plus tĂŽt, de nombreux concepts Ă©taient immatures. Par exemple, le concept de CRD est maintenant largement intĂ©grĂ©, et Helm va utiliser CRD, pour stocker des structures. Il sera possible d'utiliser uniquement le client sans avoir Ă  maintenir la partie serveur. En consĂ©quence, il sera possible d'utiliser les commandes natives de Kubernetes pour travailler avec des structures et des ressources. Cela reprĂ©sente un Ă©norme progrĂšs.

Il y aura le support des dĂ©pĂŽts OCI natifs (Open Container Initiative). C'est une initiative majeure, et Helm y trouve un intĂ©rĂȘt surtout pour hĂ©berger ses charts. À tel point que, par exemple, Docker Hub prend en charge de nombreuses normes OCI. Je ne prĂ©dis rien, mais il est possible que les fournisseurs classiques de dĂ©pĂŽts Docker commencent Ă  vous permettre d'hĂ©berger vos charts Helm.

Un aspect discutable pour moi est le support de Lua, en tant que moteur de templating pour Ă©crire des scripts. Je ne suis pas un grand fan de Lua, mais cela sera une option entiĂšrement facultative. J'ai vĂ©rifiĂ© trois fois — l'utilisation de Lua ne sera pas obligatoire. Donc, ceux qui le souhaitent pourront utiliser Lua, ceux qui prĂ©fĂšrent Go — rejoignez notre grand camp et utilisez go-tmpl pour cela.

Enfin, ce qui me manquait vraiment, c'est l'apparition de schémas et la validation des types de données. Il n'y aura plus de problÚmes avec int ou string, il ne faudra plus envelopper zéro entre guillemets. Une JSON Schema apparaßtra, ce qui permettra de décrire cela clairement pour les valeurs.

Le modÚle orienté événementssera fortement retravaillé. Il est déjà conceptuellement décrit. Regardez dans la branche Helm 3, et vous verrez combien d'événements et de hooks ont été ajoutés, ce qui simplifiera considérablement et, d'un autre cÎté, ajoutera du contrÎle sur les processus de déploiement et leurs réactions.

Helm 3 sera plus simple, plus sûr et plus intéressant, non pas parce que nous n'aimons pas Helm 2, mais parce que Kubernetes devient plus avancé. En conséquence, Helm peut s'appuyer sur les améliorations de Kubernetes et créer d'excellents gestionnaires pour Kubernetes.

Une autre bonne nouvelle est que DevOpsConf Alexandre Khayorov expliquera, les conteneurs peuvent-ils ĂȘtre sĂ»rs ? Rappelons que la confĂ©rence sur l'intĂ©gration des processus de dĂ©veloppement, de test et d'exploitation se tiendra Ă  Moscou les 30 septembre et 1er octobre. Vous avez jusqu'au 20 aoĂ»t pour soumettre une prĂ©sentation partager votre expĂ©rience de rĂ©solution l'une des nombreuses problĂ©matiques de l'approche DevOps.

Pour les mises à jour de la conférence et les nouvelles, suivez-nous sur le une newsletter et canal Telegram.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster