Grundlegendes zu Kubernetes-Geheimnissen
Eine der wichtigsten Überlegungen bei der Arbeit mit verteilten Anwendungen ist die Verwaltung vertraulicher Informationen, wie Kennwörter, Verbindungen und ähnliche Daten. Kubernetes ermöglicht es Ihnen, diese Daten mit einer Ressource namens Geheimnis zu sichern.
Grundlegendes zu Geheimnissen
In Kubernetes können Sie mit Geheimnissen vertrauliche Informationen auf sicherere Weise als Nur-Text-Format in Pods und Bereitstellungen speichern. Geheimnisse sind für das Speichern von Kennwörtern und anderen vertraulichen Daten konzipiert.
Kubernetes-Geheimnisse codieren ihre Daten in einem base64-Format. Obwohl base64 kein Verschlüsselungsalgorithmus ist, kann Kubernetes sehen, dass die Informationen codiert sind, und kann diese Informationen aus Befehlsausgaben wie z. B. kubectl describe
ausblenden. Dieser Vorgang geschieht nicht mit einer Nur-Text-Konfiguration. Geheimnisse sind immer auf einen einzelnen Namespace beschränkt, um zu vermeiden, dass vertrauliche Daten für andere Workloads im Cluster zugänglich gemacht werden.
Geheimnistypen
Es gibt verschiedene Arten von Geheimnissen. Der häufigste und auch der Standardtyp ist Opaque
, der benutzerdefinierte, beliebige Daten enthält. Zu den anderen häufigen Typen gehören:
kubernetes.io/service-account-token
: Definiert ein Dienstkontotoken, und es wird automatisch erstellt, wenn ein neues Dienstkonto erstellt wird.kubernetes.io/basic-auth
: Anmeldeinformationen für Standardauthentifizierung.kubernetes.io/tls
: TLS-Client-oder Serverdaten, die z. B. zum Verarbeiten von HTTPS-Verbindungen aus einer Eingangsressource verwendet werden.
Tipp
Weitere Informationen finden Sie in der offiziellen Dokumentation über Kubernetes-Geheimnisse.
Erstellen und Verwenden eines Geheimnisses
Gemäß der offiziellen Kubernetes-Geheimnisse Dokumentation können Sie ein Geheimnis auf drei verschiedene Arten verwenden:
- Eingebunden als Dateien in einem Volume in Containern innerhalb eines Pods oder einer Bereitstellung.
- Referenziert als Umgebungsvariable in der Pod- oder Bereitstellungsspezifikation.
- Verwendet von Kubelet beim Pullen von Images aus privaten Registrierungen über den
imagePullSecret
-Schlüssel in der Pod-Spezifikation.
Sie können Geheimnisse wie jede andere Kubernetes-Ressource erstellen, indem Sie entweder eine YAML-Manifestdatei oder einen kubectl
-Befehl verwenden. Die Geheimnisspezifikation lautet wie folgt:
apiVersion: v1
kind: Secret
metadata:
name: secret-name
namespace: secret-namespace
type: Opaque
data:
key_name: "key value in base64 format"
Für ein Geheimnis mit dieser Spezifikation müssen Sie die Werte codieren, bevor Sie das Geheimnis erstellen. Wenn Sie ein Geheimnis mit dem Nur-Text-Wert erstellen und von Kubernetes automatisch codieren lassen, verwenden Sie stringData
anstelle von data
:
apiVersion: v1
kind: Secret
metadata:
name: secret-name
namespace: secret-namespace
type: Opaque
stringData:
key_name: "key value in plain format"
Die Anwendung empfängt die decodierte Geheimniszeichenfolge als übergebenen Wert anstelle der codierten.
Geheimnisaktualisierungen
Alle Geheimnisse, die in einem Pod als Volumes eingebunden sind, werden automatisch aktualisiert, sobald ihr Wert sich ändert. Diese Änderung tritt aufgrund der Kubelet-Konfiguration möglicherweise nicht sofort in Kraft, erfolgt aber automatisch, sodass der Pod nicht neu gestartet werden muss.
In Fällen, in denen Geheimnisse an Umgebungsvariablen gebunden sind, werden sie nicht automatisch aktualisiert, sodass der Pod neu gestartet werden muss, damit die Änderungen wirksam werden.