Démarrage rapide : utiliser Azure App Configuration dans Azure Kubernetes Service

Dans Kubernetes, vous configurez des pods pour consommer la configuration à partir de ConfigMaps. Il vous permet de dissocier la configuration de vos images conteneur, ce qui rend vos applications facilement portables. Le Fournisseur Azure App Configuration Kubernetes peut construire des configMaps et Secrets à partir de vos clés-valeurs et références Key Vault dans Azure App Configuration. Il vous permet de tirer parti d’Azure App Configuration pour le stockage centralisé et la gestion de votre configuration sans aucune modification du code de votre application.

Un ConfigMap peut être consommé en tant que variables d'environnement ou fichier monté. Dans ce guide de démarrage rapide, vous incorporez le fournisseur Azure App Configuration Kubernetes dans une charge de travail Azure Kubernetes Service où vous exécutez une simple application ASP.NET Core consommant la configuration à partir d'un fichier JSON.

Conseil

Consultez les options permettant aux charges de travail hébergées dans Kubernetes d’accéder à Azure App Configuration.

Remarque

Ce guide de démarrage rapide vous guide tout au long de la configuration du fournisseur Kubernetes Azure App Configuration. Si vous le souhaitez, vous pouvez utiliser les commandes Azure Developer CLI suivantes avec le modèle azure-appconfig-aks pour approvisionner des ressources Azure et déployer l’exemple d’application utilisé par ce guide de démarrage rapide. Pour plus d’informations sur ce modèle, visitez le dépôt azure-appconfig-aks sur GitHub.

azd init -t azure-appconfig-aks
azd up

Prérequis

Créer une application s’exécutant dans AKS

Dans cette section, vous allez créer une application web ASP.NET Core simple s’exécutant dans Azure Kubernetes Service (AKS). L'application lit la configuration à partir d'un fichier JSON local. Dans la section suivante, vous allez lui permettre de consommer la configuration à partir d’Azure App Configuration sans modifier le code de l’application. Si vous avez déjà une application AKS qui lit la configuration à partir d'un fichier, passez à la section Utiliser le fournisseur App Configuration Kubernetes. Vous devez seulement vous assurer que le fichier config généré par le fournisseur correspond au chemin d'accès du fichier utilisé par votre application.

Créer une application

  1. Utilisez l’interface de ligne de commande .NET (CLI) et exécutez la commande suivante pour créer un projet d’application web ASP.NET Core dans un nouveau répertoire MyWebApp :

    dotnet new webapp --output MyWebApp --framework net6.0
    
  2. Ouvrez Index.cshtml dans le répertoire Pages et mettez à jour le contenu avec le code suivant.

    @page
    @model IndexModel
    @using Microsoft.Extensions.Configuration
    @inject IConfiguration Configuration
    @{
        ViewData["Title"] = "Home page";
    }
    
    <style>
        h1 {
            color: @Configuration["Settings:FontColor"];
        }
    </style>
    
    <div class="text-center">
        <h1>@Configuration["Settings:Message"]</h1>
    </div>
    
  3. Créez un répertoire de configuration à la racine de votre projet et ajoutez-y un fichier mysettings.json avec le contenu suivant.

    {
      "Settings": {
        "FontColor": "Black",
        "Message": "Message from the local configuration"
      }
    }
    
  4. Ouvrez program.cs et ajoutez le fichier JSON à la source de configuration en appelant la méthode AddJsonFile.

    // Existing code in Program.cs
    // ... ...
    
    // Add a JSON configuration source 
    builder.Configuration.AddJsonFile("config/mysettings.json", reloadOnChange: true, optional: false);
    
    var app = builder.Build();
    
    // The rest of existing code in program.cs
    // ... ...
    

Conteneuriser l’application

  1. Exécutez la commande dotnet publish pour générer l'application en mode de mise en production et créer les ressources dans le répertoire publié.

    dotnet publish -c Release -o published
    
  2. Créez un fichier nommé Dockerfile à la racine du répertoire de votre projet, ouvrez-le dans un éditeur de texte, puis entrez le contenu suivant. Un Dockerfile est un fichier texte n’ayant pas d’extension qui est utilisé pour créer une image conteneur.

    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
    WORKDIR /app
    COPY published/ ./
    ENTRYPOINT ["dotnet", "MyWebApp.dll"]
    
  3. Générez une image conteneur nommée aspnetapp en exécutant la commande suivante.

    docker build --tag aspnetapp .
    

Envoyer l’image vers Azure Container Registry

  1. Exécutez la commande az acr login pour connecter votre registre de conteneurs. L’exemple suivant se connecte à un registre nommé myregistry. Remplacez le nom du registre par le vôtre.

    az acr login --name myregistry
    

    La commande retourne Login Succeeded une fois la connexion réussie.

  2. Utilisez la balise Docker pour créer une balise myregistry.azurecr.io/aspnetapp:v1 pour l’image aspnetapp.

    docker tag aspnetapp myregistry.azurecr.io/aspnetapp:v1
    

    Conseil

    Pour passer en revue la liste de vos images et balises Docker existantes, exécutez docker image ls. Dans ce scénario, vous devez voir au moins deux images : aspnetapp et myregistry.azurecr.io/aspnetapp.

  3. Utilisez docker push pour charger l’image vers le registre de conteneurs. Par exemple, la commande suivante envoie (push) l’image à un référentiel nommé aspnetapp avec la balise v1 sous le registre myregistry.

    docker push myregistry.azurecr.io/aspnetapp:v1
    

Déployer l’application

  1. Créez un répertoire Déploiement dans le répertoire racine de votre projet.

  2. Ajoutez un fichier deployment.yaml au répertoire Déploiement avec le contenu suivant pour créer un déploiement. Remplacez la valeur de template.spec.containers.image par l’image créée à l’étape précédente.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aspnetapp-demo
      labels:
        app: aspnetapp-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aspnetapp-demo
      template:
        metadata:
          labels:
            app: aspnetapp-demo
        spec:
          containers:
          - name: aspnetapp
            image: myregistry.azurecr.io/aspnetapp:v1
            ports:
            - containerPort: 80
    
  3. Ajoutez un fichier service.yaml au répertoire Déploiement avec le contenu suivant pour créer un service LoadBalancer.

    apiVersion: v1
    kind: Service
    metadata:
      name: aspnetapp-demo-service
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: aspnetapp-demo
    
  4. Exécutez la commande suivante pour déployer l’application sur le cluster AKS.

    kubectl create namespace appconfig-demo
    kubectl apply -f ./Deployment -n appconfig-demo
    
  5. Exécutez la commande suivante et obtenez l’adresse IP externe exposée par le service LoadBalancer.

    kubectl get service aspnetapp-demo-service -n appconfig-demo
    
  6. Ouvrez une fenêtre de navigateur et accédez à l’adresse IP que vous avez obtenue à l’étape précédente. La page web ressemble à ceci :

    Capture d’écran montrant le fournisseur Kubernetes avant d’utiliser configMap.

Utiliser le fournisseur App Configuration Kubernetes

Maintenant qu’une application s’exécute dans AKS, vous allez déployer le fournisseur App Configuration Kubernetes sur votre cluster AKS exécuté en tant que contrôleur Kubernetes. Le fournisseur récupère les données de votre magasin App Configuration et crée un ConfigMap, qui est consommable en tant que fichier JSON monté dans un volume de données.

Configurer le magasin Azure App Configuration

Ajoutez les clés-valeurs suivantes au magasin App Configuration et conservez les valeurs par défaut des options Étiquette et Type de contenu. Pour plus d’informations sur l’ajout de clés-valeurs à un magasin avec le Portail Azure ou l’interface CLI, consultez Création d’une clé-valeur.

Clé Valeur
Settings:FontColor Vert
Settings:Message Bonjour d’Azure App Configuration

Configurer le fournisseur Kubernetes App Configuration

  1. Exécutez la commande suivante pour obtenir les informations d’identification d’accès pour votre cluster AKS. Remplacez la valeur des paramètres name et resource-group par votre instance AKS :

    az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
    
  2. Installez le fournisseur Azure App Configuration Kubernetes sur votre cluster AKS à l’aide de helm :

    helm install azureappconfiguration.kubernetesprovider \
         oci://mcr.microsoft.com/azure-app-configuration/helmchart/kubernetes-provider \
         --namespace azappconfig-system \
         --create-namespace
    
  3. Ajoutez un fichier appConfigurationProvider.yaml au répertoire Déploiement avec le contenu suivant pour créer une ressource AzureAppConfigurationProvider. AzureAppConfigurationProvider est une ressource personnalisée qui définit les données à télécharger à partir d’un magasin Azure App Configuration et crée un ConfigMap.

    apiVersion: azconfig.io/v1
    kind: AzureAppConfigurationProvider
    metadata:
      name: appconfigurationprovider-sample
    spec:
      endpoint: <your-app-configuration-store-endpoint>
      target:
        configMapName: configmap-created-by-appconfig-provider
        configMapData: 
          type: json
          key: mysettings.json
      auth:
        workloadIdentity:
          managedIdentityClientId: <your-managed-identity-client-id>
    

    Remplacez la valeur du champ endpoint par le point de terminaison de votre magasin Azure App Configuration. Suivez les étapes de use workload identity et mettez à jour la section auth avec l'ID client de l'identité managée attribuée à l'utilisateur que vous avez créée.

    Remarque

    AzureAppConfigurationProvider est un objet API déclaratif. Il définit l’état souhaité du ConfigMap créé à partir des données de votre magasin App Configuration avec le comportement suivant :

    • Le ConfigMap ne peut pas être créé si un ConfigMap portant le même nom existe déjà dans le même espace de noms.
    • Le ConfigMap est réinitialisé en fonction des données présentes dans votre magasin App Configuration si elles sont supprimées ou modifiées par d’autres moyens.
    • Le ConfigMap est supprimé si le fournisseur Kubernetes App Configuration est désinstallé.
  4. Mettez à jour le fichier deployment.yaml dans le répertoire Déploiement pour utiliser le ConfigMap configmap-created-by-appconfig-provider comme volume de données monté. Il est important de s’assurer que volumeMounts.mountPath correspond au WORKDIR spécifié dans votre fichier Dockerfile et au répertoire de configuration créé précédemment.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aspnetapp-demo
      labels:
        app: aspnetapp-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aspnetapp-demo
      template:
        metadata:
          labels:
            app: aspnetapp-demo
        spec:
          containers:
          - name: aspnetapp
            image: myregistry.azurecr.io/aspnetapp:v1
            ports:
            - containerPort: 80
            volumeMounts:
            - name: config-volume
              mountPath: /app/config
          volumes:
          - name: config-volume 
            configMap: 
              name: configmap-created-by-appconfig-provider
    
  5. Exécutez la commande suivante pour déployer les changements. Remplacez l’espace de noms si vous utilisez votre application AKS existante.

    kubectl apply -f ./Deployment -n appconfig-demo
    
  6. Actualisez le navigateur. La page affiche le contenu mis à jour.

    Capture d’écran montrant le fournisseur Kubernetes après l’utilisation de configMap.

Dépannage

Si votre application ne récupère pas les données de votre magasin App Configuration, exécutez la commande suivante pour vérifier que le ConfigMap est créé correctement.

kubectl get configmap configmap-created-by-appconfig-provider -n appconfig-demo

Si le ConfigMap n’est pas créé, exécutez la commande suivante pour obtenir l’état de l’extraction des données.

kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml

Si le fournisseur Azure App Configuration Kubernetes a récupéré correctement les données de votre magasin App Configuration, la propriété phase sous la section État de la sortie doit être COMPLETE, comme illustré dans l’exemple suivant.

$ kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml

apiVersion: azconfig.io/v1
kind: AzureAppConfigurationProvider
  ... ... ...
status:
  lastReconcileTime: "2023-04-06T06:17:06Z"
  lastSyncTime: "2023-04-06T06:17:06Z"
  message: Complete sync settings to ConfigMap or Secret
  phase: COMPLETE

Si la phase n’est pas COMPLETE, les données ne sont pas téléchargées correctement à partir de votre magasin App Configuration. Exécutez la commande suivante pour afficher les journaux du fournisseur Azure App Configuration Kubernetes.

kubectl logs deployment/az-appconfig-k8s-provider -n azappconfig-system

Utilisez les journaux pour un dépannage plus approfondi. Par exemple, si vous voyez que les demandes adressées à votre magasin App Configuration sont traitées avec RESPONSE 403: 403 Forbidden, cela peut indiquer que le fournisseur App Configuration Kubernetes ne dispose pas de l’autorisation nécessaire pour accéder à votre magasin App Configuration. Suivez les instructions dans use workload identity pour vous assurer que l'identité managée associée est dotée de l'autorisation appropriée.

Nettoyer les ressources

Désinstallez le fournisseur App Configuration Kubernetes de votre cluster AKS si vous souhaitez conserver le cluster AKS.

helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system

Si vous ne souhaitez plus utiliser les ressources créées dans cet article, supprimez le groupe de ressources que vous avez créé ici afin d’éviter des frais.

Important

La suppression d’un groupe de ressources est irréversible. Le groupe de ressources et toutes les ressources qu’il contient sont supprimés définitivement. Veillez à ne pas supprimer accidentellement les mauvaises ressources ou le mauvais groupe de ressources. Si vous avez créé les ressources pour cet article dans un groupe de ressources contenant d’autres ressources que vous souhaitez conserver, supprimez chaque ressource individuellement à partir de son volet, au lieu de supprimer l’intégralité du groupe de ressources.

  1. Connectez-vous au portail Azure, puis sélectionnez Groupes de ressources.
  2. Dans la zone Filtrer par nom, entrez le nom de votre groupe de ressources.
  3. Dans la liste de résultats, sélectionnez le nom du groupe de ressources pour afficher une vue d’ensemble.
  4. Sélectionnez Supprimer le groupe de ressources.
  5. Vous êtes invité à confirmer la suppression du groupe de ressources. Entrez le nom de votre groupe de ressources à confirmer, puis sélectionnez Supprimer.

Après quelques instants, le groupe de ressources et toutes ses ressources sont supprimés.

Remarque

Si vous utilisez Azure Developer CLI pour configurer les ressources, vous pouvez exécuter la commande azd down pour supprimer toutes les ressources créées par le modèle azure-appconfig-aks.

Étapes suivantes

Dans ce guide de démarrage rapide, vous :

  • Vous avez créé une application s’exécutant dans Azure Kubernetes Service (AKS).
  • Vous avez connecté votre cluster AKS à votre magasin App Configuration à l’aide du fournisseur App Configuration Kubernetes.
  • Vous avez créé un ConfigMap avec les données de votre magasin App Configuration.
  • Vous avez exécuté l’application avec configuration à partir de votre magasin App Configuration sans modifier le code de votre application.

Pour savoir comment mettre à jour vos charges de travail AKS afin d’actualiser dynamiquement la configuration, passez au tutoriel suivant.

Pour en savoir plus sur le fournisseur Kubernetes Azure App Configuration, consultez Azure App Configuration référence du fournisseur Kubernetes.