ConfigMap és Secret
Konfiguráció szétválasztása image-től: ConfigMap és Secret használat, példák, biztonsági megjegyzések.
ConfigMap és Secret
A konfiguráció szétválasztásának elve
Konténerizált alkalmazásoknál fontos, hogy a konfiguráció ne égjen bele az image-be. Környezetenként (dev/staging/prod) eltérhetnek a beállítások, de az image maradjon azonos. Ezt szolgálja a ConfigMap és a Secret.
ConfigMap
A ConfigMap nem bizalmas konfigurációs adatokat tárol kulcs-érték párokként.
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-config
data:
DATABASE_HOST: "postgres-service"
DATABASE_PORT: "5432"
APP_ENV: "production"
LOG_LEVEL: "info"Használat pod-ban – env változóként:
spec:
containers:
- name: myapp
image: myapp:1.0.0
envFrom:
- configMapRef:
name: myapp-configHasználat fájlként (kötetként):
spec:
containers:
- name: myapp
image: myapp:1.0.0
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: myapp-configSecret
A Secret bizalmas adatokat tárol (jelszavak, API kulcsok, tokenek). Értékei Base64-kódoltak (ez nem titkosítás).
Biztonsági megjegyzés: alapértelmezés szerint a Secretek az etcd-ben titkosítatlanul tárolódhatnak. Éles rendszerben használj Sealed Secrets/Vault/felhőszolgáltató titkosítást.
apiVersion: v1
kind: Secret
metadata:
name: myapp-secret
type: Opaque
data:
DATABASE_PASSWORD: cGFzc3dvcmQxMjM=
API_KEY: bXlzZWNyZXRrZXk=Secret létrehozása CLI-vel (ajánlott):
kubectl create secret generic myapp-secret \
--from-literal=DATABASE_PASSWORD=password123 \
--from-literal=API_KEY=mysecretkeySecret használata pod-ban:
spec:
containers:
- name: myapp
image: myapp:1.0.0
env:
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: myapp-secret
key: DATABASE_PASSWORDRövid összefoglaló
- ConfigMap: nem bizalmas konfiguráció; Secret: bizalmas adatok.
- Mindkettő adható env-ként vagy fájlként.
- A Secret Base64 nem titkosítás; production-ben gondoskodj titkosításról.