Chapitre 5.4 - Bonnes Pratiques
Objectifs d'Apprentissage
À la fin de ce chapitre, vous serez capable de:
- Appliquer les bonnes pratiques pour ConfigMaps
- Gérer les secrets de manière sécurisée
- Comprendre les limites et contraintes
- Implémenter la rotation des secrets
- Utiliser External Secrets Operator
- Mettre en place le chiffrement au repos
Introduction
Les bonnes pratiques pour ConfigMaps et Secrets sont essentielles pour maintenir un environnement Kubernetes sécurisé, maintenable et performant.
ConfigMaps: Bonnes Pratiques
1. Séparation de la Configuration
Ne pas hardcoder dans le code:
# ❌ Mauvais
env:
- name: DATABASE_URL
value: "postgresql://localhost:5432/mydb"
# ✅ Bon
env:
- name: DATABASE_URL
valueFrom:
configMapKeyRef:
name: app-config
key: database_url
2. Organisation par Environnement
Créer des ConfigMaps séparés par environnement:
# Dev
kubectl create configmap app-config-dev --from-file=config-dev.properties
# Production
kubectl create configmap app-config-prod --from-file=config-prod.properties
3. Versioning
Utiliser des labels pour versionner:
metadata:
name: app-config
labels:
version: v1
environment: production
Secrets: Bonnes Pratiques
1. Ne Jamais Commiter
❌ Ne jamais faire:
- Commiter des secrets dans Git
- Mettre des secrets en clair dans les YAML
- Partager des secrets par email/chat
✅ Faire:
- Utiliser des outils de gestion de secrets
- Chiffrer les secrets au repos
- Utiliser External Secrets Operator
2. Rotation Régulière
# Créer un nouveau secret
kubectl create secret generic db-secret-v2 \
--from-literal=password=new-password
# Mettre à jour le Deployment
kubectl set env deployment/my-app \
DB_PASSWORD=$(kubectl get secret db-secret-v2 -o jsonpath='{.data.password}' | base64 -d)
# Supprimer l'ancien secret
kubectl delete secret db-secret-v1
3. Chiffrement au Repos
Kubernetes stocke les secrets en base64 (pas de chiffrement par défaut).
Solutions:
- Activer le chiffrement au repos (EncryptionConfig)
- Utiliser des outils externes (Vault, AWS Secrets Manager)
Limites et Contraintes
Taille Maximale
- ConfigMap: 1 MiB par entrée
- Secret: 1 MiB par entrée
- Total: Limité par etcd (généralement 1.5 MiB)
Performance
- Les grandes ConfigMaps peuvent ralentir le démarrage des Pods
- Préférer plusieurs petits ConfigMaps
External Secrets Operator
Pour les secrets externes (AWS, Azure, GCP, Vault):
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: db-secret
spec:
secretStoreRef:
name: aws-secrets-manager
kind: SecretStore
target:
name: db-secret
creationPolicy: Owner
data:
- secretKey: password
remoteRef:
key: production/database/password
Résumé
Dans ce chapitre, vous avez appris:
ConfigMaps: Séparer config du code, organiser par environnement
Secrets: Ne jamais commiter, rotation régulière, chiffrement
Limites: Taille maximale, considérations de performance
Outils: External Secrets Operator pour secrets externes
Sécurité: Chiffrement au repos, gestion centralisée
Prochaines Étapes
Lab 5.1: Création et Utilisation de ConfigMaps
Lab 5.2: Gestion des Secrets
Chapitre créé le: Décembre 2024