ConfigMapy a Secrety

ConfigMapy a Secrety

Konfigurace žije v prostředí, ne v image. Stejný image běží ve vývoji i v produkci – liší se jen ConfigMapa.

graph LR CM[ConfigMap app-cfg] -->|proměnná| P[Pod] SEC[Secret db-cred] -->|proměnná| P CM -->|připojený soubor| P
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-cfg
data:
  DATACENTER: dc01
  app.properties: |
    color=blue

Dva způsoby spotřeby:

env:                                   # 1 – jeden klíč jako proměnná
  - name: DATACENTER
    valueFrom:
      configMapKeyRef: { name: app-cfg, key: DATACENTER }

volumes:                               # 2 – celá ConfigMapa jako soubory
  - name: cfg
    configMap: { name: app-cfg }

Připojené soubory se aktualizují samy (zhruba do minuty, až kubelet synchronizuje). Proměnné prostředí ne – nastaví se jednou při startu kontejneru, takže pod se musí restartovat: kubectl rollout restart deploy/….

Secret

Stejný tvar, jiný záměr. Hodnoty jsou v manifestu base64, což je kódování, ne šifrování – kdo Secret přečte, vidí hodnotu.

kubectl create secret generic db-cred \
  --from-literal=username=app --from-literal=password=S3cret
kubectl get secret db-cred -o jsonpath='{.data.password}' | base64 -d
envFrom:
  - secretRef: { name: db-cred }

Když píšete Secret ručně, použijte stringData. Skutečný Secret nikdy nedávejte do Gitu – použijte sealed-secrets, SOPS nebo externí úložiště. Ochranu dělá RBAC a šifrování at rest, ne to kódování.

Reference