Quickstart: Azure-app-configuratie gebruiken in Azure Kubernetes Service
In Kubernetes stelt u pods in om configuratie van ConfigMaps te gebruiken. Hiermee kunt u de configuratie loskoppelen van uw containerinstallatiekopieën, waardoor uw toepassingen eenvoudig overdraagbaar zijn. Azure-app Configuratie kubernetes-provider kan ConfigMaps en geheimen samenstellen op basis van uw sleutelwaarden en Key Vault-verwijzingen in Azure-app Configuration. Hiermee kunt u profiteren van Azure-app Configuratie voor de gecentraliseerde opslag en het beheer van uw configuratie zonder dat er wijzigingen in de toepassingscode zijn aangebracht.
Een ConfigMap kan worden gebruikt als omgevingsvariabelen of een gekoppeld bestand. In deze quickstart neemt u Azure-app Configuratie-Kubernetes-provider op in een Azure Kubernetes Service-workload waarin u een eenvoudige ASP.NET Core-app uitvoert die configuratie van een JSON-bestand verbruikt.
Tip
Zie opties voor workloads die worden gehost in Kubernetes voor toegang tot Azure-app-configuratie.
Notitie
Deze quickstart begeleidt u bij het instellen van de Azure-app Kubernetes-provider voor configuratie. U kunt eventueel de volgende Azure Developer CLI-opdrachten gebruiken met de azure-appconfig-aks
sjabloon om Azure-resources in te richten en de voorbeeldtoepassing te implementeren die in deze quickstart wordt gebruikt. Ga naar de opslagplaats azure-appconfig-aks op GitHub voor meer informatie over deze sjabloon.
azd init -t azure-appconfig-aks
azd up
Vereisten
- Een App Configuration-archief. Een winkel maken.
- Een Azure Container Registry. Maak een register.
- Een AKS-cluster (Azure Kubernetes Service) dat is gemachtigd om installatiekopieën op te halen uit uw Azure Container Registry. Maak een AKS-cluster.
- .NET SDK 6.0 of hoger
- Azure-CLI
- Docker Desktop
- roer
- kubectl
Een toepassing maken die wordt uitgevoerd in AKS
In deze sectie maakt u een eenvoudige ASP.NET Core-webtoepassing die wordt uitgevoerd in Azure Kubernetes Service (AKS). De toepassing leest de configuratie uit een lokaal JSON-bestand. In de volgende sectie kunt u de configuratie van Azure-app Configuratie gebruiken zonder de toepassingscode te wijzigen. Als u al een AKS-toepassing hebt die de configuratie van een bestand leest, slaat u deze sectie over en gaat u naar App Configuration Kubernetes Provider gebruiken. U hoeft alleen te controleren of het configuratiebestand dat door de provider is gegenereerd, overeenkomt met het bestandspad dat door uw toepassing wordt gebruikt.
Een app maken
Gebruik de .NET-opdrachtregelinterface (CLI) en voer de volgende opdracht uit om een nieuw ASP.NET Core-web-app-project te maken in een nieuwe MyWebApp-map :
dotnet new webapp --output MyWebApp --framework net6.0
Open Index.cshtml in de map Pages en werk de inhoud bij met de volgende code.
@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>
Maak een configuratiemap in de hoofdmap van uw project en voeg er een mysettings.json bestand aan toe met de volgende inhoud.
{ "Settings": { "FontColor": "Black", "Message": "Message from the local configuration" } }
Open program.cs en voeg het JSON-bestand toe aan de configuratiebron door de
AddJsonFile
methode aan te roepen.// 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 // ... ...
De toepassing in een container plaatsen
Voer de opdracht dotnet publish uit om de app te bouwen in de releasemodus en maak de assets in de gepubliceerde map.
dotnet publish -c Release -o published
Maak een bestand met de naam Dockerfile in de hoofdmap van uw projectmap, open het in een teksteditor en voer de volgende inhoud in. Een Dockerfile is een tekstbestand dat geen extensie heeft en die wordt gebruikt om een containerinstallatiekopieën te maken.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime WORKDIR /app COPY published/ ./ ENTRYPOINT ["dotnet", "MyWebApp.dll"]
Bouw een containerinstallatiekopieën met de naam aspnetapp door de volgende opdracht uit te voeren.
docker build --tag aspnetapp .
De installatiekopie naar Azure Container Registry pushen
Voer de opdracht az acr login uit om u aan te melden bij uw containerregister. In het volgende voorbeeld wordt een register met de naam myregistry geregistreerd. Vervang de registernaam door die van u.
az acr login --name myregistry
De opdracht wordt geretourneerd
Login Succeeded
zodra de aanmelding is geslaagd.Gebruik docker-tag om een tag te maken myregistry.azurecr.io/aspnetapp:v1 voor de aspnetapp van de installatiekopieën.
docker tag aspnetapp myregistry.azurecr.io/aspnetapp:v1
Tip
Als u de lijst met uw bestaande Docker-installatiekopieën en -tags wilt bekijken, voert u uit
docker image ls
. In dit scenario ziet u ten minste twee afbeeldingen:aspnetapp
enmyregistry.azurecr.io/aspnetapp
.Gebruik docker-push om de installatiekopieën te uploaden naar het containerregister. Met de volgende opdracht wordt de installatiekopie bijvoorbeeld gepusht naar een opslagplaats met de naam aspnetapp met tag v1 onder het register myregistry.
docker push myregistry.azurecr.io/aspnetapp:v1
De toepassing implementeren
Maak een implementatiemap in de hoofdmap van uw project.
Voeg een deployment.yaml-bestand toe aan de implementatiemap met de volgende inhoud om een implementatie te maken. Vervang de waarde van
template.spec.containers.image
de afbeelding die u in de vorige stap hebt gemaakt.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
Voeg een service.yaml-bestand toe aan de implementatiemap met de volgende inhoud om een LoadBalancer-service te maken.
apiVersion: v1 kind: Service metadata: name: aspnetapp-demo-service spec: type: LoadBalancer ports: - port: 80 selector: app: aspnetapp-demo
Voer de volgende opdracht uit om de toepassing te implementeren in het AKS-cluster.
kubectl create namespace appconfig-demo kubectl apply -f ./Deployment -n appconfig-demo
Voer de volgende opdracht uit en haal het externe IP-adres op dat wordt weergegeven door de LoadBalancer-service.
kubectl get service aspnetapp-demo-service -n appconfig-demo
Open een browservenster en navigeer naar het IP-adres dat u in de vorige stap hebt verkregen. De webpagina ziet er als volgt uit:
App Configuration Kubernetes-provider gebruiken
Nu u een toepassing hebt die wordt uitgevoerd in AKS, implementeert u de App Configuration Kubernetes-provider in uw AKS-cluster dat wordt uitgevoerd als een Kubernetes-controller. De provider haalt gegevens op uit uw App Configuration-archief en maakt een ConfigMap, die kan worden gebruikt als een JSON-bestand dat is gekoppeld aan een gegevensvolume.
Het Azure-app-configuratiearchief instellen
Voeg de volgende sleutelwaarden toe aan het App Configuration-archief en laat label en inhoudstype ongewijzigd met de standaardwaarden. Ga naar Een sleutelwaarde maken voor meer informatie over het toevoegen van sleutelwaarden aan een archief met behulp van Azure Portal of de CLI.
Code | Value |
---|---|
Instellingen:FontColor | Green |
Instellingen:Bericht | Hallo van Azure-app-configuratie |
De App Configuration Kubernetes-provider instellen
Voer de volgende opdracht uit om toegangsreferenties voor uw AKS-cluster op te halen. Vervang de waarde van de
name
enresource-group
parameters door uw AKS-exemplaar:az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
Installeer Azure-app Kubernetes-provider voor configuratie in uw AKS-cluster met behulp van
helm
:helm install azureappconfiguration.kubernetesprovider \ oci://mcr.microsoft.com/azure-app-configuration/helmchart/kubernetes-provider \ --namespace azappconfig-system \ --create-namespace
Tip
De App Configuration Kubernetes Provider is ook beschikbaar als een AKS-extensie. Dankzij deze integratie kunt u naadloos installeren en beheren via de Azure CLI-, ARM-sjablonen of Bicep-sjablonen. Het gebruik van de AKS-extensie vergemakkelijkt automatische updates voor secundaire/patchversies, zodat uw systeem altijd up-to-date is. Raadpleeg de Azure-app-configuratie-extensie voor Azure Kubernetes Service voor gedetailleerde installatie-instructies.
Voeg een appConfigurationProvider.yaml-bestand toe aan de implementatiemap met de volgende inhoud om een
AzureAppConfigurationProvider
resource te maken.AzureAppConfigurationProvider
is een aangepaste resource die definieert welke gegevens moeten worden gedownload uit een Azure-app Configuration-archief en waarmee een ConfigMap wordt gemaakt.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>
Vervang de waarde van het
endpoint
veld door het eindpunt van het Azure-app Configuration-archief. Ga verder met de volgende stap om deauth
sectie bij te werken met uw verificatiegegevens.Notitie
AzureAppConfigurationProvider
is een declaratief API-object. Hiermee definieert u de gewenste status van de ConfigMap die is gemaakt op basis van de gegevens in uw App Configuration-archief met het volgende gedrag:- De ConfigMap kan niet worden gemaakt als er al een ConfigMap met dezelfde naam bestaat in dezelfde naamruimte.
- De ConfigMap wordt opnieuw ingesteld op basis van de huidige gegevens in uw App Configuration-archief als deze op een andere manier wordt verwijderd of gewijzigd.
- De ConfigMap wordt verwijderd als de App Configuration Kubernetes-provider is verwijderd.
Volg de instructies voor het gebruik van de workloadidentiteit voor verificatie met uw App Configuration-archief. Werk het bestand appConfigurationProvider.yaml bij door het
serviceAccountName
veld te vervangen door de naam van het serviceaccount dat u hebt gemaakt. Raadpleeg de voorbeelden in de sectie Verificatie voor meer informatie over andere verificatiemethoden.Werk het bestand deployment.yaml in de implementatiemap bij om de ConfigMap
configmap-created-by-appconfig-provider
te gebruiken als een gekoppeld gegevensvolume. Het is belangrijk om ervoor te zorgen dat devolumeMounts.mountPath
waarden overeenkomen met deWORKDIR
opgegeven in uw Dockerfile en de configuratiemap die eerder is gemaakt.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
Voer de volgende opdracht uit om de wijzigingen te implementeren. Vervang de naamruimte als u uw bestaande AKS-toepassing gebruikt.
kubectl apply -f ./Deployment -n appconfig-demo
Vernieuw de browser. Op de pagina wordt bijgewerkte inhoud weergegeven.
Probleemoplossing
Als uw toepassing de gegevens uit uw App Configuration-archief niet ziet ophalen, voert u de volgende opdracht uit om te controleren of de ConfigMap juist is gemaakt.
kubectl get configmap configmap-created-by-appconfig-provider -n appconfig-demo
Als de ConfigMap niet is gemaakt, voert u de volgende opdracht uit om de status van het ophalen van gegevens op te halen.
kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml
Als de Azure-app Configuratie-Kubernetes Provider gegevens heeft opgehaald uit uw App Configuration-archief, moet de phase
eigenschap onder de statussectie van de uitvoer worden COMPLETE
weergegeven, zoals wordt weergegeven in het volgende voorbeeld.
$ 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
Als de fase niet COMPLETE
is, worden de gegevens niet correct gedownload uit uw App Configuration-archief. Voer de volgende opdracht uit om de logboeken van de Azure-app Kubernetes-provider voor configuratie weer te geven.
kubectl logs deployment/az-appconfig-k8s-provider -n azappconfig-system
Gebruik de logboeken voor verdere probleemoplossing. Raadpleeg de sectie Veelgestelde vragen voor veelvoorkomende problemen.
Veelgestelde vragen
Waarom wordt de ConfigMap of het geheim niet gegenereerd?
U kunt de stappen in de gids voor probleemoplossing volgen om logboeken te verzamelen voor gedetailleerde foutinformatie. Hier volgen enkele veelvoorkomende oorzaken.
- ANTWOORD 403: 403 Verboden: De geconfigureerde identiteit beschikt niet over de benodigde machtigingen voor toegang tot het App Configuration-archief. Raadpleeg de sectie Verificatie voor voorbeelden die overeenkomen met de identiteit die u gebruikt.
- Er is een Key Vault-verwijzing gevonden in App Configuration, maar 'spec.secret' is niet geconfigureerd: een of meer Key Vault-verwijzingen zijn opgenomen in de geselecteerde sleutelwaarden, maar de verificatiegegevens voor Key Vaults zijn niet opgegeven. Om de integriteit van de configuratie te behouden, kan de volledige configuratie niet worden geladen. Configureer de
spec.secret
sectie om de benodigde verificatiegegevens op te geven. Zie Key Vault-naslaginformatie voor voorbeelden en meer informatie.
Waarom bevat de gegenereerde ConfigMap niet de verwachte gegevens?
Zorg ervoor dat u de juiste sleutel-waardekiezers opgeeft die overeenkomen met de verwachte gegevens. Als er geen selectors zijn opgegeven, worden alle sleutelwaarden zonder label gedownload uit uw App Configuration-archief. Wanneer u een sleutelfilter gebruikt, controleert u of het overeenkomt met het voorvoegsel van de verwachte sleutelwaarden. Als uw sleutelwaarden labels hebben, moet u het labelfilter in de selectors opgeven. Raadpleeg de documentatie voor sleutelwaardeselectie voor meer voorbeelden.
Hoe kan ik de installatie van de Azure-app Kubernetes-provider aanpassen?
U kunt de installatie aanpassen door extra Helm-waarden op te geven bij het installeren van de Azure-app Kubernetes-provider voor configuratie. U kunt bijvoorbeeld het logboekniveau instellen, de provider configureren voor uitvoering op een specifiek knooppunt of de workloadidentiteit uitschakelen. Raadpleeg de installatiehandleiding voor meer informatie.
On-demand vernieuwing van ConfigMap en Secret activeren
Hoewel u automatische gegevensvernieuwing kunt instellen, is het mogelijk dat u een vernieuwing op aanvraag wilt activeren om de meest recente gegevens op te halen uit App Configuration en Key Vault. Hiervoor kunt u de implementatie van de Azure-app Kubernetes-providercontroller opnieuw starten. De Kubernetes-provider zal de configuratiemap en het geheim vervolgens afstemmen en bijwerken met de meest recente gegevens uit uw App Configuration-archief en Key Vault.
Het is niet raadzaam om de ConfigMap en het geheim dat door de Kubernetes-provider wordt gegenereerd, te verwijderen of te wijzigen. Hoewel er nieuwe worden gegenereerd op basis van de meest recente gegevens, kan dit leiden tot downtime voor uw toepassingen in het geval van storingen.
Waarom kan ik me niet verifiëren met Azure-app Configuratie met behulp van workloadidentiteit na het upgraden van de provider naar versie 2.0.0?
Vanaf versie 2.0.0 is een door de gebruiker geleverd serviceaccount vereist voor verificatie met Azure-app Configuratie met behulp van workloadidentiteit. Deze wijziging verbetert de beveiliging via isolatie van naamruimten. Voorheen werd het serviceaccount van een Kubernetes-provider gebruikt voor alle naamruimten. Zie de documentatie over het gebruik van workloadidentiteit voor bijgewerkte instructies. Als u tijd nodig hebt om te migreren bij het upgraden naar versie 2.0.0, kunt u tijdelijk instellen workloadIdentity.globalServiceAccountEnabled=true
tijdens de installatie van de provider. Houd er rekening mee dat ondersteuning voor het gebruik van het serviceaccount van de provider in een toekomstige release wordt afgeschaft.
Resources opschonen
Verwijder de App Configuration Kubernetes Provider van uw AKS-cluster als u het AKS-cluster wilt behouden.
helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system
Als u de resources die in dit artikel zijn gemaakt niet wilt blijven gebruiken, verwijdert u de resourcegroep die u hier hebt gemaakt om kosten te voorkomen.
Belangrijk
Het verwijderen van een resourcegroep kan niet ongedaan worden gemaakt. De resourcegroep en alle resources daarin worden permanent verwijderd. Zorg ervoor dat u niet per ongeluk de verkeerde resourcegroep of resources verwijdert. Als u de resources voor dit artikel in een resourcegroep hebt gemaakt die andere resources bevat die u wilt behouden, moet u elke resource afzonderlijk verwijderen uit het deelvenster in plaats van dat u de resourcegroep verwijdert.
- Meld u aan bij de Azure-portal en selecteer Resourcegroepen.
- Voer de naam van de resourcegroep in het vak Filteren op naam in.
- Selecteer in de resultatenlijst de resourcegroepnaam om een overzicht te bekijken.
- Selecteer Resourcegroep verwijderen.
- U wordt gevraagd om het verwijderen van de resourcegroep te bevestigen. Voer de naam van de resourcegroep in ter bevestiging en selecteer Verwijderen.
Na enkele ogenblikken worden de resourcegroep en alle bijbehorende resources verwijderd.
Notitie
Als u de Azure Developer CLI gebruikt om de resources in te stellen, kunt u de azd down
opdracht uitvoeren om alle resources te verwijderen die door de azure-appconfig-aks
sjabloon zijn gemaakt.
Volgende stappen
In deze snelstart, gaat u het volgende doen:
- Er is een toepassing gemaakt die wordt uitgevoerd in Azure Kubernetes Service (AKS).
- Uw AKS-cluster verbonden met uw App Configuration-archief met behulp van de App Configuration Kubernetes-provider.
- Er is een ConfigMap gemaakt met gegevens uit uw App Configuration-archief.
- De toepassing is uitgevoerd met configuratie vanuit uw App Configuration-archief zonder de toepassingscode te wijzigen.
Als u wilt weten hoe u uw AKS-workloads bijwerkt om de configuratie dynamisch te vernieuwen, gaat u verder met de volgende zelfstudie.
Zie Azure-app Naslaginformatie over configuratie-Kubernetes-provider voor meer informatie over de Azure-app Configuratie-Kubernetes-provider.