Exercice - Stocker de façon sécurisée des variables dans des secrets
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.
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}
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
Créez un groupe de ressources avec la commande
az group create
.az group create --location $LOCATION --name $RESOURCE_GROUP
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
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.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
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
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.
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
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"
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>"
Enregistrez et fermez le fichier.
Appliquez le secret en utilisant la commande
kubectl apply
.kubectl apply -f backend-secret.yaml
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
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 levalueFrom
et les cléssecretKeyRef
. L’ordre de ces clés indique au déploiement d’utiliser la valeur dukey
présent dans le secret défini au sein de la cléname
.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 ---
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
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.Enregistrez et fermez le fichier.
Appliquez les modifications à votre cluster en utilisant la commande
kubectl apply
.kubectl apply -f backend-application.yaml