Aller au contenu principal

Chapitre 5.3 - Injection dans les Pods

Objectifs d'Apprentissage

À la fin de ce chapitre, vous serez capable de:

  • Injecter ConfigMaps comme variables d'environnement
  • Monter ConfigMaps comme volumes
  • Utiliser les Secrets de manière sécurisée
  • Comprendre les différentes méthodes d'injection
  • Choisir la bonne méthode selon le cas d'usage

Vue d'Ensemble

Il existe plusieurs façons d'injecter des ConfigMaps et Secrets dans vos Pods. Chaque méthode a ses avantages et cas d'usage spécifiques.


Méthodes d'Injection

1. Variables d'Environnement

Depuis ConfigMap

apiVersion: v1
kind: Pod
metadata:
name: configmap-env-pod
spec:
containers:
- name: app
image: nginx:1.20
env:
# Méthode 1: Une clé spécifique
- name: DATABASE_URL
valueFrom:
configMapKeyRef:
name: app-config
key: database_url
# Méthode 2: Toutes les clés
- name: CONFIGMAP_ENV
valueFrom:
configMapRef:
name: app-config
envFrom:
# Méthode 3: Toutes les clés du ConfigMap
- configMapRef:
name: app-config

Depuis Secret

env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
envFrom:
- secretRef:
name: db-secret

2. Volumes

ConfigMap comme Volume

apiVersion: v1
kind: Pod
metadata:
name: configmap-volume-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: config
mountPath: /etc/config
readOnly: true
volumes:
- name: config
configMap:
name: app-config
# Optionnel: inclure seulement certaines clés
items:
- key: database_url
path: db-url
- key: log_level
path: log-level

Secret comme Volume

volumes:
- name: secrets
secret:
secretName: db-secret
defaultMode: 0400 # Permissions (lecture seule)

Exemple Complet

apiVersion: v1
kind: Pod
metadata:
name: full-example-pod
spec:
containers:
- name: app
image: my-app:1.0
# Variables d'environnement depuis ConfigMap
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: app-config
key: log_level
# Variables d'environnement depuis Secret
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
# Volume ConfigMap
volumeMounts:
- name: config
mountPath: /etc/config
- name: secrets
mountPath: /etc/secrets
readOnly: true
volumes:
- name: config
configMap:
name: app-config
- name: secrets
secret:
secretName: db-secret

Différences: env vs volumeMounts

Variables d'Environnement (env)

Avantages:

  • Simple à utiliser
  • Accessible via $VARIABLE_NAME
  • Bon pour les valeurs simples

Limitations:

  • Pas de fichiers complets
  • Limite de taille

Volumes

Avantages:

  • Fichiers complets
  • Structure de répertoires
  • Bon pour les fichiers de configuration

Cas d'usage:

  • Fichiers de configuration (nginx.conf, etc.)
  • Certificats
  • Scripts

Bonnes Pratiques

ConfigMaps

  • Utiliser des volumes pour les fichiers de configuration
  • Utiliser env pour les valeurs simples
  • Ne pas stocker de données sensibles

Secrets

  • Toujours utiliser readOnly: true pour les volumes
  • Ne jamais logger les valeurs de secrets
  • Utiliser des permissions restrictives (defaultMode: 0400)

Résumé

Dans ce chapitre, vous avez appris:

Variables d'environnement: env et envFrom
Volumes: configMap et secret comme volumes
Méthodes: valueFrom, configMapRef, secretRef
Cas d'usage: env pour valeurs simples, volumes pour fichiers
Sécurité: readOnly, permissions restrictives pour secrets


Prochaines Étapes

Chapitre 5.4: Bonnes Pratiques
Lab 5.1: Création et Utilisation de ConfigMaps


Chapitre créé le: Décembre 2024