NetDevOps.fr

Un site de partage de connaissances sur les sujets DevOps Réseaux et automatisation des infrastructures IT.

View project on GitHub

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 apply:

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}'

Utilisation des Secrets avec les Pods

Bientôt disponible…