RousselTMLEARNING

Articles

ConfigMaps et Secrets

Guide complet sur les ConfigMaps et Secrets dans Kubernetes.

ConfigMaps et Secrets

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=value2

Utilisation 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: key1

Montage comme volume :

volumes:
  - name: config-volume
    configMap:
        name: my-config
volumeMounts:
  - name: config-volume
    mountPath: /etc/config

Exemple YAML d'un ConfigMap #

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
  namespace: default
data:
  key1: value1
  key2: value2

Fonctionnement 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=mypassword

Utilisation 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: username

Montage comme volume :

volumes:
  - name: secret-volume
    secret:
        secretName: my-secret
volumeMounts:
  - name: secret-volume
    mountPath: /etc/secret

Exemple 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: mypassword
Erreur 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.

Articles liés

Bonnes Pratiques Kubernetes

Meilleures pratiques pour sécuriser et optimiser les déploiements Kubernetes.

Comparaison Offres Kubernetes

Analyse complète des offres managées de Kubernetes avec points forts, fonctionnalités, tarification et intégr…

Stratégies de placement Kubernetes

Présentation des stratégies de placement dans Kubernetes pour optimiser la gestion des charges de travail ave…