K8s possède deux types d'objets capables d'injecter des données de configuration dans un container au démarrage : les Secrets et les Configmaps. Les secrets et ConfigMaps se comportent de manière similaire.
INFO
Les secrets et les ConfigMaps peuvent être exposés à l'intérieur d'un container en tant que fichiers, volumes ou variables d'environnement.
Les Secrets sont des objets Kubernetes destinés à stocker une petite quantité de données sensibles. Ils sont stockés encodés en base64, ils ne sont donc pas extrêmement sécurisés.
WARNING
Les données extrêmement sensibles devraient être stockées à l'aide d'un outil comme HashiCorp Vault.
Décoder un secret
kubectl get secret <secret-name> -o jsonpath='{.data.<key>}' | base64 --decode
Les ConfigMaps sont destinés aux données non-sensibles (données de configuration), telles que les fichiers de configuration et les variables d'environnement. Contrairement aux Secrets, les ConfigMaps ne sont pas encodés en base64.
Utilisation
Les Secrets et ConfigMaps peuvent être utilisés de plusieurs façons dans un Pod :
| Méthode | Description |
|---|---|
env | Injecter des données sous forme de variables d'environnement |
envFrom | Injecter toutes les paires clé-valeur comme variables d'environnement |
volumeMounts | Monter des secrets ou des configmaps en tant que fichiers dans des volumes |
secretKeyRef | Référence à une clé spécifique d'un secret |
secretRef | Référence à un secret entier |
configMapKeyRef | Référence à une clé spécifique d'un ConfigMap |
configMapRef | Référence à un ConfigMap entier |
apiVersion: v1
kind: Pod
metadata:
name: complete-example-pod
spec:
containers:
- name: myapp-container
image: myapp:latest
env:
# Injecter une clé spécifique d'un ConfigMap en tant que variable d'environnement
- name: CONFIG_KEY1
valueFrom:
configMapKeyRef:
name: example-configmap
key: key1
# Injecter une clé spécifique d'un Secret en tant que variable d'environnement
- name: SECRET_KEY1
valueFrom:
secretKeyRef:
name: example-secret
key: key1
envFrom:
# Injecter toutes les paires clé-valeur d'un ConfigMap comme variables d'environnement
- configMapRef:
name: example-configmap
# Injecter toutes les paires clé-valeur d'un Secret comme variables d'environnement
- secretRef:
name: example-secret
volumeMounts:
# Monter un ConfigMap en tant que fichier
- name: config-volume
mountPath: /etc/config
subPath: config-file # Spécifier un sous-chemin pour monter un seul fichier du ConfigMap
# Monter un Secret en tant que fichier
- name: secret-volume
mountPath: /etc/secret
subPath: secret-file # Spécifier un sous-chemin pour monter un seul fichier du Secret
# Monter un volume vide pour le développement
- name: emptydir-volume
mountPath: /data
volumes:
# Définir un volume ConfigMap
- name: config-volume
configMap:
name: example-configmap
items:
- key: key1
path: config-file # Spécifier un fichier particulier du ConfigMap
# Définir un volume Secret
- name: secret-volume
secret:
secretName: example-secret
items:
- key: key1
path: secret-file # Spécifier un fichier particulier du Secret
# Définir un volume emptyDir (non persistant, utilisé principalement pour le développement)
- name: emptydir-volume
emptyDir: {}