Oefening: variabelen veilig opslaan in geheimen

Voltooid

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.

  1. 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}
    
  2. 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
    
  3. Maak een resourcegroep met behulp van de opdracht az group create.

    az group create --location $LOCATION --name $RESOURCE_GROUP
    
  4. 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
    
  5. 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.

  6. 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
    
  7. 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
    
  8. 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.

  1. 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
    
  2. 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"
    
  3. 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>"
    
  4. Sla het bestand op en sluit het.

  5. Pas het geheim toe met behulp van de opdracht kubectl apply.

    kubectl apply -f backend-secret.yaml
    
  6. 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

  1. 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 de valueFrom en de secretKeyRef sleutels gebruiken. De volgorde van deze sleutels laat de implementatie de waarde van de key gebruiken die aanwezig is in het geheim dat is gedefinieerd in de name sleutel.

  2. 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
    ---
    
  3. 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
    
  4. 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.

  5. Sla het bestand op en sluit het.

  6. Pas de wijzigingen toe op uw cluster met behulp van de opdracht kubectl apply.

    kubectl apply -f backend-application.yaml