Objectifs
- Distinguer configuration non sensible et données confidentielles.
- Créer des manifests ConfigMap et Secret valides.
- Injecter des valeurs via variables d’environnement ou volumes.
- Comprendre les limites du Base64 et éviter l’exposition des secrets.
Configurer les applications avec ConfigMaps et Secrets
Externaliser la configuration permet de réutiliser une même image dans plusieurs environnements. Une ConfigMap contient des données non confidentielles ; un Secret est destiné aux données sensibles et bénéficie de contrôles d’accès spécifiques.
Un Secret Kubernetes n’est pas automatiquement sûr par sa seule existence. Les valeurs du champ data sont encodées en Base64, ce qui n’est pas du chiffrement ; la sécurité dépend aussi du RBAC, du chiffrement au repos et du système de gestion des secrets.
ConfigMap pour la configuration non sensible
Le champ data accepte des paires clé-valeur texte. La ConfigMap peut ensuite être consommée comme environnement ou montée sous forme de fichiers.
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
APP_ENV: production
LOG_LEVEL: infoSecret et stringData
stringData accepte des chaînes lisibles à la création ; l’API les convertit dans data. La valeur change-me est uniquement pédagogique et ne doit jamais être réutilisée dans un environnement réel.
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
stringData:
DB_USER: appuser
DB_PASSWORD: change-meN’enregistrez jamais un vrai mot de passe en clair dans Git. Selon l’architecture, utilisez un gestionnaire de secrets, Vault, External Secrets ou un mécanisme équivalent avec rotation et contrôle d’accès.
Utiliser les valeurs dans un Pod
envFrom crée des variables à partir de toutes les clés référencées. Des références plus ciblées ou des volumes projetés conviennent lorsque seules certaines clés sont nécessaires.
envFrom:
- configMapRef:
name: app-config
- secretRef:
name: app-secretUne variable d’environnement déjà injectée ne change pas dans un processus existant après la mise à jour de la ConfigMap ou du Secret. Le workload doit généralement être redémarré ou rechargé selon son mode de consommation.
Observer sans exposer les valeurs sensibles
Listez les objets et décrivez la ConfigMap. Pour les Secrets, évitez les sorties qui décodent ou affichent les valeurs dans un terminal, un historique de commandes ou des logs de CI.
kubectl get configmaps
kubectl get secrets
kubectl describe configmap app-configBonnes pratiques
Accordez l’accès minimal aux Secrets, activez le chiffrement au repos lorsque nécessaire et prévoyez la rotation. Séparez les configurations par application et environnement.
- Ne pas placer de secret réel dans une image, un manifeste versionné ou une ConfigMap.
- Restreindre les droits get/list/watch sur les Secrets avec RBAC.
- Prévoir comment l’application recharge une configuration mise à jour.
Erreur fréquente : considérer Base64 comme du chiffrement
Mini résumé
- ConfigMap stocke une configuration non confidentielle.
- Secret est l’objet adapté aux données sensibles, mais Base64 ne chiffre rien.
- envFrom et les volumes permettent de consommer les valeurs dans un Pod.
- RBAC, chiffrement au repos et rotation complètent la protection.
Mini quiz
Trois questions pour vérifier les notions essentielles de la leçon.