Chiffrer votre Secret pour OVHcloud Managed Kubernetes avec Sealed Secrets (Kubeseal)
Découvrez comment chiffrer vos Secrets Kubernetes afin de les stocker dans Git avec Sealed Secrets (Kubeseal)
Objectif
Lorsque vous souhaitez stocker vos ressources Kubernetes sous forme de manifeste YAML, la pratique courante consiste à les conserver dans un dépôt Git. Cela vous permet également de créer, modifier et supprimer automatiquement vos clusters et ressources Kubernetes grâce à l'Infrastructure as Code et au CI/CD.
Dans l'univers Kubernetes, lorsque l'on souhaite gérer des données sensibles, l'usage est de les stocker dans un Secret au sein d'un cluster Kubernetes. Le problème est que vous ne pouvez pas stocker un Secret dans un système de contrôle de version, car le Secret n'est pas chiffré : c'est une question de sécurité.
Chez OVHcloud, nous mettons un point d'honneur à vous proposer les meilleurs produits et services. La sécurité étant pour nous un enjeu important, ce guide vous fait découvrir Sealed Secrets et la CLI kubeseal, qui vous aideront à chiffrer vos informations sensibles et à les déployer facilement sur votre OVHcloud Managed Kubernetes.
Dans ce guide, vous allez :
- Installer la CLI Kubeseal
- Déployer Sealed Secrets sur votre OVHcloud Managed Kubernetes
- Générer et déployer un SealedSecret
Vous pouvez utiliser la fonction Réinitialiser le cluster dans la section Public Cloud de l' pour réinitialiser votre cluster avant de suivre ce tutoriel.
Secrets Kubernetes
Les Secrets Kubernetes permettent de stocker des données sensibles, comme des mots de passe, des clés, des certificats et des tokens. Les Secrets sont encodés en base64 et automatiquement décodés lorsqu'ils sont attachés à un Pod puis lus par celui-ci.

Un secret dans un cluster Kubernetes est encodé en base64, mais pas chiffré !
Ces données sont « seulement » encodées : si un utilisateur a accès à vos secrets, il peut simplement exécuter une commande base64 decode pour voir vos données sensibles (kubectl get secret my-secret -o jsonpath="{.data.password}" | base64 --decode).
Les secrets n'étant pas chiffrés, il peut être risqué de les committer dans votre dépôt Git.
Sealed Secrets
Une solution consiste à utiliser Sealed Secrets, anciennement appelé Kubeseal, un outil de Bitnami. Son objectif est de chiffrer votre Secret Kubernetes en un SealedSecret, qui peut être stocké en toute sécurité, y compris dans un dépôt public. Le SealedSecret ne peut être déchiffré que par le contrôleur exécuté dans le cluster cible, et par personne d'autre.
Comment cela fonctionne-t-il ?

Comme vous pouvez le voir sur le schéma, un sealed-secrets-controller s'exécute dans le cluster Kubernetes. Il détecte l'apparition d'un nouvel objet SealedSecret, le déchiffre (grâce à des certificats connus) et crée un Secret Kubernetes dans le même namespace que le SealedSecret.
Si vous supprimez le SealedSecret dans votre cluster, le Secret généré sera également supprimé.
Sealed Secrets est une application directe de la cryptographie asymétrique (à clé publique). La cryptographie à clé publique repose sur une paire de clés étroitement liées (appelées « publique » et « privée »), et tout ce qui est chiffré avec l'une ne peut être déchiffré qu'avec l'autre.
Les SealedSecrets et l'outil kubeseal sont conçus pour s'intégrer facilement dans des workflows automatisés. Une fois converti en SealedSecret, même l'utilisateur d'origine ne pourra pas récupérer le Secret original. kubeseal peut également être exécuté hors ligne, sans accès au cluster : il lui suffit de disposer d'une copie de la clé publique quelque part sur le disque.
Pour en savoir plus, consultez la page Sealed Secrets.
Prérequis
Ce tutoriel suppose que vous disposez déjà d'un cluster OVHcloud Managed Kubernetes fonctionnel, ainsi que de connaissances de base sur son fonctionnement. Pour en savoir plus sur ces sujets, consultez la documentation Déployer une application Hello World.
En pratique
Installer la CLI kubeseal
L'utilitaire kubeseal utilise la cryptographie asymétrique pour chiffrer des secrets que seul le contrôleur peut déchiffrer.
Avec la CLI kubeseal, vous pouvez spécifier un certificat de clé pour le scellement des secrets.
Pour installer la CLI, suivez les instructions correspondant à votre système d'exploitation.
Vous pouvez, par exemple, l'installer via Homebrew :
Testez ensuite si la CLI est correctement installée sur votre ordinateur :
La sortie devrait ressembler à ceci :
Installation de Sealed Secrets
Pour ce tutoriel, nous utilisons le chart Helm de Sealed Secrets.
Ajoutez le dépôt Helm de Sealed Secrets :
Ces commandes ajoutent le dépôt Helm de Kyverno à votre dépôt local de charts Helm et mettent à jour les dépôts de charts installés :
Installez la dernière version de Sealed Secrets avec la commande helm install :
Vous pouvez installer l'outil dans un namespace spécifique, autre que kube-system, avec l'option --namespace, mais si vous le faites, vous devrez la passer explicitement en argument à chaque exécution des commandes kubeseal.
Cette commande installe la dernière version de Sealed Secrets :
Une fois le chart Helm déployé, celui-ci va :
- créer la CRD SealedSecret
- installer le contrôleur dans le namespace
kube-system - créer un compte de service
sealed-secrets-controllerdans le namespacekube-system - et les rôles RBAC nécessaires.
Vous pouvez vérifier que le pod sealed-secrets-controller est bien en cours d'exécution :
Récupérer la paire de clés générée
Au démarrage du sealed-secrets-controller, une paire de clés de certificat est générée. Il peut être utile de la stocker dans un outil de gestion des secrets comme Vault.
Exécutez la commande suivante pour récupérer le contenu du secret contenant la paire de clés générée :
La sortie devrait ressembler à ceci :
Avec ces informations, vous pouvez maintenant décoder en base64 les fichiers tls.crt et tls.key, les stocker localement ainsi que dans votre outil de gestion des secrets, afin de les réutiliser plus tard pour récupérer les sealed secrets.
Vous pouvez utiliser le plugin kubectl kubectl view-secret afin de récupérer facilement la clé et le certificat et de les stocker localement :
Créer un sealed-secret
Commencez par générer un secret Kubernetes. Dans cet exemple, vous allez créer, dans un fichier YAML, un secret nommé my-token contenant un token nommé my_token avec la valeur 123456789abc123def456ghi789 :
Vous pouvez ensuite afficher le secret :
La sortie devrait ressembler à ceci :
Scellez ensuite le secret, avec le certificat généré que vous avez récupéré et stocké précédemment :
La sortie devrait ressembler à ceci :
Créez le nouveau namespace my-namespace et appliquez la ressource SealedSecret à l'intérieur :
La sortie devrait ressembler à ceci :
Attention, les ressources SealedSecret et Secret doivent avoir le même namespace et le même nom. Cette fonctionnalité empêche d'autres utilisateurs du même cluster de réutiliser vos sealed secrets.
Après la création du SealedSecret, le sealed-secrets-controller crée automatiquement un Secret Kubernetes.
Vous pouvez vérifier leur existence avec la commande suivante :
Si vous avez déjà installé le plugin kubectl view-secret, vous pouvez également vérifier que le Secret généré contient bien le token que vous avez scellé :
Vous devriez obtenir la sortie suivante :
Débogage / Dépannage
Certains problèmes peuvent survenir. Si un Secret n'est jamais créé après la création d'un SealedSecret, l'une des explications les plus courantes est que vous avez probablement scellé le secret avec un certificat différent de celui que le contrôleur connaît.
Pour déboguer/dépanner le comportement du sealed-secrets-controller, vous pouvez consulter ses logs :
Lorsque tout fonctionne correctement, vous devriez voir la sortie suivante :
Suppression (nettoyage)
Commencez par supprimer le namespace my-namespace que vous avez créé dans ce guide :
Pour désinstaller Sealed Secrets, puisque vous l'avez installé via Helm, vous pouvez utiliser la commande helm uninstall afin de supprimer le chart Helm installé de Sealed Secrets :
Aller plus loin
-
Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.
-
Échangez avec notre communauté d'utilisateurs.