Übung: Sicheres Speichern von Variablen in Geheimnissen
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.
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}
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
Erstellen Sie mit dem Befehl
az group create
eine Ressourcengruppe.az group create --location $LOCATION --name $RESOURCE_GROUP
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
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.Erstellen Sie eine DNS-Zone mit dem
az network dns zone create
-Befehl.az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
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
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.
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
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"
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>"
Speichern und schließen Sie die Datei.
Wenden Sie das Geheimnis mithilfe des
kubectl apply
-Befehls an.kubectl apply -f backend-secret.yaml
Ü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
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 dievalueFrom
- undsecretKeyRef
-Schlüssel verwendet werden. Die Reihenfolge dieser Schlüssel weist die Bereitstellung an, den Wert aus demkey
zu verwenden, der im Geheimnis vorhanden ist, das im Schlüsselname
definiert ist.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 ---
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
Ä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.Speichern und schließen Sie die Datei.
Wenden Sie die Änderungen mithilfe des
kubectl apply
-Befehls auf Ihren Cluster an.kubectl apply -f backend-application.yaml