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
- Un magasin App Configuration. Créez un magasin.
- Un Azure Container Registry. Créer un registre.
- Un cluster Azure Kubernetes Service (AKS) qui est autorisé à extraire des images de votre Azure Container Registry. Créer un cluster AKS.
- SDK .NET 6.0 ou ultérieur
- Azure CLI
- Docker Desktop
- helm
- kubectl
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
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
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>
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" } }
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
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
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"]
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
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.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
etmyregistry.azurecr.io/aspnetapp
.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
Créez un répertoire Déploiement dans le répertoire racine de votre projet.
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
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
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
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
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 :
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
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
etresource-group
par votre instance AKS :az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
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.
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 sectionauth
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é.
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.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 quevolumeMounts.mountPath
correspond auWORKDIR
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
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
Actualisez le navigateur. La page affiche le contenu mis à jour.
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.
- Connectez-vous au portail Azure, puis sélectionnez Groupes de ressources.
- Dans la zone Filtrer par nom, entrez le nom de votre groupe de ressources.
- Dans la liste de résultats, sélectionnez le nom du groupe de ressources pour afficher une vue d’ensemble.
- Sélectionnez Supprimer le groupe de ressources.
- 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.