Aller au contenu principal

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