Quickstart: Azure-app-configuratie gebruiken in Azure Kubernetes Service

In Kubernetes stelt u pods in voor het verbruik van configuratie van configuratie Kaarten. Hiermee kunt u de configuratie loskoppelen van uw containerinstallatiekopieën, waardoor uw toepassingen eenvoudig overdraagbaar zijn. Azure-app Configuratie kubernetes-provider kan configuratie Kaarten en geheimen maken op basis van uw sleutelwaarden en Key Vault-verwijzingen in Azure-app-configuratie. 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 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

  1. 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
    
  2. 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>
    
  3. 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"
      }
    }
    
  4. 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

  1. 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
    
  2. 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"]
    
  3. 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

  1. 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.

  2. 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 en myregistry.azurecr.io/aspnetapp.

  3. 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

  1. Maak een implementatiemap in de hoofdmap van uw project.

  2. 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
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. Open een browservenster en navigeer naar het IP-adres dat u in de vorige stap hebt verkregen. De webpagina ziet er als volgt uit:

    Schermopname van Kubernetes Provider voordat u configMap gebruikt.

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

  1. Voer de volgende opdracht uit om toegangsreferenties voor uw AKS-cluster op te halen. Vervang de waarde van de name en resource-group parameters door uw AKS-exemplaar:

    az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
    
  2. Installeer Azure-app Kubernetes-provider voor configuratie in uw AKS-cluster met behulp vanhelm:

    helm install azureappconfiguration.kubernetesprovider \
         oci://mcr.microsoft.com/azure-app-configuration/helmchart/kubernetes-provider \
         --namespace azappconfig-system \
         --create-namespace
    
  3. Voeg een appConfigurationProvider.yaml-bestand toe aan de implementatiemap met de volgende inhoud om een AzureAppConfigurationProvider resource te maken. AzureAppConfigurationProvideris 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:
          managedIdentityClientId: <your-managed-identity-client-id>
    

    Vervang de waarde van het endpoint veld door het eindpunt van het Azure-app Configuration-archief. Volg de stappen in het gebruik van workloadidentiteit en werk de auth sectie bij met de client-id van de door de gebruiker toegewezen beheerde identiteit die u hebt gemaakt.

    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.
  4. 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 de volumeMounts.mountPath waarden overeenkomen met de WORKDIR 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
    
  5. 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
    
  6. Vernieuw de browser. Op de pagina wordt bijgewerkte inhoud weergegeven.

    Schermopname van Kubernetes Provider na het gebruik van configMap.

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 COMPLETEweergegeven, 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 COMPLETEis, 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. Als u bijvoorbeeld ziet dat aanvragen voor uw App Configuration-archief worden beantwoord met ANTWOORD 403: 403 Verboden, kan dit erop wijzen dat de App Configuration Kubernetes-provider niet over de benodigde machtigingen beschikt om toegang te krijgen tot uw App Configuration-archief. Volg de instructies in de workloadidentiteit om ervoor te zorgen dat aan de bijbehorende beheerde identiteit de juiste machtiging is toegewezen.

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.

  1. Meld u aan bij de Azure-portal en selecteer Resourcegroepen.
  2. Voer de naam van de resourcegroep in het vak Filteren op naam in.
  3. Selecteer in de resultatenlijst de resourcegroepnaam om een overzicht te bekijken.
  4. Selecteer Resourcegroep verwijderen.
  5. 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).
  • Verbinding maken uw AKS-cluster naar 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.