Lassen Sie uns schnell klären, worum es bei ConfigMaps und Secrets geht:
- ConfigMaps: Stellen Sie sich diese als den persönlichen Assistenten Ihrer App vor, der alle nicht-sensiblen Konfigurationsdaten hält.
- Secrets: Der Tresor, in dem Sie alle Ihre geheimen Informationen aufbewahren. Passwörter, API-Schlüssel, Sie nennen es.
Jetzt denken Sie vielleicht: "Sind Secrets nicht... geheim?" Halten Sie diesen Gedanken fest, wir kommen gleich zu diesem spannenden Teil!
Erstellen von ConfigMaps und Secrets: So geht's
Lassen Sie uns die Ärmel hochkrempeln und mit etwas YAML loslegen.
ConfigMaps: Ihr Konfigurationsbegleiter
Das Erstellen eines ConfigMap ist kinderleicht. Hier ist ein YAML-Schnipsel, um Ihnen den Einstieg zu erleichtern:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-awesome-config
data:
APP_COLOR: blue
APP_MODE: production
Oder, wenn Sie eher ein Kommandozeilen-Fan sind:
kubectl create configmap my-awesome-config --from-literal=APP_COLOR=blue --from-literal=APP_MODE=production
Secrets: Nicht Ihr Durchschnitts-Joe
Nun zum Star der Show - Secrets! So erstellen Sie eines:
apiVersion: v1
kind: Secret
metadata:
name: my-super-secret
type: Opaque
data:
DB_PASSWORD: cGFzc3dvcmQxMjM= # base64 kodiertes "password123"
Oder über die Kommandozeile:
kubectl create secret generic my-super-secret --from-literal=DB_PASSWORD=password123
Aber Moment, es gibt einen Haken! Haben Sie bemerkt, dass die Daten des Secrets nur base64-kodiert sind? Mehr dazu in Kürze.
Die Fallstricke: Fallen Sie nicht in diese Fallen!
Nachdem wir die Grundlagen behandelt haben, sprechen wir über einige häufige Fehler, die selbst erfahrene Entwickler machen. Glauben Sie mir, ich war dort, habe das getan und das "Ich habe die Produktion kaputt gemacht"-T-Shirt bekommen.
1. Das "Secret", das nicht so geheim ist
Erinnern Sie sich, als ich erwähnte, dass Secrets nur base64-kodiert sind? Nun, das ist unser erster Fallstrick. Viele Entwickler denken, Secrets seien verschlüsselt. Spoiler-Alarm: Sie sind es nicht!
"Aber Moment," könnten Sie sagen, "ist base64-Kodierung nicht genug?" Nun, wenn Sie denken, dass das sicher ist, habe ich eine Brücke zu verkaufen!
Um Ihre Secrets wirklich zu sichern, müssen Sie die Verschlüsselung im Ruhezustand aktivieren. Hier ist ein kurzes Beispiel, wie das geht:
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: c2VjcmV0LWtleS1oZXJl
- identity: {}
2. Die Umgebungsvariablen-Falle
Verwenden Sie Umgebungsvariablen, um Secrets zu speichern? Das ist, als würden Sie Ihren Hausschlüssel unter die Fußmatte legen. Jeder, der Zugriff auf Ihren Pod hat, kann alle Umgebungsvariablen mit einem einfachen Befehl sehen:
kubectl exec -it my-pod -- env
Stattdessen sollten Sie in Betracht ziehen, Secrets als Dateien zu mounten. Es ist nicht narrensicher, aber es ist ein Schritt nach oben:
volumeMounts:
- name: secret-volume
mountPath: /etc/secrets
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: my-super-secret
3. Das 'kubectl describe'-Dilemma
Wussten Sie, dass kubectl describe secret
die Secret-Daten in base64 anzeigt? Ja, es ist so einfach, Ihre Secrets offenzulegen. Um dies zu mildern, verwenden Sie RBAC, um zu begrenzen, wer Secrets beschreiben kann:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
Best Practices: Halten Sie Ihren Kubernetes-Cluster Fort Knox-sicher
Nachdem wir besprochen haben, was Sie nicht tun sollten, lassen Sie uns über einige Best Practices sprechen, um Ihre ConfigMaps und Secrets sicherer als den Nussvorrat eines Eichhörnchens im Winter zu halten.
1. Behandeln Sie Secrets, als wären sie tatsächlich... geheim
Vermeiden Sie es, Secrets in Ihrem Anwendungscode zu hardcodieren. Nicht einmal für diesen "schnellen Test" in der Produktion. Wir waren alle schon dort, aber widerstehen Sie der Versuchung!
2. Verwenden Sie einen Secret Manager
Erwägen Sie die Integration von Kubernetes mit einem dedizierten Secret Manager wie HashiCorp Vault oder AWS Secrets Manager. Diese Tools sind darauf ausgelegt, Secrets sicher zu handhaben und können nahtlos mit Kubernetes integriert werden.
3. Secrets regelmäßig rotieren
Behandeln Sie Ihre Secrets wie Ihre Unterwäsche - wechseln Sie sie regelmäßig! Richten Sie einen Prozess ein, um Secrets automatisch zu rotieren. Ihr zukünftiges Ich wird es Ihnen danken.
4. Überwachen Sie auf Lecks
Richten Sie eine Überwachung ein, um zu erkennen, ob Secrets versehentlich offengelegt werden. Tools wie GitGuardian können Ihnen helfen, Secrets zu erkennen, bevor sie in die Produktion gelangen.
Wann ConfigMaps vs. Secrets verwenden
Nachdem wir das Wie und das Was behandelt haben, sprechen wir über das Wann.
Verwenden Sie ConfigMaps für:
- Nicht-sensible Konfigurationsdaten
- Umgebungsspezifische Einstellungen
- Konfigurationsdateien
Verwenden Sie Secrets für:
- Passwörter
- OAuth-Tokens
- SSH-Schlüssel
- Alle Daten, die Ihr neugieriger Kollege nicht sehen soll
Zusammenfassung
ConfigMaps und Secrets sind mächtige Werkzeuge im Kubernetes-Ökosystem, aber mit großer Macht kommt große Verantwortung. Verwenden Sie sie weise, sichern Sie sie richtig, und Ihre Anwendungen werden es Ihnen danken, indem sie sicher und konfigurierbar bleiben.
Denken Sie daran, in der Welt von Kubernetes geht ein wenig Paranoia einen langen Weg. Gehen Sie immer davon aus, dass jemand versucht, auf Ihre Secrets zuzugreifen, denn in der wilden Welt des Internets tun sie es wahrscheinlich!
Gehen Sie nun hinaus und konfigurieren Sie sicher, meine Mitabenteurer in Kubernetes!
"Das einzige wirklich sichere System ist eines, das ausgeschaltet, in einen Betonblock gegossen und in einem bleiausgekleideten Raum mit bewaffneten Wachen versiegelt ist." - Gene Spafford
P.S. Wenn Sie diesen Artikel hilfreich fanden, ziehen Sie in Betracht, ihn mit Ihrem Team zu teilen. Wer weiß, vielleicht retten Sie jemanden vor einem nächtlichen "Ups, ich habe unser Produktionsdatenbank-Passwort offengelegt"-Vorfall!