Exercice - Stocker de façon sécurisée des variables dans des secrets

Effectué

Créez un groupe de ressources et un cluster AKS

Remarque

Cet exercice est facultatif. Si vous souhaitez effectuer cet exercice, vous devrez créer un abonnement Azure avant de commencer. Si vous n’avez pas de compte Azure ou si vous ne souhaitez pas en créer un pour l’instant, vous pouvez lire les instructions pour comprendre les informations qui sont présentées.

  1. Créez des variables d’environnement pour votre groupe de ressources, cluster, zone DNS et emplacement. Veillez à mettre à jour la variable LOCATION avec la région la plus proche de vous, par exemple, eastus.

    export RESOURCE_GROUP=rg-ship-manager
    export CLUSTER_NAME=ship-manager-cluster
    export ZONE_NAME=ship-$RANDOM.com
    export LOCATION={location}
    
  2. Exécutez la commande suivante pour afficher les valeurs de vos variables d’environnement, et prenez-en note pour une utilisation ultérieure.

    echo "RESOURCE_GROUP:" $RESOURCE_GROUP
    echo "CLUSTER_NAME:"$CLUSTER_NAME
    echo "ZONE_NAME:" $ZONE_NAME
    echo "LOCATION:"$LOCATION
    
  3. Créez un groupe de ressources avec la commande az group create.

    az group create --location $LOCATION --name $RESOURCE_GROUP
    
  4. Créez un cluster AKS avec la commande 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. Activez le module complémentaire de routage d’application avec la commande suivante.

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

    Remarque

    Si vous voyez un message vous demandant d’installer l’extension aks-preview, entrez Y pour l’installer et continuer.

  6. Créez une zone DNS à l’aide de la commande az network dns zone create.

    az network dns zone create -g $RESOURCE_GROUP -n $ZONE_NAME
    
  7. Récupérez l’ID de votre zone DNS et utilisez-le dans le cadre de la commande afin d’ajouter la zone à votre cluster pour le routage d’application.

    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. Obtenez les informations d’identification de votre cluster en exécutant la commande az aks get-credentials.

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

Créer un secret

Remarque

Dans la documentation d’application, vous pouvez voir que cette application comporte deux parties : le front-end et le back-end. Seul le back-end doit utiliser un secret, car il dispose de la chaîne de connexion MongoDB sous la forme d’une variable d’environnement.

  1. Déployez une base de données MongoDB pour prendre en charge l’application à l’aide de la commande az cosmosdb create.

    export DATABASE_NAME=contoso-ship-manager-$RANDOM && \
    az cosmosdb create \
     -n $DATABASE_NAME \
     -g $RESOURCE_GROUP \
     --kind MongoDB
    
  2. Une fois la base de données créée, obtenez la chaîne de connexion à l’aide de la commande az cosmosdb keys list et copiez la valeur de sortie.

    az cosmosdb keys list \
      --type connection-strings \
      -g $RESOURCE_GROUP \
      -n $DATABASE_NAME \
      -o tsv \
      --query "connectionStrings[0].connectionString"
    
  3. Créez un fichier YAML nommé backend-secret.yaml et collez-le dans le code suivant pour créer la spécification secret. Veillez à remplacer la chaîne d’espace réservé par la chaîne de connexion de la sortie précédente.

    apiVersion: v1
    kind: Secret
    metadata:
      name: ship-manager-database
      namespace: default
    type: Opaque
    stringData:
      database_mongodb_uri: "<paste the connection string here>"
    
  4. Enregistrez et fermez le fichier.

  5. Appliquez le secret en utilisant la commande kubectl apply.

    kubectl apply -f backend-secret.yaml
    
  6. Vérifiez le résultat en interrogeant le secret à l’aide de la commande kubectl get secret.

    kubectl get secret ship-manager-database
    

    La sortie doit ressembler à l’exemple suivant :

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

Créer l’application

  1. Créez un fichier YAML nommé backend-application.yaml et collez-le dans le code suivant pour créer la spécification de déploiement.

    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
    

    Notez que dans la section env, nous utilisons le valueFrom et les clés secretKeyRef. L’ordre de ces clés indique au déploiement d’utiliser la valeur du key présent dans le secret défini au sein de la clé name.

  2. Ajoutez trois tirets sous la dernière ligne du fichier backend-application.yaml pour séparer la section suivante.

    # 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. Sous les trois tirets, collez le code suivant pour créer la spécification d’entrée.

    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. Modifiez la zone DNS dans le host: de façon à ce qu’elle corresponde au nom de votre zone DNS. Utilisez la valeur de la variable ZONE_NAME que vous avez créée.

  5. Enregistrez et fermez le fichier.

  6. Appliquez les modifications à votre cluster en utilisant la commande kubectl apply.

    kubectl apply -f backend-application.yaml