Übung: Sicheres Speichern von Variablen in Geheimnissen

Abgeschlossen

Erstellen einer Ressourcengruppe und eines AKS-Clusters

Hinweis

Diese Übung ist optional. Wenn Sie die Schritte in dieser Übung ausführen möchten, müssen Sie zuvor ein Azure-Abonnement erstellen. Wenn Sie kein Azure-Konto besitzen oder gerade kein Konto erstellen möchten, können Sie die Anweisungen durchlesen und die dargelegten Informationen nachvollziehen.

  1. Erstellen Sie Umgebungsvariablen für Ihre Ressourcengruppe, Ihren Cluster, Ihre DNS-Zone und Ihren Standort. Stellen Sie sicher, dass Sie die Variable LOCATION mit der Region aktualisieren, die Ihnen am nächsten liegt, z. B. eastus.

    export RESOURCE_GROUP=rg-ship-manager
    export CLUSTER_NAME=ship-manager-cluster
    export ZONE_NAME=ship-$RANDOM.com
    export LOCATION={location}
    
  2. Führen Sie den folgenden Befehl aus, um die Werte Ihrer Umgebungsvariablen anzuzeigen und notieren Sie diese zur späteren Verwendung.

    echo "RESOURCE_GROUP:" $RESOURCE_GROUP
    echo "CLUSTER_NAME:"$CLUSTER_NAME
    echo "ZONE_NAME:" $ZONE_NAME
    echo "LOCATION:"$LOCATION
    
  3. Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe.

    az group create --location $LOCATION --name $RESOURCE_GROUP
    
  4. Erstellen Sie mit dem Befehl az aks create einen AKS-Cluster.

    az aks create \
     -g $RESOURCE_GROUP \
     -n $CLUSTER_NAME \
     --location $LOCATION \
     --node-count 1 \
     --node-vm-size Standard_B2s \
     --generate-ssh-keys
    
  5. Aktivieren Sie das Anwendungsrouting-Add-On mit dem folgenden Befehl.

    az aks approuting enable -g $RESOURCE_GROUP -n $CLUSTER_NAME
    

    Hinweis

    Wenn eine Meldung angezeigt wird, in der Sie aufgefordert werden, die Erweiterung aks-preview zu installieren, geben Sie Y ein, um sie zu installieren und den Vorgang fortzusetzen.

  6. Erstellen Sie eine DNS-Zone mit dem az network dns zone create-Befehl.

    az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
    
  7. Rufen Sie die ID Ihrer DNS-Zone ab und verwenden Sie diese als Teil des Befehls, um die Zone für das App-Routing zu Ihrem Cluster hinzuzufügen.

    ZONEID=$(az network dns zone show -g $RESOURCE_GROUP -n $ZONE_NAME --query "id" --output tsv)
    az aks approuting zone add -g $RESOURCE_GROUP -n $CLUSTER_NAME --ids=${ZONEID} --attach-zones
    
  8. Rufen Sie die Anmeldeinformationen für Ihren Cluster mithilfe des az aks get-credentials-Befehls ab.

    az aks get-credentials -n $CLUSTER_NAME -g $RESOURCE_GROUP
    

Geheimnis erstellen

Hinweis

In der Anwendungsdokumentation können Sie sehen, dass diese Anwendung zwei Teile umfasst: das Front-End und das Back-End. Nur das Back-End muss ein Geheimnis verwenden, da es die MongoDB-Verbindungszeichenfolge als Umgebungsvariable hat.

  1. Stellen Sie eine MongoDB-Datenbank mithilfe des az cosmosdb create-Befehls bereit, um die Anwendung zu unterstützen.

    export DATABASE_NAME=contoso-ship-manager-$RANDOM && \
    az cosmosdb create \
     -n $DATABASE_NAME \
     -g $RESOURCE_GROUP \
     --kind MongoDB
    
  2. Sobald die Datenbank erstellt wurde, rufen Sie die Verbindungszeichenfolge mithilfe des az cosmosdb keys list-Befehls ab und kopieren den Ausgabewert.

    az cosmosdb keys list \
      --type connection-strings \
      -g $RESOURCE_GROUP \
      -n $DATABASE_NAME \
      -o tsv \
      --query "connectionStrings[0].connectionString"
    
  3. Erstellen Sie eine neue YAML-Datei namens backend-secret.yaml, und fügen Sie den folgenden Code ein, um die Geheimnisspezifikation zu erstellen. Vergewissern Sie sich, dass Sie die Platzhalterzeichenfolge durch die Verbindungszeichenfolge aus der vorherigen Ausgabe ersetzen.

    apiVersion: v1
    kind: Secret
    metadata:
      name: ship-manager-database
      namespace: default
    type: Opaque
    stringData:
      database_mongodb_uri: "<paste the connection string here>"
    
  4. Speichern und schließen Sie die Datei.

  5. Wenden Sie das Geheimnis mithilfe des kubectl apply-Befehls an.

    kubectl apply -f backend-secret.yaml
    
  6. Überprüfen Sie das Ergebnis, indem Sie das Geheimnis mithilfe des kubectl get secret-Befehls abfragen.

    kubectl get secret ship-manager-database
    

    Sie sollten eine Ausgabe ähnlich dem folgenden Beispiel erhalten:

    NAME                    TYPE     DATA   AGE
    ship-manager-database   Opaque   1      5s
    

Erstellen der Anwendung

  1. Erstellen Sie eine neue YAML-Datei namens backend-application.yaml, und fügen Sie den folgenden Code ein, um die Bereitstellungsspezifikation zu erstellen.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ship-manager-backend
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ship-manager-backend
      template:
        metadata:
          labels:
            app: ship-manager-backend
        spec:
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-ship-manager:backend
              name: ship-manager-backend
              ports:
                - containerPort: 3000
                  name: http
              env:
                - name: DATABASE_MONGODB_URI
                  valueFrom:
                    secretKeyRef:
                      key: database_mongodb_uri
                      name: ship-manager-database
                - name: DATABASE_MONGODB_DBNAME
                  value: ship_manager
    

    Beachten Sie, dass im env-Abschnitt die valueFrom- und secretKeyRef-Schlüssel verwendet werden. Die Reihenfolge dieser Schlüssel weist die Bereitstellung an, den Wert aus dem key zu verwenden, der im Geheimnis vorhanden ist, das im Schlüssel name definiert ist.

  2. Fügen Sie drei Gedankenstriche unterhalb der letzten Zeile in der backend-application.yaml-Datei hinzu, um den nächsten Abschnitt zu trennen.

    # Previous lines from the deployment
    value: ship_manager
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ship-manager-backend
      namespace: default
    spec:
      selector:
        app: ship-manager-backend
      ports:
        - name: http
          port: 80
          targetPort: 3000
    ---
    
  3. Fügen Sie unter den Gedankenstrichen den folgenden Code ein, um die Eingangsspezifikation zu erstellen.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ship-manager-backend
      namespace: default
      annotations:
        spec.ingressClassName: webapprouting.kubernetes.azure.com
    spec:
      rules:
        - host: ship-manager-backend.<paste the ZONE_NAME here>
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: ship-manager-backend
                    port:
                      name: http
    
  4. Ändern Sie die DNS-Zone in host: so, dass sie dem Namen Ihrer DNS-Zone entspricht. Verwenden Sie den Wert der zuvor erstellten ZONE_NAME-Variablen.

  5. Speichern und schließen Sie die Datei.

  6. Wenden Sie die Änderungen mithilfe des kubectl apply-Befehls auf Ihren Cluster an.

    kubectl apply -f backend-application.yaml