Konfigurieren von Apps mit Secrets

KubernetesBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie Kubernetes Secrets verwenden, um sensible Informationen wie Passwörter, API-Schlüssel und andere vertrauliche Daten sicher zu verwalten. Sie erstellen ein Secret, verwenden es in Ihrer Anwendung und überprüfen, ob die Anwendung korrekt konfiguriert ist. Jeder Schritt baut auf dem vorherigen auf, also stellen Sie sicher, dass Sie sorgfältig mitarbeiten.

Den Minikube Cluster starten

Bevor Sie Ressourcen erstellen, benötigen Sie einen laufenden Kubernetes-Cluster. Minikube ist eine leichtgewichtige Kubernetes-Umgebung, die auf Ihrem lokalen Rechner läuft.

  1. Navigieren Sie zu Ihrem Arbeitsverzeichnis:

    Öffnen Sie das Terminal und navigieren Sie zum Standard-Projektordner:

    cd /home/labex/project
    
  2. Starten Sie Minikube:

    Starten Sie Minikube, um einen Kubernetes-Cluster zu initialisieren:

    minikube start
    
    • Dieser Befehl richtet einen Single-Node-Kubernetes-Cluster auf Ihrem lokalen Rechner ein.
    • Minikube kann je nach Leistung Ihres Systems einige Minuten zum Starten benötigen.
  3. Überprüfen Sie, ob Minikube läuft:

    Überprüfen Sie den Status des Minikube-Clusters:

    minikube status
    
    • Achten Sie auf Komponenten wie kubelet und apiserver, die als Running aufgeführt sind.
    • Wenn der Cluster nicht läuft, führen Sie minikube start erneut aus.

Wenn Sie Probleme beim Starten von Minikube haben, verwenden Sie minikube delete, um die Umgebung bei Bedarf zurückzusetzen.

Ein Secret erstellen

In diesem Schritt erstellen Sie ein Kubernetes Secret, das ein Datenbankpasswort enthält.

Erstellen Sie eine Datei namens my-secret.yaml im Verzeichnis /home/labex/project mit folgendem Inhalt:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  password: dXNlcm5hbWU6cGFzc3dvcmQ=

In dieser Datei geben wir den Namen des Secrets (my-secret), den Typ der enthaltenen Daten (Opaque) und die eigentlichen Daten im Base64-codierten Format an.

Wenden Sie das Secret auf Ihren Cluster an, indem Sie den folgenden Befehl ausführen:

kubectl apply -f my-secret.yaml

Überprüfen Sie, ob das Secret erstellt wurde, indem Sie den folgenden Befehl ausführen:

kubectl get secrets

Sie sollten das Secret my-secret aufgelistet sehen.

Verwenden des Secrets in Ihrer Anwendung

In diesem Schritt ändern Sie Ihre Anwendung, um das Secret my-secret zur Abfrage des Datenbankpassworts zu verwenden.

Erstellen Sie eine Datei namens my-app.yaml im Verzeichnis /home/labex/project mit folgendem Inhalt:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: nginx:latest
          env:
            - name: DATABASE_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: my-secret
                  key: password

In dieser Datei geben wir den Namen des Deployments (my-app), das zu verwendende Image (my-image) und die festzulegende Umgebungsvariable (DATABASE_PASSWORD) an. Wir verwenden auch eine secretKeyRef, um den Schlüssel password aus dem Secret my-secret abzurufen.

Wenden Sie das Deployment auf Ihren Cluster an, indem Sie den folgenden Befehl ausführen:

kubectl apply -f my-app.yaml

Überprüfen Sie, ob das Deployment erstellt wurde, indem Sie den folgenden Befehl ausführen:

kubectl get deployments

Sie sollten das Deployment my-app aufgelistet sehen.

Konfiguration überprüfen

In diesem Schritt überprüfen Sie, ob Ihre Anwendung korrekt mit dem Datenbankpasswort aus dem Secret my-secret konfiguriert wurde.

Ermitteln Sie den Namen des Pods, der Ihre Anwendung ausführt, indem Sie den folgenden Befehl ausführen:

kubectl get pods -l app=my-app

Sie sollten einen einzelnen Pod sehen, der Ihre Anwendung ausführt. Notieren Sie sich den Namen des Pods.

Führen Sie als Nächstes den folgenden Befehl aus, um eine Shell-Sitzung im Container zu öffnen, der Ihre Anwendung ausführt:

kubectl exec -it pod-name -- /bin/sh

Ersetzen Sie <pod-name> durch den tatsächlichen Namen des Pods, den Sie sich zuvor notiert haben.

Sobald Sie sich in der Shell-Sitzung befinden, führen Sie den folgenden Befehl aus, um den Wert der Umgebungsvariablen DATABASE_PASSWORD auszugeben:

echo $DATABASE_PASSWORD

Sie sollten das Datenbankpasswort sehen, das aus dem Secret my-secret abgerufen wurde.

Secret als Volume in einem Pod mounten

Nachdem wir das Secret erstellt haben, können wir es als Volume in einem Pod einbinden. Wir erstellen einen einfachen Pod, der den Secret-Wert aus dem eingebundenen Volume liest und ihn auf der Konsole ausgibt.

Erstellen Sie eine Datei namens pod.yaml im Verzeichnis /home/labex/project mit folgendem Inhalt:

apiVersion: v1
kind: Pod
metadata:
  name: secret-pod
spec:
  containers:
    - name: secret-container
      image: nginx
      volumeMounts:
        - name: secret-volume
          mountPath: /etc/secret-volume
  volumes:
    - name: secret-volume
      secret:
        secretName: my-secret

Wenden Sie die Pod-Konfiguration an:

kubectl apply -f pod.yaml

Überprüfen des Secrets als Volume in einem Pod

In diesem Schritt überprüfen Sie, ob Ihre Anwendung korrekt mit dem Datenbankpasswort aus dem Secret my-secret konfiguriert ist.

Führen Sie zunächst den folgenden Befehl aus, um eine Shell-Sitzung in dem Container zu öffnen, in dem Ihre Anwendung ausgeführt wird:

kubectl exec -it secret-pod -- sh

Sobald Sie sich in der Shell-Sitzung befinden, führen Sie den folgenden Befehl aus, um den Wert auszugeben:

cat /etc/secret-volume/password

Die Ausgabe sollte der Wert des Secrets sein.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man Kubernetes Secrets zur Speicherung sensibler Informationen verwendet und wie man sie in einem Pod einsetzt. Secrets bieten eine sichere Möglichkeit, sensible Informationen zu verwalten und sollten nach Möglichkeit verwendet werden, um zu vermeiden, dass Secrets im Klartext offengelegt werden.