Oefening: variabelen veilig opslaan in geheimen
Een resourcegroep en een AKS-cluster maken
Notitie
Deze oefening is optioneel. Als u deze oefening wilt voltooien, moet u een Azure-abonnement maken voordat u begint. Als u geen Azure-account hebt of als u er op dit moment geen wilt maken, kunt u de instructies doorlezen zodat u de informatie begrijpt die wordt gepresenteerd.
Maak omgevingsvariabelen voor uw resourcegroep, cluster, DNS-zone en locatie. Zorg ervoor dat u de VARIABELE LOCATION bijwerkt met de regio die het dichtst bij u ligt, bijvoorbeeld
eastus
.export RESOURCE_GROUP=rg-ship-manager export CLUSTER_NAME=ship-manager-cluster export ZONE_NAME=ship-$RANDOM.com export LOCATION={location}
Voer de volgende opdracht uit om de waarden van uw omgevingsvariabelen weer te geven en noteer deze voor later gebruik.
echo "RESOURCE_GROUP:" $RESOURCE_GROUP echo "CLUSTER_NAME:"$CLUSTER_NAME echo "ZONE_NAME:" $ZONE_NAME echo "LOCATION:"$LOCATION
Maak een resourcegroep met behulp van de opdracht
az group create
.az group create --location $LOCATION --name $RESOURCE_GROUP
Maak een AKS-cluster met behulp van de opdracht
az aks create
.az aks create \ -g $RESOURCE_GROUP \ -n $CLUSTER_NAME \ --location $LOCATION \ --node-count 1 \ --node-vm-size Standard_B2s \ --generate-ssh-keys
Schakel de add-on voor toepassingsroutering in met dit commando.
az aks approuting enable -g $RESOURCE_GROUP -n $CLUSTER_NAME
Notitie
Als u een bericht ziet waarin u wordt gevraagd de aks-preview-extensie te installeren, voert u
Y
in om deze te installeren en door te gaan.Maak een DNS-zone met behulp van de opdracht
az network dns zone create
.az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
Haal de id van uw DNS-zone op en gebruik deze als onderdeel van de opdracht om de zone toe te voegen aan uw cluster voor app-routering.
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
Haal de inloggegevens voor uw cluster op met de commando
az aks get-credentials
.az aks get-credentials -n $CLUSTER_NAME -g $RESOURCE_GROUP
Een geheim maken
Notitie
In de toepassingsdocumentatieziet u dat deze toepassing uit twee delen bestaat: de front-end en de back-end. Alleen de back-end moet een geheim gebruiken, omdat deze de MongoDB-verbindingsreeks als een omgevingsvariabele heeft.
Implementeer een MongoDB-database ter ondersteuning van de toepassing met behulp van de opdracht
az cosmosdb create
.export DATABASE_NAME=contoso-ship-manager-$RANDOM && \ az cosmosdb create \ -n $DATABASE_NAME \ -g $RESOURCE_GROUP \ --kind MongoDB
Zodra de database is gemaakt, haalt u de verbindingsreeks op met behulp van de opdracht
az cosmosdb keys list
en kopieert u de uitvoerwaarde.az cosmosdb keys list \ --type connection-strings \ -g $RESOURCE_GROUP \ -n $DATABASE_NAME \ -o tsv \ --query "connectionStrings[0].connectionString"
Maak een nieuw YAML-bestand met de naam
backend-secret.yaml
en plak de volgende code om de geheime specificatie te maken. Vervang de tijdelijke aanduidingstekenreeks door de verbindingsreeks uit de vorige uitvoer.apiVersion: v1 kind: Secret metadata: name: ship-manager-database namespace: default type: Opaque stringData: database_mongodb_uri: "<paste the connection string here>"
Sla het bestand op en sluit het.
Pas het geheim toe met behulp van de opdracht
kubectl apply
.kubectl apply -f backend-secret.yaml
Controleer het resultaat door een query uit te voeren op het geheim met behulp van de opdracht
kubectl get secret
.kubectl get secret ship-manager-database
U zou een uitvoer moeten krijgen die vergelijkbaar is met het volgende voorbeeld:
NAME TYPE DATA AGE ship-manager-database Opaque 1 5s
De toepassing maken
Maak een nieuw YAML-bestand met de naam
backend-application.yaml
en plak de volgende code om de implementatiespecificatie te maken.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
U ziet dat we in de sectie
env
devalueFrom
en desecretKeyRef
sleutels gebruiken. De volgorde van deze sleutels laat de implementatie de waarde van dekey
gebruiken die aanwezig is in het geheim dat is gedefinieerd in dename
sleutel.Voeg drie streepjes toe onder de laatste regel in het
backend-application.yaml
-bestand om de volgende sectie te scheiden.# 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 ---
Plak onder de drie streepjes de volgende code om de ingress-specificatie te maken.
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
Wijzig de DNS-zone in de
host:
zodat deze overeenkomt met de naam van uw DNS-zone. Gebruik de waarde van de ZONE_NAME variabele die u eerder hebt gemaakt.Sla het bestand op en sluit het.
Pas de wijzigingen toe op uw cluster met behulp van de opdracht
kubectl apply
.kubectl apply -f backend-application.yaml