Aide-mémoire CKAD

exemple YAML Secret k8s

stringData est en clair dans le fichier. Kubernetes le stocke en base64 dans data. Préférer stringData à l’examen.

Un officier retire une capsule scellée d’un mur de coffre. Un officier retire une capsule scellée d’un mur de coffre.
Créer
kubectl create secret generic db --from-literal=password=example
kubectl create secret generic tls --from-file=tls.crt --from-file=tls.key
kubectl get secret db -o jsonpath='{.data.password}' | base64 -d
Secret
apiVersion: v1
kind: Secret
metadata:
  name: db
  namespace: default
type: Opaque
stringData:
  password: example
  username: app
env
spec:
  containers:
    - name: app
      image: nginx:1.27
      env:
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: db
              key: password
      envFrom:
        - secretRef:
            name: db
En fichier
spec:
  containers:
    - name: app
      image: nginx:1.27
      volumeMounts:
        - name: creds
          mountPath: /etc/creds
          readOnly: true
  volumes:
    - name: creds
      secret:
        secretName: db

Champs

stringData
En clair dans le YAML. Stocké en base64 dans data. Préférer ça.
secretKeyRef
Une clé. Pas configMapKeyRef.
secretName
Le champ du volume est secretName, pas name.
data
Les valeurs ici sont déjà en base64. Préférer stringData.

Pièges

  • Ne pas mettre un Secret dans un ConfigMap. secretKeyRef / secretRef / secret.secretName — pas configMap.
  • Les valeurs de data sont déjà en base64. stringData est en clair. Les deux : stringData gagne sur la même clé.
  • kubectl get secret n’affiche que les clés. Décoder : jsonpath '{.data.password}' | base64 -d.

Doc officielle Secrets

S’entraîner sur un cluster réel →