Kubernetes ConfigMaps & Secrets

6 Kernkonzepte
Die wichtigsten Konzepte für Konfiguration und Geheimnisse in Kubernetes: ConfigMap · Secret · environment · volumes · kubectl commands · Best Practices ConfigMaps und Secrets sind die Standardmethoden in Kubernetes, um Konfigurationsdaten und vertrauliche Informationen von der Anwendungslogik zu trennen und sicher zu verwalten.

ConfigMap – Nicht-geheime Konfiguration

ConfigMap · kubectl create configmap
apiVersion: v1 kind: ConfigMap metadata: name: app-config data: APP_ENV: production APP_PORT: "8080"

ConfigMaps speichern nicht-vertrauliche Konfigurationsdaten in Schlüssel-Wert-Paaren. Sie können als Umgebungsvariablen oder als Dateien in Pods eingebunden werden.

Beispiele
# Aus Literals erstellen
kubectl create configmap app-config --from-literal=APP_ENV=production --from-literal=APP_PORT=8080
# Aus Datei erstellen
kubectl create configmap app-config --from-file=app.properties
# In Pod verwenden (als env)
env:
- name: APP_ENV
valueFrom:
configMapKeyRef:
name: app-config
key: APP_ENV
# Als Volume einbinden
volumes:
- name: config-volume
configMap:
name: app-config
Tipp: ConfigMaps sind für Konfigurationen gedacht, die nicht geheim sind. Daten sind unverschlüsselt – verwenden Sie Secrets für sensible Daten wie Passwörter und Tokens.

Secret – Geheime Daten speichern

Secret · kubectl create secret · base64
apiVersion: v1 kind: Secret metadata: name: db-secret type: Opaque data: username: YWRtaW4= # base64 "admin" password: c2VjcmV0 # base64 "secret"

Secrets speichern vertrauliche Daten wie Passwörter, Tokens oder SSH-Schlüssel. Die Daten werden base64-codiert gespeichert und können als Umgebungsvariablen oder Volumes in Pods eingebunden werden.

Beispiele
# Aus Literals erstellen
kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password=secret
# Aus Datei erstellen
kubectl create secret generic ssl-cert --from-file=cert.pem --from-file=key.pem
# In Pod verwenden (als env)
env:
- name: DB_USER
valueFrom:
secretKeyRef:
name: db-secret
key: username
# Als Volume einbinden (Datei)
volumes:
- name: ssl-cert
secret:
secretName: ssl-cert
⚠️ Wichtig: Secrets sind nur base64-codiert, nicht verschlüsselt! Aktivieren Sie Encryption at Rest im Cluster, um Secrets wirklich zu schützen. Niemals Secrets in Git speichern.

Umgebungsvariablen – ConfigMap & Secret als env

envFrom · configMapKeyRef · secretKeyRef
envFrom: - configMapRef: name: app-config - secretRef: name: db-secret

envFrom macht alle Schlüssel eines ConfigMaps oder Secrets als Umgebungsvariablen im Pod verfügbar. Mit configMapKeyRef und secretKeyRef können Sie einzelne Werte auswählen.

Beispiele
# Alle ConfigMap-Werte als env
envFrom:
- configMapRef:
name: app-config
# Alle Secret-Werte als env
envFrom:
- secretRef:
name: db-secret
# Einzelnen Wert auswählen
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
Tipp: Verwenden Sie envFrom für große Konfigurationen, aber bedenken Sie: Alle Umgebungsvariablen werden im Pod sichtbar. Für einzelne Werte ist valueFrom präziser.

Volumes – ConfigMap & Secret als Dateien

volumes · volumeMounts · subPath
volumes: - name: config configMap: name: app-config volumeMounts: - name: config mountPath: /app/config

Volumes binden ConfigMaps und Secrets als Dateien in den Pod ein. Jeder Schlüssel wird zu einer Datei mit dem Schlüssel als Dateiname und dem Wert als Inhalt.

Beispiele
# ConfigMap als Volume
volumes:
- name: app-config
configMap:
name: app-config
# Secret als Volume
volumes:
- name: db-secret
secret:
secretName: db-secret
# Nur bestimmte Schlüssel als Dateien
items:
- key: username
path: db-user.txt
# Einzelne Datei mit subPath
volumeMounts:
- name: app-config
mountPath: /app/config/APP_ENV
subPath: APP_ENV
Tipp: Bei ConfigMaps/Secrets als Volumes werden Änderungen automatisch im Pod aktualisiert (aber die Anwendung muss diese Änderungen selbst erkennen, z.B. durch Neustart oder Hot-Reload).

kubectl Befehle – ConfigMaps & Secrets verwalten

create · get · describe · edit · delete
kubectl create configmap app-config --from-literal=key=value kubectl get configmap app-config -o yaml kubectl describe secret db-secret kubectl delete configmap app-config

kubectl ist das Kommandozeilen-Tool für die Kubernetes-API. Diese Befehle helfen bei der Erstellung, Abfrage und Verwaltung von ConfigMaps und Secrets.

Wichtige kubectl-Befehle

Befehl Beschreibung
kubectl create configmap NAME --from-literal=key=value ConfigMap aus Literal erstellen
kubectl create configmap NAME --from-file=file ConfigMap aus Datei erstellen
kubectl create secret generic NAME --from-literal=key=value Secret aus Literal erstellen
kubectl create secret generic NAME --from-file=file Secret aus Datei erstellen
kubectl get configmap Alle ConfigMaps auflisten
kubectl get secret Alle Secrets auflisten
kubectl get configmap NAME -o yaml ConfigMap als YAML anzeigen
kubectl describe configmap NAME Detaillierte Informationen
kubectl edit configmap NAME ConfigMap bearbeiten
kubectl delete configmap NAME ConfigMap löschen
Beispiele
kubectl create configmap app-config --from-literal=ENV=prod --from-literal=DEBUG=false
kubectl create secret generic db-secret --from-literal=password=mysecret
kubectl get configmap app-config -o yaml
kubectl describe secret db-secret
kubectl edit configmap app-config
kubectl delete secret db-secret
Tipp: Verwenden Sie kubectl get configmap NAME -o yaml um die vollständige Definition anzusehen. Mit kubectl edit können Sie ConfigMaps und Secrets direkt im Editor ändern.

Best Practices – Sicher & sauber konfigurieren

Encryption · RBAC · External Secrets · Immutable
# Encryption at Rest aktivieren apiVersion: apiserver.config.k8s.io/v1 kind: EncryptionConfiguration resources: - resources: - secrets providers: - aescbc: keys: - name: key1 secret: <base64-encrypted-key>

Best Practices für den sicheren und effizienten Umgang mit ConfigMaps und Secrets in Kubernetes-Produktionsumgebungen.

Die wichtigsten Best Practices

Praxis Beschreibung
Encryption at Rest Secrets in etcd verschlüsseln (EncryptionConfiguration)
RBAC Zugriff auf Secrets mit Rollen beschränken
Immutable ConfigMaps immutable: true für unveränderliche Konfigurationen
External Secrets Secrets aus externen Quellen (Vault, AWS Secrets Manager) beziehen
Keine Secrets in Git Secrets niemals in Git-Repositories speichern
Sealed Secrets Verschlüsselte Secrets für Git mit Sealed Secrets
Namespace-Isolierung ConfigMaps/Secrets im passenden Namespace anlegen
Limit-Range Size-Limits für Secrets setzen
Beispiele
# Immutable ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
immutable: true
data:
config: "production"
# RBAC für Secrets
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: secret-reader
namespace: default
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list"]
Tipp: Verwenden Sie Sealed Secrets oder External Secrets Operator, um Secrets sicher in Git zu speichern. Aktivieren Sie Encryption at Rest für die etcd-Datenbank.

ConfigMaps & Secrets im Überblick

ConfigMap Nicht-geheime Konfiguration
env, Dateien, Literals
Secret Geheime Daten
base64-codiert
envFrom Alle Schlüssel als env
configMapRef, secretRef
Volumes Als Dateien einbinden
subPath, items
kubectl Verwaltung
create, get, edit, delete
Security Sicherheit
Encryption, RBAC, Secrets

Quick Summary

ConfigMap
Konfiguration
Secret
Geheimnisse
envFrom
Umgebungsvariablen
Volume
Dateien einbinden
kubectl
Befehle
Security
Best Practices
kubectl create configmap app-config --from-literal=ENV=prod · kubectl create secret generic db-secret --from-literal=password=secret