Auf dieser Seite werden das Secret-Objekt in Kubernetes und seine Verwendung in Google Kubernetes Engine (GKE) beschrieben.
Was ist ein Secret?
Secrets sind sichere Objekte, die vertrauliche Daten wie Passwörter, OAuth-Token und SSH-Schlüssel in Ihren Clustern speichern. Das Speichern sensibler Daten in Secrets ist sicherer als ConfigMaps im Klartext oder in Pod-Spezifikationen. Mithilfe von Secrets können Sie steuern, wie sensible Daten verwendet werden, und das Risiko verringern, dass die Daten nicht autorisierten Nutzern zugänglich gemacht werden.
Mit einem von Ihnen in Cloud KMS verwalteten Schlüssel können Sie Secrets auch auf der Anwendungsebene verschlüsseln. Weitere Informationen finden Sie unter Verschlüsselung von Secrets auf Anwendungsebene.
Secret erstellen
Sie erstellen ein Secret mit kubectl create secret
:
kubectl create secret type name data
Dabei gilt:
type kann einer der folgenden Werte sein:
generic
: Erstellt ein Secret aus einer lokalen Datei, einem Verzeichnis oder einem Literalwert.docker-registry
: Erstellt eindockercfg
-Secret zur Verwendung mit einer Docker-Registry. Wird zur Authentifizierung bei Docker-Registrys verwendet.tls
: Erstellt ein TLS-Secret aus dem angegebenen Schlüsselpaar mit öffentlichem und privatem Schlüssel. Das Schlüsselpaar mit öffentlichem und privatem Schlüssel muss vorher vorhanden sein. Das Zertifikat für den öffentlichen Schlüssel muss PEM-codiert sein und mit dem angegebenen privaten Schlüssel übereinstimmen.
Für die meisten Secrets verwenden Sie den Typ
generic
.name ist der Name des Secrets, das Sie erstellen.
data kann Folgendes sein:
- Ein Pfad zu einem Verzeichnis, das eine oder mehrere Konfigurationsdateien enthält und mit dem Flag
--from-file
oder--from-env-file
angegeben wird - Schlüssel/Wert-Paare, die jeweils mit Flags vom Typ
--from-literal
angegeben werden
- Ein Pfad zu einem Verzeichnis, das eine oder mehrere Konfigurationsdateien enthält und mit dem Flag
Weitere Informationen zu kubectl create
finden Sie in der Referenzdokumentation.
Alternativ können Sie zum Erstellen eines Secrets ein Secret-Objekt in einer YAML-Manifestdatei definieren und mithilfe des folgenden Befehls bereitstellen:
kubectl create -f file-name.yaml
Ein Beispiel finden Sie unter Anmeldedaten mit Secrets sicher verteilen.
Aus Dateien
Verwenden Sie --from-file
oder --from-env-file
, um ein Secret aus einer oder mehreren Dateien zu erstellen. Die Datei muss im Klartextformat vorliegen, doch die Dateierweiterung spielt keine Rolle.
--from-file
Wenn Sie das Secret mit --from-file
erstellen, entspricht der Wert des Secrets dem gesamten Inhalt der Datei. Wenn der Wert des Secrets mehrere Schlüssel/Wert-Paare enthält, verwenden Sie stattdessen --from-env-file
.
Sie können eine einzelne Datei oder mehrere Dateien übergeben:
kubectl create secret type name --from-file /path/to/file --from-file /path/to/file2
Sie können auch ein Verzeichnis übergeben, das mehrere Dateien enthält:
kubectl create secret type name --from-file /path/to/directory
Mit dem folgenden Befehl wird beispielsweise aus den zwei Dateien username.txt
und password.txt
ein Secret mit dem Namen credentials
erstellt. Als Schlüssel werden username.txt
oder password.txt
festgelegt:
kubectl create secret generic credentials --from-file ./username.txt --from-file ./password.txt
Die Secret-Werte in Kubernetes sind base64-codiert.
Durch Ausführung von kubectl get secret credentials -o yaml
wird die folgende Ausgabe zurückgegeben:
apiVersion: v1 data: password.txt: MTIzNAo= username.txt: YWRtaW4K kind: Secret metadata: creationTimestamp: ... name: credentials namespace: default resourceVersion: "2011810" selfLink: /api/v1/namespaces/default/secrets/credentials uid: ... type: Opaque
Standardmäßig ist der Schlüssel der Dateiname. Sie können den Schlüssel mithilfe der erweiterten Syntax für --from-file
überschreiben:
kubectl create secret type name --from-file=key=/path/to/directory
Im folgenden Beispiel wird aus den zwei Dateien "username.txt" und "password.txt" ein Secret namens "credentials" erstellt und die Schlüssel werden auf username
und password
gesetzt, statt die Dateinamen zu verwenden:
kubectl create secret generic credentials --from-file=username=./username.txt --from-file=password=./password.txt
--from-env-file
Wenn Sie mehrere Schlüssel/Wert-Paare in ein einzelnes Secret laden möchten, speichern Sie die Schlüssel/Wert-Paare in einer oder mehreren Klartextdateien und laden Sie sie mit --from-env-file
statt mit --from-file
. Zum Laden mehrerer Dateien geben Sie das Flag einfach mehrmals an. Es gelten dieselben Einschränkungen wie bei --from-file
.
Mit dem folgenden Befehl wird beispielsweise aus einer einzigen Datei namens credentials.txt
, die mehrere Schlüssel/Wert-Paare enthält, ein Secret namens credentials
erstellt:
# Each of these key-value pairs is loaded into the Secret username=jane password=d7xnNss7EGCFZusG
Die Secret-Werte in Kubernetes sind base64-codiert.
kubectl create secret generic credentials --from-env-file ./credentials.txt
Durch Ausführung von kubectl get secret credentials -o yaml
wird die folgende Ausgabe zurückgegeben:
apiVersion: v1
data:
password: ZDd4bk5zczdFR0NGWnVzRw==
username: amFuZQ==
kind: Secret
metadata:
creationTimestamp: 2019-06-04T15:39:27Z
name: credentials
namespace: default
resourceVersion: "14507319"
selfLink: /api/v1/namespaces/default/secrets/credentials
uid: efce376b-86de-11e9-9742-42010a80022f
type: Opaque
Beschränkungen
Nicht reguläre Dateien wie Symlinks, Geräte und Verbindungen werden von kubectl ignoriert.
Unterverzeichnisse werden ebenfalls ignoriert. kubectl create secret
durchsucht keine Unterverzeichnisse.
Aus Literalwerten
Verwenden Sie --from-literal
, um ein Secret aus Literalwerten zu erstellen.
Mit dem folgenden Befehl wird beispielsweise ein generisches Secret namens literal-token
mit zwei Schlüssel/Wert-Paaren erstellt:
kubectl create secret generic literal-token --from-literal user=admin --from-literal password=1234
Sie geben --from-literal
für jedes Schlüssel/Wert-Paar an. Die Werte werden automatisch Base64-codiert.
Die Ausführung von kubectl get secret literal-token -o yaml
gibt die folgende Ausgabe zurück.
apiVersion: v1 data: password: MTIzNA== user: YWRtaW4= kind: Secret metadata: creationTimestamp: ... name: literal-token namespace: default resourceVersion: "2012831" selfLink: /api/v1/namespaces/default/secrets/literal-token uid: ... type: Opaque
Beachten Sie in der vorherigen Ausgabe, dass password
und user
base64-codiert sind.
Die base64-Codierung ermöglicht die Verarbeitung der Informationen durch Anwendungen und Dienste, die bestimmte Zeichen nicht lesen können. Die base64-Codierung bietet keine Sicherheit.
Secret verwenden
Zum Verwenden eines Secrets für Ihre Arbeitslasten können Sie Umgebungsvariablen angeben, die auf die Werte des Secret verweisen oder ein Volume bereitstellen, das das Secret enthält.
Weitere Informationen zur Verwendung von Secrets finden Sie unter Secrets verwenden.