K8S – Les Secrets

Lorsque nous installons des applications dans notre environnement K8S, il arrive très fréquemment que l’on doivent fournir des variables d’entrées pour que l’image qui tournera dans le container puisse être paramétrée avec des valeurs personnelles.
Ces variables peuvent être critiques et confidentielles, comme des mots de passe, il existe donc un objet dans Kubernetes, appelé Secret, qui permet de stocker ces éléments de façon chiffrée.
Attention, on parle de chiffrage Base64, très facile à déchiffrer, mais cela permet d’avoir des variables qui ne sont pas diffusées en clair.
PS: Pour pouvoir accéder à ces secrets, il faut avoir accès à l’Hôte Linux sur lequel tourne K8S et avoir les droits nécessaires pour éditer les objets secrets…
Création d’un Secret via Manifest YAML
Pour créer un manifest YAML qui va ajouter un Secret dans Kubernetes, il faut utiliser des valeurs chiffrées en Base64.
echo -n 'grafana-user' | base64 Z3JhZmFuYS11c2Vy echo -n 'T0T0' | base64 VDBUMA==
Une fois les valeurs chiffrées, copiez les dans un manifest YAML, par exemple grafana-password.yaml:
apiVersion: v1 kind: Secret metadata: name: grafana-password type: Opaque data: username: Z3JhZmFuYS11c2Vy password: VDBUMA==
Puis appliquez le avec kubectl:
kubectl apply -f ./grafana-password.yaml
Création d’un Secret via Ligne de commande
Il est possible de créer un Secret directement en ligne de commande à l’aide de la commande kubectl ou k create:
kubectl create secret generic grafana-password \ --from-literal=username=grafana-user \ --from-literal=password='T0T0'
Dans cette exemple, nous avons créé un secret appelé « grafana-password » contenant un ensemble de clé/valeur username et password.
L’utilisation de kubectl create et de –from-literal permet de ne pas se soucier de l’encodage Base64.
Il est aussi possible d’utiliser kubectl create avec des fichiers comme sources:
Création des fichiers contenant les secrets:
echo -n 'grafana-user' > ./username.txt echo -n 'T0T0' > ./password.txt
Création du Secret dans K8S:
kubectl create secret generic grafana-password \ --from-file=./username.txt \ --from-file=./password.txt
Dans ce cas, le nom du fichier représente la clé dans le secret et le contenu du fichier représente la valeur.
Il est aussi possible de configurer la clé dans la commande avec la syntaxe –from-file=[KEY]=./username.txt:
kubectl create secret generic grafana-password \ --from-file=username=./username.txt \ --from-file=password=./password.txt
Pour vérifier le contenu d’un secret:
kubectl get secret grafana-password -o jsonpath='{.data}'
Avec Kubectl create secret, il est important de noter que les valeurs ne doivent pas être chiffrées en Base64
Utilisation des Secrets avec les Pods
Bientôt disponible…
Pour plus de détails n’hésitez pas à alle