In Kubernetes können wir vertrauliche Informationen wie Passwörter, OAuth-Token und SSH-Schlüssel mithilfe von Kubernetes Secrets speichern und verwalten. In Kubernetes können Geheimnisse als Kubernetes-Objekte definiert werden. Es ist sicherer, Anmeldeinformationen in Kubernetes Secrets als in Pods oder Docker-Images zu speichern.
Es gibt mehrere Möglichkeiten, Geheimnisse in Kubernetes zu generieren:
- Erstellung aus einer Textdatei
- Erstellen aus einer yml-Datei
Sobald die Geheimnisse verfügbar sind, können sie auf folgende Weise verwendet werden:
- Umgebungsvariable
- Lautstärke
- Das imagePullSecrets-Feld verwenden
Um mehr über Kubernetes Secrets zu erfahren, klicken Sie hier.
In diesem Artikel erstellen wir Geheimnisse mithilfe einer .yml-Datei und greifen im Pod als Umgebungsvariablen darauf zu.
Voraussetzungen
- Kubernetes-Cluster mit mindestens einem Worker-Knoten.
Wenn Sie erfahren möchten, wie Sie einen Kubernetes-Cluster erstellen, klicken Sie hier. Dieser Leitfaden hilft Ihnen beim Erstellen eines Kubernetes-Clusters mit 1 Master und 2 Knoten auf AWS Ubuntu 18l04 EC2-Instances.
Was wir tun werden
- Geheimnisse erstellen
Geheimnisse erstellen
Um neue Geheimnisse in Kubernetes zu erstellen, verschlüsseln Sie sie zuerst wie unten gezeigt mit der base64-Codierungsmethode.
Hier
username=rahul und password=howtoforge123.
echo -n "rahul" | base64
echo -n "howtoforge123" | base64
Im obigen Screenshot ist zu sehen, dass die Zugangsdaten verschlüsselt wurden.
Erstellen Sie wie folgt eine geheime Definitionsdatei, diese Datei enthält den base64-Wert der im obigen Schritt generierten Anmeldeinformationen.
vim my-secret.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 zugegriffen werden kann.
Erstellen Sie eine neue Datei, die die Pod-Definition wie folgt enthält.
vim my-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
Erstellen wir Geheimnisse mit dem folgenden Befehl.
kubectl create -f my-secret.yml
kubectl geheim erhalten | grep mysecret
Erstellen Sie jetzt einen Pod mit der folgenden Pod-Definition, um auf die zuvor erstellten Geheimnisse zuzugreifen.
kubectl create -f mein-pod.yml
kubectl get pods | grep Geheimnisse im Pod
Melden Sie sich mit dem folgenden Befehl beim Pod an.
kubectl erhält Pods | grep Geheimnisse im Pod
kubectl exec -it Geheimnisse im Pod /bin/bash
Sobald Sie sich beim Pod anmelden, können Sie mit dem folgenden Befehl auf die Geheimnisse als Umgebungsvariable zugreifen.
echo $SECRET_USERNAME
echo $SECRET_PASSWORD
Im obigen Screenshot ist zu sehen, dass die Secrets als Umgebungsvariablen verfügbar sind.
Um Details des geheimen Objekts anzuzeigen, führen Sie den folgenden Befehl aus.
kubectl geheim erhalten | grep mysecret
kubectl get secret mysecret -o yaml
Dieses Geheimnis kann auch von der 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 Anmeldedaten aus den Secrets extrahiert und auf der Befehlszeile mit base64 entschlüsselt werden.
Fazit
In diesem Artikel haben wir die Schritte zum Erstellen und Speichern von Geheimnissen in Kubernetes aus einer .yml-Datei gesehen. Wir haben versucht, auf diese Geheimnisse im Pod als Umgebungsvariablen zuzugreifen. Wir haben auch den Befehl zum Entschlüsseln der Geheimnisse auf der Befehlszeile gesehen.