Partager via


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
    

    Conseil

    Le fournisseur Kubernetes App Configuration est également disponible en tant qu’extension AKS. Cette intégration permet une installation et une gestion transparentes via Azure CLI, des modèles ARM ou des modèles Bicep. L’utilisation de l’extension AKS facilite les mises à jour automatiques des versions mineures/correctives, ce qui garantit que votre système est toujours à jour. Pour obtenir des instructions d’installation détaillées, reportez-vous à l’extension Azure App Configuration pour Azure Kubernetes Service.

  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:
          serviceAccountName: <your-service-account-name>
    

    Remplacez la valeur du champ endpoint par le point de terminaison de votre magasin Azure App Configuration. Passez à l’étape suivante pour mettre à jour la section auth avec vos informations d’authentification.

    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. Suivez les instructions pour utiliser l’identité de charge de travail afin de vous authentifier auprès de votre magasin App Configuration. Mettez à jour le fichier appConfigurationProvider.yaml en remplaçant le champ serviceAccountName par le nom du compte de service que vous avez créé. Pour plus d’informations sur les autres méthodes d’authentification, consultez les exemples de la section Authentification.

  5. 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
    
  6. 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
    
  7. 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. Pour connaître les problèmes courants, consultez la section FAQ.

Forum aux questions

Pourquoi le ConfigMap ou le Secret n’est-il pas généré ?

Vous pouvez suivre les étapes décrites dans le guide de résolution des problèmes pour collecter des journaux pour obtenir des informations détaillées sur les erreurs. Voici quelques causes courantes.

  • RÉPONSE 403 : 403 Interdit : l’identité configurée ne dispose pas des autorisations nécessaires pour accéder au magasin App Configuration. Consultez la section Authentification pour obtenir des exemples qui correspondent à l’identité que vous utilisez.
  • Une référence Key Vault se trouve dans App Configuration, mais « spec.secret » n’a pas été configuré : une ou plusieurs références Key Vault sont incluses dans les paires clé-valeur sélectionnées, mais les informations d’authentification pour les coffres de clés ne sont pas fournies. Pour préserver l’intégrité de la configuration, le chargement de toute la configuration échoue. Configurez la section spec.secret pour fournir les informations d’authentification nécessaires. Pour plus d’informations et pour obtenir des exemples, consultez la section Informations de référence Key Vault.

Pourquoi le ConfigMap généré ne contient-il pas les données attendues ?

Vérifiez que vous spécifiez les sélecteurs clé-valeur corrects pour qu’ils correspondent aux données attendues. Si aucun sélecteur n’est spécifié, toutes les paires clé-valeur sans étiquette sont téléchargées à partir de votre magasin App Configuration. Lorsque vous utilisez un filtre de clés, vérifiez qu’il correspond au préfixe de vos paires clé-valeur attendues. Si vos paires clé-valeur ont des étiquettes, veillez à spécifier le filtre d’étiquettes dans les sélecteurs. Pour obtenir plus d’exemples, consultez la documentation relative à la sélection de paires clé-valeur.

Comment personnaliser l’installation du fournisseur Kubernetes Azure App Configuration ?

Vous pouvez personnaliser l’installation en fournissant des valeurs Helm supplémentaires lors de l’installation du fournisseur Kubernetes Azure App Configuration. Par exemple, vous pouvez définir le niveau de consignation, configurer le fournisseur pour qu’il s’exécute sur un nœud spécifique ou désactiver l’identité de la charge de travail. Pour plus d’informations, consultez le guide d’installation.

Pourquoi ne puis-je pas m’authentifier auprès d’Azure App Configuration à l’aide de l’identité de charge de travail après la mise à niveau du fournisseur vers la version 2.0.0 ?

À partir de la version 2.0.0, un compte de service fourni par l’utilisateur est nécessaire pour l’authentification auprès d’Azure App Configuration à l’aide de l’identité de charge de travail. Ce changement permet de renforcer la sécurité via l’isolation de l’espace de noms. Jusqu’à présent, le compte de service d’un fournisseur Kubernetes était utilisé pour tous les espaces de noms. Pour obtenir des instructions mises à jour, consultez la documentation sur l’utilisation de l’identité de charge de travail. Si vous avez besoin de temps pour la migration au moment de la mise à niveau vers la version 2.0.0, vous pouvez définir temporairement workloadIdentity.globalServiceAccountEnabled=true durant l’installation du fournisseur. Notez que la prise en charge de l’utilisation du compte de service du fournisseur sera déconseillée dans une version future.

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.