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: {}