Konfigurationsmanagement in Kubernetes: ConfigMaps & Secrets¶
In virtuosen Kubernetes-Umgebungen trennen sich Konfiguration und Code strikt.
ConfigMaps und Secrets sind die offiziellen Mechanismen, um Konfigurationsdaten sicher zu speichern und zur Laufzeit in Pods bereitzustellen.
Dieser Artikel erklärt, wie man ConfigMaps und Secrets effektiv nutzt, häufige Fallen vermeidet und bewährte Sicherheitspraktiken implementiert – alles auf Deutsch und mit praxisnahen Codebeispielen.
📦 1. Grundlagen: Warum ConfigMaps & Secrets?¶
1.1. Warum nicht einfach in Umgebungsvariablen oder Config-Dateien?¶
- Sicherheit: Secrets enthalten sensible Daten (Passwörter, API‑Keys). Das Speichern im Klartext ist ein schwerwiegender Sicherheitsrisiko.
- Versionierung: ConfigMaps/Secrets können versioniert und rollback‑fähig sein.
- Entkoppelung: Anwendungen müssen nicht wissen, woher die Konfiguration stammt.
- Mehrfachnutzung: Derselbe ConfigMap kann von mehreren Pods verwendet werden.
1.2. Definitionen im Überblick¶
| Typ | Zweck | Datenart | Verschlüsselung |
|---|---|---|---|
| ConfigMap | Nicht‑geheime Konfiguration (z. B. URL‑Endpunkte, Feature‑Toggles) | Schlüssel‑Wert‑Paare (String‑Daten) | Keine Verschlüsselung nötig |
| Secret | Vertrauliche Daten (Passwörter, API‑Keys, TLS‑Zertifikate) | Schlüssel‑Wert‑Paare, Base64‑kodiert | Intern verschlüsselt, optional encrypted at rest |
Hauptunterschied: Secrets werden standardmäßig base64‑verschlüsselt im etcd‑Speicher, ConfigMaps nicht.
🛠️ 2. Erstellen & Verwalten von ConfigMaps¶
2.1. Erstellen aus Dateien¶
kubectl create configmap app-config \
--from-file=./config/app.properties \
--from-file=./config/logging.conf
Inhalt von app.properties:
Ergebnis:
Ein ConfigMap-Objekt mit den Schlüsseln app.properties und loggin.conf (der Pfad ist der Dateiname, nicht der Inhalt).
2.2. Erstellen aus Literal‑Werten¶
apiVersion: v1
kind: ConfigMap
metadata:
name: feature-flags
data:
enable_feature_x: "true"
log_level: "debug"
feature_y_enabled: "false"
2.3. Verwendung im Pod¶
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-container
image: my-app:1.0
env:
- name: APP_CONFIG
valueFrom:
configMapKeyRef:
name: app-config
key: app.properties
# Oder direkt als Umgebungsvariable:
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: app-config
key: log_level
configMapKeyRef: Greift auf einen spezifischen Schlüssel im ConfigMap zu.valueFromermöglicht das Injizieren als Umgebungsvariable oder als Volume‑Mount.
2.3. ConfigMap als Volume mounten¶
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
containers:
- name: app
image: my-app:1.0
volumeMounts:
- name: config-volume
mountPath: /etc/app-config
readOnly: true
volumes:
- name: config-volume
configMap:
name: app-config
items:
- key: app.properties
name: app.properties
mode: 0644
items: Definiert, welche Schlüssel als Dateien im Pod gemountet werden und unter welchem Pfad.mode: Dateirechte (hier 0644).
🔐 3. Secrets – Sichere Geheimnisse¶
3.1. Secrets erstellen¶
kubectl create secret generic db-credentials \
--from-literal=username='admin' \
--from-literal=password='S3cr3tP@ssw0rd!' \
--dry-run=client -o yaml > db-credentials-secret.yaml
Oder als Manifest:
apiVersion: v1
kind: Secret
metadata:
name: db-credentials
type: Opaque
data:
username: YWRtaW4= # base64 admin
password: czNjc3RwckBzc2Vzcw== # base64 of "S3cr3tP@ssw0rd!"
3.1.1. Base64‑Kodierung verstehen¶
echo -n "admin" | base64 # gibt "YWRtaW4="
echo -n "S3cr3tP@ssw0rd!" | base64 # gibt "czNjc3RwckBzc2Vzcw=="
3.2. Secrets im Pod nutzen¶
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
containers:
- name: app
image: my-app:1.0
env:
- name: DB_USER
valueFrom:
secretKeyRef:
name: db-credentials
key: username
- name: DB_PASS
valueFrom:
secretKeyRef:
name: db-credentials
key: password
3.2. Secrets als Volume mounten (alternativ)¶
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
containers:
- name: app
image: my-app:1.0
volumeMounts:
- name: secret-volume
mountPath: /etc/secret
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: db-credentials
3.3. Best Practices für Secrets¶
| Praxis | Warum wichtig |
|---|---|
| Never commit Secrets | Git‑Historien残留 führt zu Datenlecks. |
| Least‑Privilege‑Access | Nur Pods, die den Secret benötigen, dürfen darauf zugreifen. |
| Enable Encryption at Rest | Schützt Daten im etcd‑Speicher. |
| Limit Secret Usage | Vermeide das Verbreiten von Secrets über Umgebungsvariablen. |
| Rotate Secrets Regular | Reduziert Schaden bei einem Leak. |
3.3. Beispiel: Secret‑Rotierung mit kubectl¶
kubectl create secret generic db-credentials-new \
--from-literal=username='admin_new' \
--from-literal=password='Neu3str0ngPassword!' \
--dry-run=client -o yaml > db-credentials-new.yaml
kubectl replace secret db-credentials --from-file=db-credentials=db-credentials-new.yaml
Hinweis: Nach der Rotation müssen Pods neu starten, um die neuen Werte zu erhalten.
📚 4. Praktische Anwendungsfälle¶
| Szenario | Empfohlene Vorgehensweise |
|---|---|
| Datenbank‑Verbindung | Konfiguration via ConfigMap (URL, Treiber) + Secrets für Passwort |
| Feature‑Toggles | ConfigMap‑Schlüssel wie feature_x_enabled=true – kann über Ingress‑Regeln oder UI aktiviert werden |
| API‑Schlüssel für Drittanbieter | Secret‑Secret, nicht als Code in Repositories |
| TLS‑Zertifikate | In Secret einbinden und als Volume in Pods mounten, Anwendung liest Zertifikat zur TLS‑Terminierung |
| Umgebungsvariablen für CI/CD | ConfigMap zur Bereitstellung von Build‑Versionen oder Feature‑Flags |
📚 Weiterführende Ressourcen¶
| Thema | Quelle | Link |
|---|---|---|
| Kubernetes ConfigMap Docs | Official K8s Docs | https://kubernetes.io/docs/concepts/configuration/configmap/ |
| Kubernetes Secrets Docs | Official K8s Docs | https://kubernetes.io/docs/concepts/configuration/secret/ |
kubectl Cheat Sheet | Kelsey Hightower | https://kubernetes.io/docs/reference/kubectl/cheatsheet/ |
| OCP – Secrets Management | Red Hat Docs | https://docs.openshift.com/container-platform/latest/security/authentication/managing-secrets.html |
| HashiCorp Vault Integration | Vault Docs | https://www.vaultproject.io/docs/secrets/kubernetes/k8s |
🎯 Fazit¶
- ConfigMaps sind ideal für nicht‑geheime Konfigurationen.
- Secrets schützen vertrauliche Daten und werden automatisch base64‑kodiert sowie optional verschlüsselt.
- Volume‑Mounts und Umgebungsvariablen ermöglichen flexiselektives Injizieren von Daten.
- Sicherheit erfordert bewusste Praxis: Verschlüsselung, Zugriffskontrolle und Rotation.
Mit diesen Mitteln können Sie Ihre Anwendungen sauber entkoppeln, sicher betreiben und gleichzeitig wartungsfreundlich halten – ein entscheidender Schritt für jede moderne, cloud‑native Infrastruktur.
Dieser Artikel wurde am 2026‑04‑06 erstellt. Konfigurationsmanagement‑Praxis entwickelt sich kontinuierlich; aktualisieren Sie regelmäßig Ihre Bild‑ und Helm‑Charts, um sicherzustellen, dass geheime Daten sicher behandelt werden.