Erstellen und Speichern von Geheimnissen wie Passwörtern, OAuth-Tokens und SSH-Schlüsseln in Kubernetes

In Kubernetes können wir sensible Informationen wie Passwörter, OAuth-Tokens und ssh-Schlüssel mithilfe von Kubernetes Secrets speichern und verwalten. In Kubernetes können Secrets als Kubernetes-Objekte definiert werden. Es ist sicherer, Anmeldeinformationen in Kubernetes Secrets zu speichern als in Pods oder in Docker Images.

Es gibt mehrere Möglichkeiten, Secrets in Kubernetes zu erzeugen:

  1. Erstellen aus einer Textdatei
  2. Erzeugen aus einer yml-Datei

Sobald die Secrets verfügbar sind, können sie auf die folgenden Arten verwendet werden:

  1. Umgebungsvariable
  2. Volumen
  3. Verwendung des imagePullSecrets-Feldes

Um mehr über Kubernetes Secrets zu erfahren, klicken Sie hier.

In diesem Artikel werden wir Secrets mithilfe der .yml-Datei erstellen und auf sie im Pod als Umgebungsvariablen zugreifen.

Vorraussetzungen

  1. Kubernetes-Cluster mit mindestens 1 Worker-Node.
    Wenn Sie lernen möchten, wie Sie einen Kubernetes-Cluster erstellen, klicken Sie hier. Diese Anleitung wird Ihnen helfen, einen Kubernetes-Cluster mit 1 Master und 2 Nodes auf AWS Ubuntu 18l04 EC2-Instanzen zu erstellen.

Was wir tun werden

  1. Secrets erstellen

Secrets erstellen

Um neue Secrets in Kubernetes zu erstellen, verschlüsseln Sie sie zunächst wie unten gezeigt mit der base64-Kodierungsmethode.

Hier,

username=rahul und password=howtoforge123.

echo -n „rahul“ base64

echo -n „howtoforge123“ base64

verschlüsseln-credentials

Im obigen Screenshot ist zu erkennen, dass die Anmeldeinformationen verschlüsselt wurden.

Erstellen Sie eine geheime Definitionsdatei wie folgt, diese Datei enthält den base64-Wert der im obigen Schritt generierten Anmeldeinformationen.

vim mein-geheimnis.yml

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: cmFodWw=
  password: aG93dG9mb3JnZTEyMw==

meine-geheimnisse

Lassen Sie uns nun einen Pod erstellen, in dem auf diese Geheimnisse und zugegriffen werden kann.

Erstellen Sie eine neue Datei, die die Pod-Definition wie folgt enthalten wird.

vim mein-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: secrets-in-pod
spec:
  containers:
    - name: my-container
      image: redis
      env:
        - name: SECRET_USERNAME
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: username
        - name: SECRET_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: password
  restartPolicy: Never

my-pod

Lassen Sie uns mit dem folgenden Befehl Secrets erstellen.

kubectl create -f mein-geheimnis.yml

kubectl get secret grep mysecret

create-secret

Erstellen Sie nun einen Pod mit der folgenden Pod-Definition, um auf die zuvor erstellten Secrets mit grep zuzugreifen.

kubectl create -f mein-pod.yml

kubectl get pods grep secrets-in-pod

my-pod

Melden Sie sich mit dem folgenden Befehl am Pod an.

kubectl get pods grep geheimnisse-im-pod

kubectl exec -it secrets-in-pod /bin/bash

login-into-pod

Sobald Sie sich beim Pod angemeldet haben, kann mit dem folgenden Befehl auf die Geheimnisse als Umgebungsvariable zugegriffen werden.

echo $SECRET_USERNAME

echo $SECRET_PASSWORT

zugangsberechtigungen-in-pod

Im obigen Screenshot ist zu erkennen, dass die Geheimnisse als Umgebungsvariable verfügbar sind.

Um Details des geheimen Objekts zu sehen, führen Sie den folgenden Befehl aus.

kubectl get secret grep mysecret

kubectl get secret mysecret -o yaml

get-secret-details

Diese Secrets können auch über die Kommandozeile mit den folgenden Befehlen entschlüsselt werden.

kubectl get secrets/mysecret –template={{.data.username}} base64 -d

kubectl get secrets/mysecret –template={{.data.password}} base64 -d

Dekodiergeheimnisse

Im obigen Screenshot ist zu sehen, dass die Anmeldeinformationen aus den Secrets extrahiert und auf der Kommandozeile mit base64 entschlüsselt werden.

Fazit

In diesem Artikel haben wir die Schritte zum Erstellen und Speichern von Secrets in Kubernetes aus einer .yml-Datei gesehen. Wir haben versucht, auf diese Secrets in Pod als Umgebungsvariablen zuzugreifen. Wir haben auch den Befehl zum Entschlüsseln der Geheimnisse auf der Befehlszeile gesehen.

Das könnte dich auch interessieren …