
Introduction #
Comprendre le rôle des ConfigMaps et Secrets dans Kubernetes.
Qu'est-ce qu'un ConfigMap ? #
Un ConfigMap est un objet Kubernetes utilisé pour stocker des données de configuration non sensibles sous forme de paires clé-valeur. Il permet de séparer les données de configuration du code de l'application, facilitant ainsi la gestion et la portabilité des applications.
Qu'est-ce qu'un Secret ? #
Un Secret est un objet Kubernetes similaire à un ConfigMap, mais destiné à stocker des données sensibles comme des mots de passe, des clés API ou des certificats. Leurs valeurs sont stockées encodées en base64, ce qui n'est pas une protection : quiconque peut lire l'objet peut décoder la valeur. La protection repose sur le RBAC (qui peut lire les Secrets) et sur le chiffrement au repos dans etcd (EncryptionConfiguration, ou chiffrement géré par le fournisseur cloud).
Fonctionnement des ConfigMaps #
Comment utiliser et gérer les ConfigMaps dans Kubernetes.
Création d'un ConfigMap #
Un ConfigMap peut être créé à partir de la ligne de commande ou d'un fichier YAML.
kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2Utilisation d'un ConfigMap #
Les ConfigMaps peuvent être montés dans un Pod sous forme de variables d'environnement ou de volumes :
Montage comme variables d'environnement :
env:
- name: CONFIG_KEY
valueFrom:
configMapKeyRef:
name: my-config
key: key1Montage comme volume :
volumes:
- name: config-volume
configMap:
name: my-config
volumeMounts:
- name: config-volume
mountPath: /etc/configExemple YAML d'un ConfigMap #
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
namespace: default
data:
key1: value1
key2: value2Fonctionnement des Secrets #
Comment utiliser et gérer les Secrets dans Kubernetes.
Création d'un Secret #
Un Secret peut être créé en ligne de commande ou à partir d'un fichier YAML. Avec kubectl create secret, on donne les valeurs en clair : kubectl les encode lui-même en base64.
kubectl create secret generic my-secret --from-literal=username=myuser --from-literal=password=mypasswordUtilisation d'un Secret #
Les Secrets peuvent être utilisés comme variables d'environnement ou montés comme volumes :
Montage comme variables d'environnement :
env:
- name: SECRET_KEY
valueFrom:
secretKeyRef:
name: my-secret
key: usernameMontage comme volume :
volumes:
- name: secret-volume
secret:
secretName: my-secret
volumeMounts:
- name: secret-volume
mountPath: /etc/secretExemple YAML d'un Secret #
apiVersion: v1
kind: Secret
metadata:
name: my-secret
data:
username: bXl1c2Vy
password: bXlwYXNzd29yZA==En YAML : data ou stringData #
Dans un manifeste, data attend des valeurs déjà encodées en base64, alors que stringData accepte du texte clair (Kubernetes l'encode à l'écriture) :
apiVersion: v1
kind: Secret
metadata: { name: my-secret }
type: Opaque
stringData:
username: myuser
password: mypasswordErreur Courante : Ne versionnez jamais un manifeste de Secret en clair : utilisez Sealed Secrets, SOPS ou External Secrets Operator pour stocker les secrets chiffrés dans Git ou dans un coffre-fort.
Différences entre ConfigMaps et Secrets #
Comparer les ConfigMaps et Secrets pour mieux choisir selon vos besoins.
Données stockées #
ConfigMaps : Données non sensibles comme des fichiers de configuration ou des variables d'environnement.
Secrets : Données sensibles comme des mots de passe ou des clés privées.
Encodage des données #
ConfigMaps : Données en texte clair.
Secrets : Données encodées en base64, ce qui n'est pas un chiffrement ; activez le chiffrement au repos d'etcd et limitez la lecture par RBAC.
Sécurité #
ConfigMaps : Pas de protection supplémentaire.
Secrets : Accès contrôlé par RBAC, recommandé d'utiliser des outils de gestion de secrets externes comme HashiCorp Vault pour une sécurité renforcée.
Bonnes pratiques #
Conseils pour une gestion optimale des ConfigMaps et Secrets.
Utilisez les namespaces #
Organisez vos ConfigMaps et Secrets par namespace pour une meilleure isolation et gestion.
Limitez l'accès #
Appliquez des politiques RBAC strictes pour restreindre l'accès aux Secrets.
Utilisez des outils de gestion de secrets #
Intégrez des solutions comme HashiCorp Vault ou AWS Secrets Manager pour renforcer la sécurité des données sensibles.
Évitez de stocker des secrets en texte clair #
Ne stockez jamais de Secrets directement dans des fichiers ou dans des images de conteneurs.
Conclusion #
Résumé sur l'importance des ConfigMaps et Secrets.
Les ConfigMaps et Secrets sont des outils indispensables dans Kubernetes pour gérer la configuration des applications et protéger les données sensibles. Bien utilisés, ils améliorent la modularité, la sécurité et la maintenabilité des déploiements Kubernetes. En appliquant les bonnes pratiques et en utilisant des outils de gestion appropriés, vous pouvez garantir un environnement Kubernetes sécurisé et performant.