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.
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
apiVersion: v1
kind: Secret
metadata:
name: db
namespace: default
type: Opaque
stringData:
password: example
username: app
spec:
containers:
- name: app
image: nginx:1.27
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db
key: password
envFrom:
- secretRef:
name: db
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