Je viens de tomber sur une petit pépite pour la gestion des secrets Kubernetes. Actuellement je gère mes secrets de la pire des manières qu’il soit : je créer mes secrets avec kubectl create secret.
C’est sympa 2 secondes mais pour rendre ça plus pratique ça serait cool de pouvoir récupérer des secrets de l’extérieur du cluster, par exemple d’un magasin de secrets comme AWS Secrets Manager (que j’utilise) ou HashiCorp Vault.
J’ai alors découvert (tardivement je vous l’accorde) Kubernetes External Secrets de l’équipe GoDaddy. Exactement ce qu’il me fallait !
Le principe est simple : un controller de secret écoute dans le cluster les demandes de secrets, va les récupérer sur les sources externes (AWS Secrets Manager ou Vault par exemple) et créer pour vous les objets Kubernetes secrets.

- Un objet (via une CRD) externalsecretsest ajouté dans le cluster
- Le controller récupère cet externalsecretsvia l’API Kubernetes
- Le controller utilise l’objet externalsecretspour récupérer les données du secret depuis l’extérieur
- Le controller ajoute un objet secretavec les données récupérées
- Les podspeuvent accéder à ce secret
Exemple d’utilisation
J’ai fait une petite vidéo rapide pour vous montrer en live l’utilisation. J’ai pas fait un gros truc mais c’était histoire de montrer en réel. Les commandes utilisées pour cette vidéo sont juste ci-dessous et la vidéo est en haut de cet article.
On installe la chart Helm :
helm repo add external-secrets https://godaddy.github.io/kubernetes-external-secrets/
helm install external-secrets/kubernetes-external-secretsOn créer nos 2 secrets sur le Secrets Manager d’AWS, un secret de type texte et un autre de type texte sécurisé :
aws ssm put-parameter --name "/scw-bcn-production-1/hello" --type "String" --value "Hello World"
aws ssm put-parameter --name "/scw-bcn-production-1/hello-secure" --type "SecureString" --value "Hello World Secure"On créé ensuite nos 2 externalsecrets :
apiVersion: kubernetes-client.io/v1
kind: ExternalSecret
metadata:
  name: hello-world
spec:
  backendType: systemManager
  data:
    - key: /scw-bcn-production-1/hello
      name: password
---
apiVersion: kubernetes-client.io/v1
kind: ExternalSecret
metadata:
  name: hello-world-secure
spec:
  backendType: systemManager
  data:
    - key: /scw-bcn-production-1/hello-secure
      name: passwordEt si vous avez bien installé votre controller, 2 secrets Kubernetes devrait poper dans le namespace actuel, comme ici avec hello-world et hello-world-secure :
kubectl get secrets
NAME                                                       TYPE                                  DATA   AGE
aws-credentials                                            Opaque                                2      6d22h
default-token-bftq4                                        kubernetes.io/service-account-token   3      6d22h
external-secrets-kubernetes-external-secrets-token-pwhc9   kubernetes.io/service-account-token   3      4h18m
hello-world                                                Opaque                                1      16m
hello-world-secure                                         Opaque                                1      16m
sh.helm.release.v1.external-secrets.v1                     helm.sh/release.v1                    1      4h18mLes secrets sont maintenant utilisables par vos pods.
En tout cas je vous invite à aller voir le repo GitHub pour tester, je trouve ça vraiment classe et ça peut simplifier pas mal de chose dans la gestion de secrets.
Je ferais peut-être d’autres vidéos ou articles sur l’installation de tout ça.
Bon week-end !
 
					 
 
			




