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:
- Erstellen aus einer Textdatei
- Erzeugen aus einer yml-Datei
Sobald die Secrets verfügbar sind, können sie auf die folgenden Arten verwendet werden:
- Umgebungsvariable
- Volumen
- 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
- 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
- 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
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==
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
Lassen Sie uns mit dem folgenden Befehl Secrets erstellen.
kubectl create -f mein-geheimnis.yml
kubectl get secret grep mysecret
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
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
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
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
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
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.