Sdílet prostřednictvím


Rychlý start: Použití konfigurace Aplikace Azure ve službě Azure Kubernetes Service

V Kubernetes nastavíte pody tak, aby spotřebováovaly konfiguraci z objektů ConfigMap. Umožňuje oddělit konfiguraci od imagí kontejnerů a snadno přenášet aplikace. Aplikace Azure zprostředkovatel konfigurace Kubernetes může v konfiguraci Aplikace Azure Configuration vytvářet objekty ConfigMap a tajné kódy z hodnot klíčů a odkazů služby Key Vault. Umožňuje využít výhod konfigurace Aplikace Azure pro centralizované úložiště a správu konfigurace bez jakýchkoli změn kódu aplikace.

Objekt ConfigMap lze použít jako proměnné prostředí nebo připojený soubor. V tomto rychlém startu zahrnete do úlohy Azure Kubernetes Service zprostředkovatele Aplikace Azure Konfigurace Kubernetes Service, kde spustíte jednoduchou konfiguraci ASP.NET Core využívající konfiguraci ze souboru JSON.

Tip

Viz možnosti pro úlohy hostované v Kubernetes pro přístup ke konfiguraci Aplikace Azure.

Poznámka:

Tento rychlý start vás provede nastavením poskytovatele Aplikace Azure Configuration Kubernetes. Volitelně můžete pomocí následujících příkazů Azure Developer CLI se šablonou azure-appconfig-aks zřídit prostředky Azure a nasadit ukázkovou aplikaci používanou v tomto rychlém startu. Další informace o této šabloně najdete v úložišti azure-appconfig-aks na GitHubu.

azd init -t azure-appconfig-aks
azd up

Požadavky

Vytvoření aplikace spuštěné v AKS

V této části vytvoříte jednoduchou webovou aplikaci ASP.NET Core běžící ve službě Azure Kubernetes Service (AKS). Aplikace čte konfiguraci z místního souboru JSON. V další části ji umožníte využívat konfiguraci z Aplikace Azure Konfigurace beze změny kódu aplikace. Pokud už máte aplikaci AKS, která čte konfiguraci ze souboru, přeskočte tuto část a přejděte na Použití zprostředkovatele Kubernetes konfigurace aplikace. Musíte zajistit, aby konfigurační soubor vygenerovaný poskytovatelem odpovídal cestě k souboru používanému vaší aplikací.

Vytvoření aplikace

  1. Pomocí rozhraní příkazového řádku .NET (CLI) a spuštěním následujícího příkazu vytvořte nový projekt webové aplikace ASP.NET Core v novém adresáři MyWebApp :

    dotnet new webapp --output MyWebApp --framework net6.0
    
  2. Otevřete soubor Index.cshtml v adresáři Pages a aktualizujte obsah následujícím kódem.

    @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. V kořenovém adresáři projektu vytvořte konfigurační adresář a přidejte do něj mysettings.json soubor s následujícím obsahem.

    {
      "Settings": {
        "FontColor": "Black",
        "Message": "Message from the local configuration"
      }
    }
    
  4. Otevřete program.cs a přidejte soubor JSON do zdroje konfigurace voláním AddJsonFile metody.

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

Kontejnerizace aplikace

  1. Spuštěním příkazu dotnet publish sestavte aplikaci v režimu vydání a vytvořte prostředky v publikovaném adresáři.

    dotnet publish -c Release -o published
    
  2. Vytvořte soubor s názvem Dockerfile v kořenovém adresáři projektu, otevřete ho v textovém editoru a zadejte následující obsah. Soubor Dockerfile je textový soubor, který nemá příponu a slouží k vytvoření image kontejneru.

    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
    WORKDIR /app
    COPY published/ ./
    ENTRYPOINT ["dotnet", "MyWebApp.dll"]
    
  3. Spuštěním následujícího příkazu sestavte image kontejneru s názvem aspnetapp .

    docker build --tag aspnetapp .
    

Nahrání image do služby Azure Container Registry

  1. Spuštěním příkazu az acr login se přihlaste do registru kontejneru. Následující příklad se přihlásí do registru s názvem myregistry. Nahraďte název registru vaším názvem.

    az acr login --name myregistry
    

    Příkaz se vrátí Login Succeeded po úspěšném přihlášení.

  2. Značka Dockeru slouží k vytvoření značky myregistry.azurecr.io/aspnetapp:v1 pro image aspnetapp.

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

    Tip

    Pokud chcete zkontrolovat seznam existujících imagí a značek Dockeru, spusťte docker image lspříkaz . V tomto scénáři byste měli vidět alespoň dva obrázky: aspnetapp a myregistry.azurecr.io/aspnetapp.

  3. Pomocí docker push nahrajte image do registru kontejneru. Například následující příkaz nasdílí image do úložiště s názvem aspnetapp se značkou v1 pod registrem myregistry.

    docker push myregistry.azurecr.io/aspnetapp:v1
    

Nasazení aplikace

  1. Vytvořte adresář nasazení v kořenovém adresáři projektu.

  2. Přidejte do adresáře nasazení soubor deployment.yaml s následujícím obsahem pro vytvoření nasazení. Nahraďte hodnotu template.spec.containers.image obrázkem, který jste vytvořili v předchozím kroku.

    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. Do adresáře nasazení přidejte soubor service.yaml s následujícím obsahem pro vytvoření služby LoadBalancer.

    apiVersion: v1
    kind: Service
    metadata:
      name: aspnetapp-demo-service
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: aspnetapp-demo
    
  4. Spuštěním následujícího příkazu nasaďte aplikaci do clusteru AKS.

    kubectl create namespace appconfig-demo
    kubectl apply -f ./Deployment -n appconfig-demo
    
  5. Spusťte následující příkaz a získejte externí IP adresu vystavenou službou LoadBalancer.

    kubectl get service aspnetapp-demo-service -n appconfig-demo
    
  6. Otevřete okno prohlížeče a přejděte na IP adresu získanou v předchozím kroku. Webová stránka vypadá takto:

    Snímek obrazovky zobrazujícího zprostředkovatele Kubernetes před použitím objektu configMap

Použití zprostředkovatele Kubernetes pro konfiguraci aplikací

Teď, když máte aplikaci spuštěnou v AKS, nasadíte zprostředkovatele Kubernetes konfigurace aplikace do clusteru AKS spuštěného jako kontroler Kubernetes. Zprostředkovatel načte data z úložiště App Configuration Store a vytvoří objekt ConfigMap, který je použitelný jako soubor JSON připojený ke svazku dat.

Nastavení úložiště konfigurace Aplikace Azure

Přidejte následující hodnoty klíč-hodnoty do obchodu App Configuration a ponechte popisek a typ obsahu s jejich výchozími hodnotami. Další informace o tom, jak přidat hodnoty klíčů do úložiště pomocí webu Azure Portal nebo rozhraní příkazového řádku, najdete v tématu Vytvoření hodnoty klíče.

Klíč Hodnota
Nastavení:FontColor Zelený
Nastavení:Zpráva Dobrý den z konfigurace Aplikace Azure

Nastavení zprostředkovatele Kubernetes konfigurace aplikace

  1. Spuštěním následujícího příkazu získejte přihlašovací údaje pro přístup ke clusteru AKS. Nahraďte hodnotu name a resource-group parametry vaší instancí AKS:

    az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
    
  2. Nainstalujte do clusteru AKS poskytovatele Aplikace Azure Configuration Kubernetes pomocíhelm:

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

    Tip

    Poskytovatel Kubernetes konfigurace aplikace je také k dispozici jako rozšíření AKS. Tato integrace umožňuje bezproblémovou instalaci a správu prostřednictvím Azure CLI, šablon ARM nebo šablon Bicep. Použití rozšíření AKS usnadňuje automatické aktualizace podverze/opravy a zajišťuje tak, aby byl váš systém vždy aktuální. Podrobné pokyny k instalaci najdete v rozšíření konfigurace Aplikace Azure pro Azure Kubernetes Service.

  3. Do adresáře nasazení přidejte soubor appConfigurationProvider.yaml s následujícím obsahem pro vytvoření AzureAppConfigurationProvider prostředku. AzureAppConfigurationProviderje vlastní prostředek, který definuje, jaká data se mají stáhnout z úložiště konfigurace Aplikace Azure a vytvoří objekt 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>
    

    Nahraďte hodnotu endpoint pole koncovým bodem vašeho úložiště konfigurace Aplikace Azure. Přejděte k dalšímu kroku a aktualizujte auth oddíl ověřovacími údaji.

    Poznámka:

    AzureAppConfigurationProvider je deklarativní objekt rozhraní API. Definuje požadovaný stav objektu ConfigMap vytvořeného z dat v obchodě App Configuration Store s následujícím chováním:

    • Objekt ConfigMap se nepodaří vytvořit, pokud objekt ConfigMap se stejným názvem již existuje ve stejném oboru názvů.
    • Objekt ConfigMap se resetuje na základě aktuálních dat v obchodě App Configuration Store, pokud se odstraní nebo upraví jiným způsobem.
    • Konfigurační mapa se odstraní, pokud se odinstaluje zprostředkovatel Kubernetes konfigurace aplikace.
  4. Podle pokynů použijte identitu úlohy k ověření ve službě App Configuration Store. Aktualizujte soubor appConfigurationProvider.yaml nahrazením serviceAccountName pole názvem účtu služby, který jste vytvořili. Další informace o jiných metodách ověřování najdete v příkladech v části Ověřování .

  5. Aktualizujte soubor deployment.yaml v adresáři nasazení tak, aby jako připojený datový svazek používal ConfigMapconfigmap-created-by-appconfig-provider. Je důležité zajistit, aby volumeMounts.mountPath odpovídaly zadanému WORKDIR souboru Dockerfile a konfiguračnímu adresáři vytvořenému dříve.

    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. Spuštěním následujícího příkazu nasaďte změny. Pokud používáte stávající aplikaci AKS, nahraďte obor názvů.

    kubectl apply -f ./Deployment -n appconfig-demo
    
  7. Aktualizujte prohlížeč. Stránka zobrazuje aktualizovaný obsah.

    Snímek obrazovky zobrazujícího zprostředkovatele Kubernetes po použití objektu configMap

Řešení problému

Pokud nevidíte, že vaše aplikace vyzvedne data z obchodu App Configuration Store, spuštěním následujícího příkazu ověřte, že je objekt ConfigMap vytvořen správně.

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

Pokud objekt ConfigMap není vytvořen, spuštěním následujícího příkazu získejte stav načtení dat.

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

Pokud poskytovatel kubernetes konfigurace Aplikace Azure úspěšně načetl data z úložiště App Configuration Store, phase měla by COMPLETEbýt vlastnost v části stavu výstupu , jak je znázorněno v následujícím příkladu.

$ 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

Pokud fáze není COMPLETE, data se nestáhnou z vašeho obchodu App Configuration správně. Spuštěním následujícího příkazu zobrazte protokoly poskytovatele Aplikace Azure Configuration Kubernetes.

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

Protokoly použijte k dalšímu řešení potíží. Běžné problémy najdete v části Nejčastější dotazy .

Často kladené dotazy

Proč se negeneruje objekt ConfigMap nebo tajný klíč?

Podrobné informace o chybách najdete v průvodci odstraňováním potíží a shromáždit protokoly. Tady jsou některé běžné příčiny.

  • ODPOVĚĎ 403: 403 Zakázáno: Nakonfigurovaná identita nemá potřebná oprávnění pro přístup ke službě App Configuration Store. Příklady, které odpovídají identitě, kterou používáte, najdete v části Ověřování .
  • Referenční informace ke službě Key Vault se nacházejí v konfiguraci aplikace, ale "spec.secret" nebyla nakonfigurována: Do vybraných hodnot klíčů jsou zahrnuty některé odkazy služby Key Vault, ale nezadá se ověřovací informace pro trezory klíčů. Kvůli zachování integrity konfigurace se celá konfigurace nenačte. Nakonfigurujte oddíl tak spec.secret , aby poskytoval potřebné ověřovací informace. Příklady a další informace najdete v referenčních informacích ke službě Key Vault .

Proč vygenerovaný objekt ConfigMap neobsahuje očekávaná data?

Ujistěte se, že zadáte správné selektory klíč-hodnota tak, aby odpovídaly očekávaným datům. Pokud nejsou zadány žádné selektory, všechny hodnoty klíčů bez popisku se stáhnou z obchodu App Configuration Store. Pokud používáte filtr klíčů, ověřte, že odpovídá předponě očekávaných hodnot klíče. Pokud mají hodnoty klíčů popisky, nezapomeňte v selektorech zadat filtr popisků. Další příklady najdete v dokumentaci k výběru klíč-hodnota.

Jak můžu přizpůsobit instalaci poskytovatele kubernetes konfigurace Aplikace Azure?

Instalaci můžete přizpůsobit poskytnutím dalších hodnot Helm při instalaci poskytovatele Aplikace Azure Configuration Kubernetes. Můžete například nastavit úroveň protokolu, nakonfigurovat zprostředkovatele tak, aby běžel na konkrétním uzlu, nebo zakázat identitu úlohy. Další informace najdete v průvodci instalací.

Proč se po upgradu zprostředkovatele na verzi 2.0.0 nemůžu ověřit pomocí konfigurace Aplikace Azure pomocí identity úloh?

Od verze 2.0.0 se pro ověřování pomocí konfigurace Aplikace Azure pomocí identity úlohy vyžaduje účet služby poskytovaný uživatelem. Tato změna zlepšuje zabezpečení prostřednictvím izolace oboru názvů. Dříve se pro všechny obory názvů použil účet služby poskytovatele Kubernetes. Aktualizované pokyny najdete v dokumentaci k používání identity úloh. Pokud potřebujete čas na migraci při upgradu na verzi 2.0.0, můžete během instalace zprostředkovatele dočasně nastavit workloadIdentity.globalServiceAccountEnabled=true . Upozorňujeme, že podpora použití účtu služby poskytovatele bude v budoucí verzi zastaralá.

Vyčištění prostředků

Pokud chcete zachovat cluster AKS, odinstalujte z clusteru AKS zprostředkovatele Kubernetes služby App Configuration.

helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system

Pokud nechcete dál používat prostředky vytvořené v tomto článku, odstraňte skupinu prostředků, kterou jste tady vytvořili, abyste se vyhnuli poplatkům.

Důležité

Odstranění skupiny prostředků je nevratné. Skupina prostředků a všechny prostředky v ní se trvale odstraní. Ujistěte se, že omylem neodstraníte nesprávnou skupinu prostředků nebo prostředky. Pokud jste vytvořili prostředky pro tento článek ve skupině prostředků, která obsahuje další prostředky, které chcete zachovat, odstraňte jednotlivé prostředky z příslušného podokna místo odstranění skupiny prostředků.

  1. Přihlaste se k webu Azure Portal a vyberte skupiny prostředků.
  2. Do pole Filtrovat podle názvu zadejte název vaší skupiny prostředků.
  3. V seznamu výsledků vyberte název skupiny prostředků, abyste zobrazili přehled.
  4. Vyberte Odstranit skupinu prostředků.
  5. Zobrazí se výzva k potvrzení odstranění skupiny prostředků. Potvrďte název skupiny prostředků a vyberte Odstranit.

Po chvíli se skupina prostředků a všechny její prostředky odstraní.

Poznámka:

Pokud k nastavení prostředků použijete Azure Developer CLI, můžete spuštěním azd down příkazu odstranit všechny prostředky vytvořené šablonou azure-appconfig-aks .

Další kroky

V tomto rychlém startu:

  • Vytvořili jste aplikaci spuštěnou ve službě Azure Kubernetes Service (AKS).
  • Připojili jste cluster AKS ke službě App Configuration Store pomocí zprostředkovatele Kubernetes konfigurace aplikace.
  • Vytvořili jste objekt ConfigMap s daty z obchodu App Configuration Store.
  • Spustili jste aplikaci s konfigurací z app Configuration Storu beze změny kódu aplikace.

Pokud chcete zjistit, jak aktualizovat úlohy AKS na dynamickou aktualizaci konfigurace, pokračujte dalším kurzem.

Další informace o poskytovateli Aplikace Azure Konfigurace Kubernetes najdete v tématu Aplikace Azure Referenční informace o poskytovateli konfigurace Kubernetes.