Intégration de Kubernetes Vault via Sidecar Agent Injector vs. Vault Secrets Operator vs. CSI provider (2023)

Une comparaison détaillée de trois méthodes prises en charge par HashiCorp pour l'intégration de HashiCorp Vault et Kubernetes.

11 avril 2023Nouvelles de Nico

Dans cet article, j'explorerai trois méthodes différentes pour intégrer HashiCorp Vault à Kubernetes :

(Video) Injecting Secrets into Kubernetes Pods via Vault Agent Containers

  1. L'injecteur d'agent Vault Sidecar
  2. Le fournisseur Vault Container Storage Interface (CSI)
  3. L'opérateur des secrets du coffre-fort

Je fournirai des conseils pratiques pour chaque méthode afin de vous aider à comprendre et à choisir la meilleure méthode pour votre cas d'utilisation.

Cet article n'est pas destiné à être une documentation de produit ou un guide de mise en œuvre étape par étape. Il s'adresse aux praticiens DevOps familiarisés avec HashiCorp Vault et Kubernetes qui ont également une compréhension de base des concepts de gestion des secrets.

»Injecteur d'agent Vault Sidecar

LeInjecteur d'agent Vault Sidecartire parti de lamodèle de side-carpour modifier les spécifications du pod afin d'inclure un conteneur Vault Agent qui restitue les secrets Vault à un volume de mémoire partagée. En rendant des secrets à un volume partagé, les conteneurs du pod peuvent consommer des secrets Vault sans être conscients de Vault. L'injecteur est un contrôleur de webhook de mutation Kubernetes. Le contrôleur intercepte les événements de pod et applique des mutations au pod si des annotations existent dans la demande. Cette fonctionnalité est fournie par levoûte-k8sprojet et peut être installé et configuré automatiquement à l'aide de la charte Vault Helm.

Intégration de Kubernetes Vault via Sidecar Agent Injector vs. Vault Secrets Operator vs. CSI provider (2)

»Fournisseur Vault CSI

LeFournisseur Vault CSIpermet aux pods de consommer des secrets Vault en utilisant des données éphémèresMagasin de secrets CSItomes. À un niveau élevé, le pilote CSI Secrets Store permet aux utilisateurs de créerSecretProviderClassobjets. Ces objets définissent le fournisseur de secrets à utiliser et les secrets à récupérer. Lorsque des pods demandant des volumes CSI sont créés, le pilote CSI Secrets Store envoie la demande au fournisseur Vault CSI si le fournisseur estsauter. Le fournisseur Vault CSI utilise ensuite leSecretProviderClasset le compte de service du pod pour récupérer les secrets de Vault et les monter dans le volume CSI du pod. Notez que le secret est extrait de Vault et rempli dans le volume de stockage des secrets CSI pendant laCréationConteneurphase. Cela signifie que le démarrage des pods sera bloqué jusqu'à ce que les secrets aient été lus depuis Vault et écrits sur le volume.

Intégration de Kubernetes Vault via Sidecar Agent Injector vs. Vault Secrets Operator vs. CSI provider (3)

(Video) Secret Injection and Vault Configuration with the Vault Config Operator

»Opérateur des secrets du coffre-fort

LeOpérateur des secrets du coffre-fortest une nouvelle méthode d'intégration qui implémente un opérateur de secrets Kubernetes avec un ensemble de CRD responsables de la synchronisation native des secrets Vault avec les secrets Kubernetes. L'opérateur prend en charge la synchronisation du cycle de vie complet de la gestion des secrets, y compris les secrets statiques, dynamiques et basés sur PKI à partir d'une ou plusieurs instances de serveur Vault. L'opérateur est également capable de gérer la rotation secrète et d'effectuer des actions de post-rotation, y compris la notification d'une application directement via unmise à jour progressived'unDéploiementou en déclenchant une mise à jour continue.

»Considérations de conception courantes

Il existe certaines similitudes et différences entre les trois solutions que vous devez prendre en compte lors de la conception et de la mise en œuvre de votre stratégie de gestion des secrets dans les environnements Kubernetes.

  1. Projections secrètes :Chaque application nécessite que des secrets lui soient présentés d'une manière spécifique. En règle générale, les applications s'attendent à ce que les secrets soient soit exportés sous forme de variables d'environnement, soit écrits dans un fichier que l'application peut lire au démarrage. Gardez cela à l'esprit lorsque vous décidez de la bonne méthode à utiliser.
  2. Portée secrète :Certaines applications sont déployées dans plusieurs environnements Kubernetes (par ex.dev, qa, prod) dans vos centres de données, la périphérie ou les clouds publics. Certains services s'exécutent en dehors de Kubernetes sur des machines virtuelles, sans serveur ou d'autres services gérés dans le cloud. Vous pouvez être confronté à des scénarios dans lesquels ces applications doivent partager des ensembles de secrets dans ces environnements hétérogènes. Définir correctement la portée des secrets pour qu'ils soient locaux dans l'environnement Kubernetes ou globaux dans différents environnements permet de garantir que chaque application peut accéder facilement et en toute sécurité à son propre ensemble de secrets dans l'environnement dans lequel elle est déployée.
  3. Types secrets :Les secrets peuvent être des fichiers texte, des fichiers binaires, des jetons ou des certificats. Ils peuvent être générés statiquement ou dynamiquement. Ils peuvent être valides en permanence ou dans le temps. Ils varient également en taille. Vous devez tenir compte des types de secrets requis par votre application et de la manière dont ils sont projetés dans l'application.
  4. Définition secrète :Vous devez également tenir compte de la manière dont chaque secret est défini, créé, mis à jour et supprimé, ainsi que des outils associés à ce processus.
  5. Chiffrement:Le chiffrement des secrets au repos et en transit est une exigence essentielle pour de nombreuses entreprises.
  6. Gouvernance :Les applications et les secrets peuvent avoir une relation plusieurs-à-plusieurs qui nécessite une attention particulière lorsqu'il s'agit d'accorder l'accès aux applications pour récupérer leurs secrets respectifs. À mesure que le nombre d'applications et de secrets augmente, le défi de la gestion de leurs politiques d'accès augmente également.
  7. Mises à jour et rotation des secrets :Les secrets peuvent être loués, limités dans le temps ou pivotés automatiquement, et chaque scénario doit être un processus programmatique pour garantir que le nouveau secret est correctement propagé aux pods d'application.
  8. Mise en cache secrète :Dans certains environnements Kubernetes (par exemple, périphérie ou vente au détail), il existe un besoin potentiel de mise en cache secrète en cas de défaillance de communication ou de réseau entre l'environnement et le stockage secret.
  9. Auditabilité :La tenue d'un journal d'audit d'accès secret détaillant toutes les informations d'accès secret est essentielle pour assurer la traçabilité des événements d'accès secret.

En gardant à l'esprit ces considérations de conception, passons en revue certaines des similitudes et des différences entre les trois solutions d'intégration.

»Similitudes

Solutions Vault Operator, CSI et side-car :

  • Simplifiez la récupération de différents types de secrets stockés dans Vault et exposez-les au pod cible exécuté sur Kubernetes sans qu'il soit conscient des processus Vault pas si triviaux. Il est important de noter qu'il n'est pas nécessaire d'apporter des modifications à la logique ou au code de l'application pour qu'elle utilise ces solutions, ce qui facilite la migration des applications brownfield vers Kubernetes. Les développeurs travaillant sur des applications entièrement nouvelles peuvent tirer parti de laSDK Vaultpour s'intégrer directement à Vault.

  • Prend en charge tous les types de coffre-fortmoteurs secrets. Cela signifie que vous pouvez tirer parti d'un ensemble complet de types de secrets, allant des secrets clé-valeur statiques aux informations d'identification de base de données générées dynamiquement et aux certificats TLS avec TTL personnalisé.

    (Video) How to Get Vault Secrets into Kubernetes

  • Tirez parti du jeton de compte de service de pod Kubernetes de l'application en tant que"Zéro secret"pour s'authentifier auprès de Vault via la méthode d'authentification Kubernetes. Cela signifie qu'il n'est pas nécessaire de gérer une autre identité distincte pour identifier les pods d'application lors de l'authentification auprès de Vault.

Intégration de Kubernetes Vault via Sidecar Agent Injector vs. Vault Secrets Operator vs. CSI provider (4)

Workflow d'authentification Kubernetes de Vault

  • Exiger que les secrets souhaités existent dans Vault avant de déployer l'application
  • Exiger que le compte de service du pod soit lié à un rôle Vault avec une stratégie permettant l'accès aux secrets souhaités (c'est-à-dire que Kubernetes RBAC n'est pas utilisé pour autoriser l'accès aux secrets)
  • Déployable via Helm
  • Exiger la récupération réussie des secrets de Vault avant le démarrage des pods
  • S'appuyer sur des annotations de pod définies par l'utilisateur pour récupérer les secrets requis à partir de Vault
  • Les deuxService d'injecteur de side-caretPilote CSIpeut automatiquement renouveler, faire pivoter et récupérer des secrets/tokens.

»Différences

Voici comment les trois solutions sont différentes :

  • La solution Sidecar Agent Injector est composée de deux éléments :
    • L'injecteur de service Sidecar, qui est déployé en tant que service de cluster et est responsable de l'interception des événements de pod apiserver Kubernetes et de la mutation des spécifications de pod pour ajouter les conteneurs sidecar requis
    • Le conteneur Vault Sidecar, qui est déployé à côté de chaque pod d'application et est responsable de l'authentification dans Vault, de la récupération des secrets de Vault et du rendu des secrets pour l'application à consommer
  • En revanche, le pilote Vault CSI est déployé en tant que démonset sur chaque nœud du cluster Kubernetes et utilise la classe de fournisseur de secrets spécifiée et le compte de service du pod pour récupérer les secrets de Vault et les monter dans le volume CSI du pod.
  • L'opérateur de coffre-fort est également capable de gérer la rotation secrète et d'effectuer des actions de post-rotation, notamment de notifier une application directement via (ou en déclenchant) une mise à jour continue d'un déploiement.
  • L'injecteur d'agent Sidecar prend en chargetousSauterauthentification automatiqueméthodes. Le pilote Sidecar CSIne prend en charge que la méthode d'authentification Kubernetes de Vaultet Vault Operator ne prend en charge que la méthode d'authentification Kubernetes pour le moment.
  • Le conteneur side-car qui est lancé avec chaque pod d'application utiliseAgent de coffre-fort, qui fournit un ensemble puissant de fonctionnalités telles que l'authentification automatique, la création de modèles et la mise en cache. Le pilote CSI n'utilise pas Vault Agent et ne dispose donc pas de ces fonctionnalités.
  • L'opérateur Vault inclut la prise en charge de l'opérateur Promethus pour les rapports de gouvernance.
  • Le pilote Vault CSI prend en charge le rendu des secrets Vault dans les secrets Kubernetes et les variables d'environnement. Sidecar Injector Service ne prend pas en charge le rendu des secrets dans les secrets Kubernetes, mais il existefaçons d'utiliser les modèles d'agentpour rendre les secrets dans les variables d'environnement.
  • Le pilote CSI utilisehostPathpour monter des volumes éphémères dans les pods, que certaines plates-formes de conteneurs (par exemple OpenShift) désactivent par défaut. D'autre part, Sidecar Agent Service utilise en mémoiretmpfstomes.
  • Service d'injecteur de side-carautomatiquementrenouvelle, tourne et récupère les secrets/jetons. Le pilote CSI ne prend pas cela en charge.

»Tableau de comparaison

Le tableau ci-dessous fournit une comparaison de haut niveau des trois solutions :

Intégration de Kubernetes Vault via Sidecar Agent Injector vs. Vault Secrets Operator vs. CSI provider (5)

(Video) [Theory] How does vault injector works ?

*obtenue parModèles d'agent

»Aller au-delà des secrets natifs de Kubernetes

À première vue, les secrets natifs de Kubernetes peuvent sembler similaires aux trois approches présentées ci-dessus, mais il existe des différences majeures entre elles :

  • Kubernetes estpasune solution de gestion des secrets. Il a un support natif pour les secrets, mais c'est assez différent d'une solution de gestion des secrets d'entreprise. Les secrets Kubernetes sont limités au cluster uniquement et de nombreuses applications auront des services exécutés en dehors de Kubernetes ou dans différents clusters Kubernetes. Par conséquent, la prise en compte de la portée secrète dans le cadre du processus de conception est essentielle. Faire en sorte que ces applications utilisent des secrets Kubernetes depuis l'extérieur d'un environnement Kubernetes sera fastidieux et posera des problèmes d'authentification et d'autorisation.

  • Les secrets Kubernetes sont de nature statique. Vous pouvez définir des secrets à l'aide de kubectl ou de l'API Kubernetes, mais une fois qu'ils sont définis, ils sont stockés dans etcd et présentés aux pods uniquement lors de la création du pod. Cela peut créer des scénarios dans lesquels les secrets deviennent obsolètes, obsolètes ou expirés, nécessitant des flux de travail supplémentaires pour mettre à jour et faire pivoter les secrets, puis redéployer l'application pour utiliser la nouvelle version des secrets. Cela peut ajouter de la complexité et perdre du temps. Assurez-vous donc de tenir compte de toute exigence de fraîcheur secrète, de mises à jour et de rotation dans le cadre de votre processus de conception.

  • Le modèle de sécurité de la gestion des accès secrets est lié au modèle Kubernetes RBAC. Cela peut être difficile à adopter pour les utilisateurs qui ne sont pas familiers avec Kubernetes. L'adoption d'un modèle de gouvernance de la sécurité indépendant de la plate-forme peut vous permettre d'adopter des workflows pour les applications, quels que soient leur mode d'exécution et leur lieu d'exécution.

»Résumé

Concevoir pour la gestion des secrets dans Kubernetes n'est pas une tâche facile. Il existe plusieurs approches, chacune avec son propre ensemble d'avantages et d'inconvénients. Je vous recommande fortement d'explorer les options présentées dans ce billet de blog pour comprendre leur fonctionnement interne et décider de la meilleure option pour votre cas d'utilisation.

(Video) How to use HashiCorp Vault as external secret provider in rabbitmq/cluster-operator

»Ressources additionnelles

FAQs

What is the difference between vault sidecar and injector? ›

The Vault CSI driver supports rendering Vault secrets into Kubernetes secrets and environment variables. Sidecar Injector Service does not support rendering secrets into Kubernetes secrets; however, there are ways to agent templating to render secrets into environment variables.

What is the difference between sidecar and CSI driver? ›

The CSI driver uses hostPath to mount ephemeral volumes into the pods, which some container platforms (e.g. OpenShift) disable by default. On the other hand, Sidecar Agent Service uses in-memory tmpfs volumes. Sidecar Injector Service automatically renews, rotates, and fetches secrets/tokens.

What is vault agent sidecar? ›

The Vault Agent Injector alters pod specifications to include Vault Agent containers that render Vault secrets to a shared memory volume using Vault Agent Templates. By rendering secrets to a shared volume, containers within the pod can consume Vault secrets without being Vault aware.

Which vault to store secrets for Kubernetes? ›

Vault provides a Kubernetes authentication method that enables clients to authenticate with a Kubernetes Service Account Token. This token is provided to each pod when it is created. Start an interactive shell session on the vault-0 pod. Your system prompt is replaced with a new prompt / $ .

What is the difference between sidecar and container in Kubernetes? ›

A sidecar is just a container that runs on the same Pod as the application container. It shares the same volume and network as the main container, it can “help” or enhance how the application operates. A Sidecar container is a second container to add the pod.

What is the difference between sidecar and sidecar proxy? ›

Just as a sidecar is attached to a motorcycle, a sidecar proxy is attached to a parent application to extend or add functionality. Sidecar proxies are typically used within the service mesh control plane (CP), microservices or containers.

What are the advantages of sidecar container? ›

The Sidecar performs peripheral tasks without impacting the performance of the main container. The Sidecar shares most of the resources such as volume, network, CPU, memory etc with the main container.

What is the difference between sidecar and DaemonSet? ›

The DaemonSet mode has a smaller resource consumption, but the scalability and tenant isolation are limited, making it suitable for clusters with few functions or less business. In the Sidecar mode, a log agent is deployed for each pod. This agent is only responsible for collecting logs of one business application.

What is a sidecar injector? ›

In simple terms, sidecar injection is adding the configuration of additional containers to the pod template. The added containers needed for the Istio service mesh are: istio-init This init container is used to setup the iptables rules so that inbound/outbound traffic will go through the sidecar proxy.

How does Kubernetes sidecar work? ›

In the context of Kubernetes, a sidecar is simply a container that is co-located with and tightly-coupled to your primary application container(s). The sidecar can also share resources (like network and storage) with the primary application container(s).

Why do we need sidecar? ›

The sidecar can access the same resources as the primary application. For example, a sidecar can monitor system resources used by both the sidecar and the primary application. Because of its proximity to the primary application, there's no significant latency when communicating between them.

What is the difference between sidecar and service mesh? ›

SideCars reduce the code complexity by segregating APIs with business logic from code with infrastructure concerns. Service Mesh helps in secure communication by enforcing network policies on the sidecar layer, thus isolating the application layer from rogue traffic.

How many types of secrets are there in Kubernetes? ›

Kubernetes features two categories of secrets: The system's service accounts automatically create built-in secrets and associate them with containers together with API credentials. You can also create customized secrets for credentials you need to make available to pods.

What is the difference between vault and secret? ›

A secret is anything that you want to tightly control access to, such as API keys, passwords, certificates, and more. Vault provides a unified interface to any secret, while providing tight access control and recording a detailed audit log.

What are three ways to create a secret in Kubernetes? ›

There are several options to create a Secret:
  • Use kubectl.
  • Use a configuration file.
  • Use the Kustomize tool.

What is the sidecar lifecycle in Kubernetes? ›

With the Kubernetes Sidecar feature, the pod startup lifecycle will be changed, so sidecar containers will start after init containers finished, and normal containers will only be started once the sidecars become ready. It ensures that sidecars are up and running before the main processes start.

What is the difference between sidecar container and init container? ›

Init containers run before applications containers run in a pod, and sidecar containers run alongside application containers in a pod. One use for init containers is to bootstrap Appian with RDBMS/JDBC drivers not included in the Webapp Docker image (for example, MySQL or IBM Db2).

What is the difference between pods and containers and nodes in Kubernetes? ›

Pods are simply the smallest unit of execution in Kubernetes, consisting of one or more containers, each with one or more application and its binaries. Nodes are the physical servers or VMs that comprise a Kubernetes Cluster.

What is the difference between sidecar and pod? ›

In Kubernetes, a pod is a group of one or more containers with shared storage and network. A sidecar is a utility container in a pod that's loosely coupled to the main application container.

How does sidecar injection work? ›

Automatic sidecar proxy injection (auto-injection) occurs when Anthos Service Mesh detects a namespace label you configure for the workload's Pod. The proxy intercepts all inbound and outbound traffic to the workloads and communicates with Anthos Service Mesh.

Is sidecar encrypted? ›

With Sidecar, iPad is the perfect traveling companion for your Mac. Sidecar uses virtual display technology to send a second, virtual display to an iPad using an encrypted encoded stream.

What is the difference between Daemonset and deployment? ›

In summary, Deployments are great for stateless applications that can be easily scaled horizontally, DaemonSets are great for running an application on every node in the cluster, and StatefulSets are great for applications that require persistent storage and have state that needs to be maintained.

What are three main benefits of using container technology? ›

Benefits of containers
  • Less overhead. Containers require less system resources than traditional or hardware virtual machine environments because they don't include operating system images.
  • Increased portability. ...
  • More consistent operation. ...
  • Greater efficiency. ...
  • Better application development.

What is the difference between a pod and a container? ›

A container runs logically in a pod (though it also uses a container runtime); A group of pods, related or unrelated, run on a cluster. A pod is a unit of replication on a cluster; A cluster can contain many pods, related or unrelated [and] grouped under the tight logical borders called namespaces.”

What is the difference between pod and DaemonSet? ›

A DaemonSet ensures that all (or some) Nodes run a copy of a Pod. As nodes are added to the cluster, Pods are added to them. As nodes are removed from the cluster, those Pods are garbage collected. Deleting a DaemonSet will clean up the Pods it created.

What is the difference between DaemonSet and Statefulset in Kubernetes? ›

To run a given container or set of containers on multiple nodes at the same time, use a DaemonSet. Likewise, StatefulSets are a great choice for assigning unique resources to containers and maintaining application state. But in most cases, deployments are the simplest way to run apps in Kubernetes.

What is difference between ReplicaSet and DaemonSet? ›

ReplicaSets should be used when your application is completely decoupled from the node and you can run multiple copies on a given node without special consideration. DaemonSets should be used when a single copy of your application must run on all or a subset of the nodes in the cluster.

Why is a sidecar called a hack? ›

Sidecars earned the nickname "hack" thanks to a village near London called Hackney.

How safe are sidecars? ›

A motorcycle with a sidecar is safe as long as the bike is set up to ride correctly with one. Depending on the model, the sidecar may or may not have a drive wheel. Most add-on kits (for Harley-Davidson, Triumph, Honda, BMW motorcycles and more) do not have a drive wheel.

Does a sidecar need a brake? ›

With a fairly lightweight sidecar and when fitted to a bike with reasonable brakes a sidecar wheel brake is less important. You could also say that a brake on a sidecar is important for safety reasons.

Is sidecar a container? ›

A sidecar is a separate container that runs alongside an application container in a Kubernetes pod – a helper application of sorts.

What are the different types of containers in Kubernetes? ›

There are three main types of container runtimes—low-level runtimes, high-level runtimes, and sandboxed or virtualized runtimes.

How Kubernetes works internally? ›

Kubernetes keeps track of your container applications that are deployed into the cloud. It restarts orphaned containers, shuts down containers when they're not being used, and automatically provisions resources like memory, storage, and CPU when necessary.

What is a sidecar in Kubernetes? ›

A sidecar is a separate container that runs alongside an application container in a Kubernetes pod – a helper application of sorts.

Videos

1. Secrets Injection with Native Kubernetes Service Accounts Using Akeyless Vault Platform
(Akeyless)
2. Accessing HashiCorp Vault credentials in Kubernetes webinar 2022.11.22
(Verifa)
3. Secret Management in Kubernetes with HashiCorp Vault
(ContainerDays)
4. Vault for Secrets Management and TLS in Consul K8s – HashiConf Global 2021
(HashiCorp)
5. How to manage secrets in OpenShift/Kubernetes using Vault and External Secrets
(Goglides Dev)
6. Secure all your K8s secrets with a KMS provider plugin and Hashicorp Vault
(Ondat)

References

Top Articles
Latest Posts
Article information

Author: The Hon. Margery Christiansen

Last Updated: 07/19/2023

Views: 5525

Rating: 5 / 5 (70 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: The Hon. Margery Christiansen

Birthday: 2000-07-07

Address: 5050 Breitenberg Knoll, New Robert, MI 45409

Phone: +2556892639372

Job: Investor Mining Engineer

Hobby: Sketching, Cosplaying, Glassblowing, Genealogy, Crocheting, Archery, Skateboarding

Introduction: My name is The Hon. Margery Christiansen, I am a bright, adorable, precious, inexpensive, gorgeous, comfortable, happy person who loves writing and wants to share my knowledge and understanding with you.