Kubernetes Secrets Management

Kubernetes Secrets Management
Die Kubernetes -Umgebung erfordert wie viele andere Computersysteme die Verwendung sensibler Daten. Geheimnisse beziehen sich auf die sensiblen Daten einer Gruppe (wie Passwörter, SSH -Tasten und Sicherheitstoken). Wir werden uns die Fähigkeiten von Kubernetes und anderen Geheimverwaltungssystemen in diesem Beitrag ansehen und die Erstellung und Verwaltung von Geheimnissen in Ihrer Kubernetes -Umgebung erstellen und verwalten.

Was sind Geheimnisse in Kubernetes?

Ein Geheimnis ist ein privates Informationen wie ein Passwort, ein Schlüssel oder ein Token. Solche Informationen können auch in einem Containerbild oder einer POD -Spezifikation festgelegt werden. Wenn Sie ein Geheimnis einsetzen, müssen Sie keine geheimen Daten in Ihren Anwendungscode aufnehmen.

Da Geheimnisse unabhängig von den Pods, die sie verwenden, installiert werden können, kann es möglicherweise weniger bedroht, dass das Geheimnis (und seine Informationen) im Workflow der Erzeugung, Untersuchung und Änderung von Pods entdeckt wird. Kubernetes und die Apps, die für Ihr Cluster ausgeführt werden.

Arten von Geheimnissen

Kubernetes bietet viele integrierte Typen für einige gemeinsame Nutzungsszenarien. Die durch Kubernetes durchgeführten Validierungen und die Einschränkungen unterscheiden sich zwischen diesen Kategorien.

Undurchsichtige Geheimnisse

Der Standard -Geheimtyp wird verwendet, wenn keine geheime Konfigurationsdatei vorliegt. Verwenden Sie beim Erstellen eines Geheimnisses von Kubectl den generischen Unterbefehl zur Angabe dieses Typs.

Service -Account Token Secrets

Dieses Geheimnis speichert ein Token mit einem Servicekonto. Sie müssen die Kubernetes einstellen.IO/Service-Account.Name Annotation zu einem aktuellen Service -Kontonamen während der Verwendung dieses geheimen Typs.

Docker -Konfigurationsgeheimnisse

Dieser Typ dient zur Speicherung eines serialisierten /.DOCKERCFG -Datei. Es ist das herkömmliche Format für die Konfiguration der Befehlszeile der Docker. Stellen Sie zunächst sicher, dass das Feld der geheimen Daten a hat.Dockercfg -Schlüssel, und sein Wert ist der Inhalt des a /.DockCFG -Datei, die im Basis64 -Format codiert werden, wenn Sie diesen geheimen Typ verwenden.

Grundlegende Authentifizierung Geheimnis

Diese Art wird zur Speicherung grundlegender Authentifizierungsanmeldeinformationen verwendet. Bei der Verwendung dieses geheimen Typs muss einer der beiden Schlüssel (Benutzername und Passwort) im Datenfeld des Geheimnisses vorhanden sein:

Die Werte dieser Schlüssel sind beide base64 codierte Zeichenfolgen. Sie können die StringData für die geheime Generation verwenden, wenn Sie klare Textinhalte liefern möchten.

SSH -Authentifizierungsgeheimnisse

Dies wird verwendet, um die Authentifizierungsdaten von SSH zu bewältigen. Die SSH-Anmeldeinformationen müssen als SSH-PrivateKey-Schlüsselwertpaar akzeptiert werden, das das Thema Daten (oder StringData) bei der Durchsetzung dieses geheimen Typs einsetzt.

TLS -Geheimnisse

Kubernetes hat einen integrierten geheimen Kubernetes.IO/TLS, die ein Zertifikat und seinen entsprechenden Schlüssel speichern können, das üblicherweise für TLS verwendet wird. Diese Informationen werden mit der TLS -Beendigung verwendet. Es könnte jedoch zusätzlich mit unterschiedlichen Vermögenswerten oder ohne Verzögerung durch eine Arbeitsbelastung eingesetzt werden. Wenn diese Art von Geheimnis auferlegt wird, haben die TLS.Schlüssel und TLS.CRT -Tasten sollten in dem Bereich der Daten (oder StringData) der geheimen Konfiguration geliefert werden, obwohl der API -Server die Werte jetzt nicht mehr einfach für jeden Schlüssel untersucht.

Bootstrap -Token -Geheimnisse

Diese Form des Geheimnisses kann erstellt werden, indem Sie zum Bootstrap gehen.Kubernetes.IO/Token und Auswahl des geheimen Typs. Diese Art von Geheimnis zielt darauf ab, Token zu speichern. Diese Token werden hauptsächlich während der Knoten -Bootstrap -Prozedur verwendet. Es verfolgt die Signature-Token für bekannte Konfigurationen.

Ein Bootstrap-Token-Geheimnis wird häufig unter dem Kube-System-Namespace erstellt und mit dem Namen Bootstrap-Token-Token-ID>, wo Token-ID> eine Sechs-Charakter-Zeichenfolge ist, die die Token-ID darstellt.

So erstellen Sie ein Geheimnis in Kubernetes?

Ein Geheimnis kann verwendet werden, um Benutzeranmeldeinformationen zu halten. Pods verwenden diese Anmeldeinformationen, um auf eine Datenbank zuzugreifen. Eine ID (Benutzername) plus Passwort, z. B. eine Datenbankverbindungszeichenfolge erstellen. Sie können den Benutzernamen in speichern./Nutzername.TXT und das Passwort in./Passwort.txt auf Ihrem lokalen PC.

$ echo -n 'Alex'> ./Nutzername.txt
$ echo -n '01trfg02'> ./Passwort.txt

Das folgende Code zeigt, wie Sie mit dem Befehl create ein Geheimnis erstellen können.

$ kubectl erstellen geheime generische Geheimungs-Mbps \
--from file =./Nutzername.txt \
--from file =./Passwort.txt

Im Folgenden wird das Geheimnis (mit dem Namen Secret-Mbps) erfolgreich erstellt unten.

Wie oben erwähnt, stellt der Parameter -n in den Befehlen sicher. Dies ist von Bedeutung, da das zusätzliche neue Zeilenzeichen codiert wird, wenn Kubectl eine Datei liest und sie in eine Base64 -String umwandelt.

Wie man ein Geheimnis bearbeitet?

Der folgende Befehl wird verwendet, um Änderungen in einem vorhandenen Geheimnis vorzunehmen:

$ kubectl bearbeiten Secret Secret-Mbps

Dadurch wird der Editor mit der Standardkonfiguration geöffnet. Dadurch können Sie die base64 -codierten geheimen Werte des Datenfeldes anpassen:

So überprüfen Sie, ob ein Geheimnis existiert?

Um ein Geheimnis zu überprüfen, geben Sie den Befehl Get Secret ein.

$ kubectl Holen Sie sich Geheimnisse

Der angehängte Screenshot zeigt die Details des angegebenen Geheimnisses an.

Wie man das Geheimnis dekodieren?

Um das Geheimnis zu dekodieren, können Sie den folgenden Befehl verwenden.

$ kubectl Get Secret Secret -Mbps -o jsonPath = '.Daten'

Im Folgenden können Sie den Ausgangs -Screenshot sehen.

Sie können jetzt die Kennwortdaten wie folgt dekodieren:

$ echo 'mwyyzdflmmu2n2rm' | Base64 -Dekodie

Hier ist das Ergebnis.

Sie können den Befehl verwenden (wie Sie unten sehen können), wenn Sie keinen geheimen codierten Wert in Ihrer Shell -Historie speichern möchten:

$ kubectl Get Secret Secret -Mbps -o jsonPath = '.Daten.Passwort '| Base64 -Decode

Dieser Befehl erzeugt die gleichen Ergebnisse wie der vorherige.

So löschen Sie das Geheimnis?

Um das Geheimnis zu löschen, können Sie den Befehl Löschen verwenden und den genauen Namen des Geheimnisses erwähnen.

$ kubectl löschen geheim geheime Mbps

Hier können Sie feststellen, dass das angegebene Geheimnis erfolgreich gelöscht wird.

Abschluss:

Geheimnisse sind digitale Identitäten, mit denen Benutzer ihre Identitäten überprüfen und auf privilegierte Konten, Apps und Dienste zugreifen können, indem sie ihre Identitäten authentifizieren. In diesem Artikel haben wir Kubernetes Secrets Management im Detail erwähnt.