Skip to content

Secrets & ConfigMapsSecrets & ConfigMaps
​

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.

SecretsSecrets
​

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

sh
kubectl get secret <secret-name> -o jsonpath='{.data.<key>}' | base64 --decode

ConfigMapsConfigMaps
​

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éthodeDescription
envInjecter des données sous forme de variables d'environnement
envFromInjecter toutes les paires clé-valeur comme variables d'environnement
volumeMountsMonter des secrets ou des configmaps en tant que fichiers dans des volumes
secretKeyRefRéférence à une clé spécifique d'un secret
secretRefRéférence à un secret entier
configMapKeyRefRéférence à une clé spécifique d'un ConfigMap
configMapRefRéférence à un ConfigMap entier
yaml
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: {}