Dela via


Snabbstart: Använda Azure App Configuration i Azure Kubernetes Service

I Kubernetes konfigurerar du poddar för att använda konfiguration från ConfigMaps. Det gör att du kan frikoppla konfigurationen från dina containeravbildningar, vilket gör dina program lätt bärbara. Azure App Configuration Kubernetes-providern kan konstruera ConfigMaps och hemligheter från dina nyckelvärden och Key Vault-referenser i Azure App Configuration. Det gör att du kan dra nytta av Azure App Configuration för centraliserad lagring och hantering av konfigurationen utan några ändringar i programkoden.

En ConfigMap kan användas som miljövariabler eller en monterad fil. I den här snabbstarten införlivar du Azure App Configuration Kubernetes-providern i en Azure Kubernetes Service-arbetsbelastning där du kör en enkel ASP.NET Core-app som förbrukar konfiguration från en JSON-fil.

Dricks

Se alternativ för arbetsbelastningar som finns i Kubernetes för åtkomst till Azure App Configuration.

Kommentar

Den här snabbstarten beskriver hur du konfigurerar Kubernetes-providern för Azure App Configuration. Du kan också använda följande Azure Developer CLI-kommandon med mallen azure-appconfig-aks för att etablera Azure-resurser och distribuera exempelprogrammet som används av den här snabbstarten. Mer information om den här mallen finns på lagringsplatsen azure-appconfig-aks på GitHub.

azd init -t azure-appconfig-aks
azd up

Förutsättningar

Skapa ett program som körs i AKS

I det här avsnittet skapar du ett enkelt ASP.NET Core-webbprogram som körs i Azure Kubernetes Service (AKS). Programmet läser konfigurationen från en lokal JSON-fil. I nästa avsnitt gör du det möjligt för den att använda konfiguration från Azure App Configuration utan att ändra programkoden. Om du redan har ett AKS-program som läser konfigurationen från en fil hoppar du över det här avsnittet och går till Använd App Configuration Kubernetes-provider. Du behöver bara se till att konfigurationsfilen som genereras av providern matchar den filsökväg som används av ditt program.

Skapa ett program

  1. Använd .NET-kommandoradsgränssnittet (CLI) och kör följande kommando för att skapa ett nytt ASP.NET Core-webbappsprojekt i en ny MyWebApp-katalog :

    dotnet new webapp --output MyWebApp --framework net6.0
    
  2. Öppna Index.cshtml i katalogen Pages och uppdatera innehållet med följande kod.

    @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. Skapa en konfigurationskatalog i projektets rot och lägg till en mysettings.json fil i den med följande innehåll.

    {
      "Settings": {
        "FontColor": "Black",
        "Message": "Message from the local configuration"
      }
    }
    
  4. Öppna program.cs och lägg till JSON-filen i konfigurationskällan genom att anropa AddJsonFile metoden.

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

Använd programmet med en container

  1. Kör kommandot dotnet publish för att skapa appen i versionsläge och skapa tillgångarna i den publicerade katalogen.

    dotnet publish -c Release -o published
    
  2. Skapa en fil med namnet Dockerfile i roten av projektkatalogen, öppna den i en textredigerare och ange följande innehåll. En Dockerfile är en textfil som inte har något tillägg och som används för att skapa en containeravbildning.

    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
    WORKDIR /app
    COPY published/ ./
    ENTRYPOINT ["dotnet", "MyWebApp.dll"]
    
  3. Skapa en containeravbildning med namnet aspnetapp genom att köra följande kommando.

    docker build --tag aspnetapp .
    

Skicka avbildningen till Azure Container Registry

  1. Kör kommandot az acr login för att logga in i containerregistret. Följande exempel loggar in i ett register med namnet myregistry. Ersätt registernamnet med ditt.

    az acr login --name myregistry
    

    Kommandot returnerar Login Succeeded när inloggningen har slutförts.

  2. Använd docker-taggen för att skapa en tagg myregistry.azurecr.io/aspnetapp:v1 för avbildningens aspnetapp.

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

    Dricks

    Om du vill granska listan över dina befintliga Docker-avbildningar och taggar kör du docker image ls. I det här scenariot bör du se minst två bilder: aspnetapp och myregistry.azurecr.io/aspnetapp.

  3. Använd docker-push för att ladda upp avbildningen till containerregistret. Följande kommando skickar till exempel avbildningen till en lagringsplats med namnet aspnetapp med tagg v1 under registrets myregistry.

    docker push myregistry.azurecr.io/aspnetapp:v1
    

Distribuera programmet

  1. Skapa en distributionskatalog i rotkatalogen för projektet.

  2. Lägg till en deployment.yaml-fil i distributionskatalogen med följande innehåll för att skapa en distribution. Ersätt värdet för med den bild template.spec.containers.image som du skapade i föregående steg.

    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. Lägg till en service.yaml-fil i distributionskatalogen med följande innehåll för att skapa en LoadBalancer-tjänst.

    apiVersion: v1
    kind: Service
    metadata:
      name: aspnetapp-demo-service
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: aspnetapp-demo
    
  4. Kör följande kommando för att distribuera programmet till AKS-klustret.

    kubectl create namespace appconfig-demo
    kubectl apply -f ./Deployment -n appconfig-demo
    
  5. Kör följande kommando och hämta den externa IP-adressen som exponeras av LoadBalancer-tjänsten.

    kubectl get service aspnetapp-demo-service -n appconfig-demo
    
  6. Öppna ett webbläsarfönster och navigera till DEN IP-adress som erhölls i föregående steg. Webbsidan ser ut så här:

    Skärmbild som visar Kubernetes-providern innan du använder configMap.

Använda Kubernetes-provider för appkonfiguration

Nu när du har ett program som körs i AKS distribuerar du Kubernetes-providern för appkonfiguration till aks-klustret som körs som en Kubernetes-kontrollant. Providern hämtar data från appkonfigurationsarkivet och skapar en ConfigMap som kan användas som en JSON-fil monterad i en datavolym.

Konfigurera Azure App Configuration Store

Lägg till följande nyckelvärden i App Configuration Store och lämna Etikett och Innehållstyp med sina standardvärden. Mer information om hur du lägger till nyckelvärden i ett arkiv med hjälp av Azure Portal eller CLI finns i Skapa ett nyckelvärde.

Tangent Värde
Inställningar:FontColor Grön
Inställningar:Meddelande Hej från Azure App Configuration

Konfigurera Kubernetes-providern för appkonfiguration

  1. Kör följande kommando för att hämta autentiseringsuppgifter för ditt AKS-kluster. Ersätt värdet för parametrarna name och resource-group med din AKS-instans:

    az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
    
  2. Installera Azure App Configuration Kubernetes-providern i ditt AKS-kluster med hjälp av helm:

    helm install azureappconfiguration.kubernetesprovider \
         oci://mcr.microsoft.com/azure-app-configuration/helmchart/kubernetes-provider \
         --namespace azappconfig-system \
         --create-namespace
    

    Dricks

    Kubernetes-providern för appkonfiguration är också tillgänglig som ett AKS-tillägg. Den här integreringen möjliggör sömlös installation och hantering via Azure CLI, ARM-mallar eller Bicep-mallar. Användning av AKS-tillägget underlättar automatiska uppdateringar av delversioner/korrigeringsversioner, vilket säkerställer att systemet alltid är uppdaterat. Detaljerade installationsinstruktioner finns i Azure App Configuration-tillägget för Azure Kubernetes Service.

  3. Lägg till en appConfigurationProvider.yaml-fil i distributionskatalogen med följande innehåll för att skapa en AzureAppConfigurationProvider resurs. AzureAppConfigurationProvider är en anpassad resurs som definierar vilka data som ska laddas ned från ett Azure App Configuration Store och skapar en 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>
    

    Ersätt värdet för endpoint fältet med slutpunkten för ditt Azure App Configuration Store. Gå vidare till nästa steg för att uppdatera auth avsnittet med din autentiseringsinformation.

    Kommentar

    AzureAppConfigurationProvider är ett deklarativt API-objekt. Den definierar det önskade tillståndet för ConfigMap som skapats från data i appkonfigurationsarkivet med följande beteende:

    • Det går inte att skapa ConfigMap om det redan finns en ConfigMap med samma namn i samma namnområde.
    • ConfigMap återställs baserat på aktuella data i appkonfigurationsarkivet om den tas bort eller ändras på något annat sätt.
    • ConfigMap tas bort om Kubernetes-providern för appkonfiguration avinstalleras.
  4. Följ anvisningarna för att använda arbetsbelastningsidentiteten för att autentisera med appkonfigurationsarkivet. Uppdatera filen appConfigurationProvider.yaml genom att serviceAccountName ersätta fältet med namnet på det tjänstkonto som du skapade. Mer information om andra autentiseringsmetoder finns i exemplen i avsnittet Autentisering .

  5. Uppdatera filen deployment.yaml i distributionskatalogen så att ConfigMap configmap-created-by-appconfig-provider används som en monterad datavolym. Det är viktigt att se till att matchar angivna volumeMounts.mountPath WORKDIR i din Dockerfile och konfigurationskatalogen som skapades tidigare.

    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. Kör följande kommando för att distribuera ändringarna. Ersätt namnområdet om du använder ditt befintliga AKS-program.

    kubectl apply -f ./Deployment -n appconfig-demo
    
  7. Uppdatera webbläsaren. Sidan visar uppdaterat innehåll.

    Skärmbild som visar Kubernetes-providern när du har använt configMap.

Felsökning

Om du inte ser att programmet hämtar data från appkonfigurationsarkivet kör du följande kommando för att verifiera att ConfigMap har skapats korrekt.

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

Om ConfigMap inte har skapats kör du följande kommando för att hämta datahämtningsstatusen.

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

Om Kubernetes-providern för Azure App Configuration hämtade data från appkonfigurationsarkivet phase ska egenskapen under statusavsnittet i utdata vara COMPLETE, enligt följande exempel.

$ 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

Om fasen inte COMPLETEär hämtas inte data från appkonfigurationsarkivet korrekt. Kör följande kommando för att visa loggarna för Kubernetes-providern för Azure App Configuration.

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

Använd loggarna för ytterligare felsökning. Se avsnittet Vanliga frågor och svar om vanliga problem.

Vanliga frågor

Varför genereras inte ConfigMap eller hemligheten?

Du kan följa stegen i felsökningsguiden för att samla in loggar för detaljerad felinformation. Här är några vanliga orsaker.

  • SVAR 403: 403 Förbjudet: Den konfigurerade identiteten saknar de behörigheter som krävs för att få åtkomst till App Configuration Store. I avsnittet Autentisering finns exempel som matchar den identitet som du använder.
  • En Key Vault-referens finns i App Configuration, men "spec.secret" har inte konfigurerats: En eller flera Key Vault-referenser ingår i de valda nyckelvärdena, men autentiseringsinformationen för Key Vaults tillhandahålls inte. För att upprätthålla konfigurationens integritet går det inte att läsa in hela konfigurationen. Konfigurera avsnittet spec.secret för att tillhandahålla nödvändig autentiseringsinformation. Exempel och mer information finns i Key Vault-referens .

Varför innehåller den genererade ConfigMap inte förväntade data?

Se till att du anger rätt nyckel/värde-väljare för att matcha förväntade data. Om inga väljare har angetts laddas alla nyckelvärden utan etikett ned från appkonfigurationsarkivet. När du använder ett nyckelfilter kontrollerar du att det matchar prefixet för dina förväntade nyckelvärden. Om dina nyckelvärden har etiketter måste du ange etikettfiltret i väljarna. Fler exempel finns i dokumentationen för val av nyckelvärde.

Hur kan jag anpassa installationen av Kubernetes-providern för Azure App Configuration?

Du kan anpassa installationen genom att ange ytterligare Helm-värden när du installerar Kubernetes-providern för Azure App Configuration. Du kan till exempel ange loggnivån, konfigurera providern så att den körs på en specifik nod eller inaktivera arbetsbelastningsidentiteten. Mer information finns i installationsguiden .

Så här utlöser du uppdatering på begäran av ConfigMap och hemlighet

Du kan konfigurera automatisk datauppdatering, men det finns tillfällen då du kanske vill utlösa en uppdatering på begäran för att hämta de senaste data från App Configuration och Key Vault. För att göra detta kan du starta om distributionen av Kubernetes-providerstyrenheten för Azure App Configuration. Kubernetes-providern kommer sedan att stämma av och uppdatera ConfigMap och Secret med de senaste data från ditt App Configuration Store och Key Vault.

Vi rekommenderar inte att du tar bort eller ändrar den ConfigMap och hemlighet som genereras av Kubernetes-providern. Även om nya genereras från de senaste data kan detta orsaka driftstopp för dina program i händelse av fel.

Varför kan jag inte autentisera med Azure App Configuration med hjälp av arbetsbelastningsidentitet när jag har uppgraderat providern till version 2.0.0?

Från och med version 2.0.0 krävs ett tjänstkonto som tillhandahålls av användaren för autentisering med Azure App Configuration med hjälp av arbetsbelastningsidentitet. Den här ändringen förbättrar säkerheten genom namnområdesisolering. Tidigare användes en Kubernetes-providerns tjänstkonto för alla namnområden. Uppdaterade instruktioner finns i dokumentationen om hur du använder arbetsbelastningsidentitet. Om du behöver tid att migrera när du uppgraderar till version 2.0.0 kan du tillfälligt ställa in workloadIdentity.globalServiceAccountEnabled=true under providerinstallationen. Observera att stödet för att använda leverantörens tjänstkonto kommer att bli inaktuellt i en framtida version.

Rensa resurser

Avinstallera Kubernetes-providern för appkonfiguration från AKS-klustret om du vill behålla AKS-klustret.

helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system

Om du inte vill fortsätta använda resurserna som skapas i den här artikeln tar du bort resursgruppen som du skapade här för att undvika avgifter.

Viktigt!

Att ta bort en resursgrupp kan inte ångras. Resursgruppen och alla resurser i den tas bort permanent. Se till att du inte oavsiktligt tar bort fel resursgrupp eller resurser. Om du har skapat resurserna för den här artikeln i en resursgrupp som innehåller andra resurser som du vill behålla tar du bort varje resurs individuellt från respektive fönster i stället för att ta bort resursgruppen.

  1. Logga in på Azure Portal och välj Resursgrupper.
  2. I rutan Filtrera efter namn anger du namnet på resursgruppen.
  3. I resultatlistan väljer du resursgruppens namn för att se en översikt.
  4. Välj Ta bort resursgrupp.
  5. Du blir ombedd att bekräfta borttagningen av resursgruppen. Ange namnet på resursgruppen för att bekräfta och välj Ta bort.

Efter en liten stund tas resursgruppen och alla dess resurser bort.

Kommentar

Om du använder Azure Developer CLI för att konfigurera resurserna kan du köra azd down kommandot för att ta bort alla resurser som skapats av mallen azure-appconfig-aks .

Nästa steg

I den här snabbstarten kommer du att göra följande:

  • Skapade ett program som körs i Azure Kubernetes Service (AKS).
  • Anslut ditt AKS-kluster till appkonfigurationsarkivet med hjälp av Kubernetes-providern för appkonfiguration.
  • Skapade en ConfigMap med data från appkonfigurationsarkivet.
  • Körde programmet med konfiguration från appkonfigurationsarkivet utan att ändra programkoden.

Om du vill lära dig hur du uppdaterar dina AKS-arbetsbelastningar för att dynamiskt uppdatera konfigurationen fortsätter du till nästa självstudie.

Mer information om Kubernetes-providern för Azure App Configuration finns i Referens för Azure App Configuration Kubernetes Provider.