Udostępnij za pośrednictwem


Szybki start: korzystanie z konfiguracji aplikacja systemu Azure w usłudze Azure Kubernetes Service

Na platformie Kubernetes skonfigurujesz zasobniki do korzystania z konfiguracji z obiektów ConfigMap. Umożliwia oddzielenie konfiguracji z obrazów kontenerów, dzięki czemu aplikacje można łatwo przenosić. aplikacja systemu Azure Configuration Kubernetes Provider może konstruować ConfigMaps i Secrets z kluczy-wartości i odwołań usługi Key Vault w konfiguracji aplikacja systemu Azure. Umożliwia korzystanie z usługi aplikacja systemu Azure Configuration dla scentralizowanego magazynu i zarządzania konfiguracją bez żadnych zmian w kodzie aplikacji.

ConfigMap można używać jako zmiennych środowiskowych lub zainstalowanego pliku. W tym przewodniku Szybki start dołączysz aplikacja systemu Azure Configuration Kubernetes Provider w obciążeniu usługi Azure Kubernetes Service, w którym uruchamiasz prostą aplikację ASP.NET Core korzystającą z konfiguracji z pliku JSON.

Napiwek

Zobacz opcje obciążeń hostowanych na platformie Kubernetes, aby uzyskać dostęp do konfiguracji aplikacja systemu Azure.

Uwaga

Ten przewodnik Szybki start przeprowadzi Cię przez proces konfigurowania dostawcy aplikacja systemu Azure Configuration Kubernetes. Opcjonalnie możesz użyć następujących poleceń interfejsu wiersza polecenia dla deweloperów platformy Azure z szablonem azure-appconfig-aks , aby aprowizować zasoby platformy Azure i wdrożyć przykładową aplikację używaną przez ten przewodnik Szybki start. Aby uzyskać więcej informacji na temat tego szablonu, odwiedź repozytorium azure-appconfig-aks w witrynie GitHub.

azd init -t azure-appconfig-aks
azd up

Wymagania wstępne

Tworzenie aplikacji uruchomionej w usłudze AKS

W tej sekcji utworzysz prostą aplikację internetową ASP.NET Core działającą w usłudze Azure Kubernetes Service (AKS). Aplikacja odczytuje konfigurację z lokalnego pliku JSON. W następnej sekcji włączysz korzystanie z konfiguracji z aplikacja systemu Azure Configuration bez zmiany kodu aplikacji. Jeśli masz już aplikację usługi AKS, która odczytuje konfigurację z pliku, pomiń tę sekcję i przejdź do tematu Use App Configuration Kubernetes Provider (Użyj dostawcy Kubernetes konfiguracji aplikacji). Musisz tylko upewnić się, że plik konfiguracji wygenerowany przez dostawcę jest zgodny ze ścieżką pliku używaną przez aplikację.

Tworzenie aplikacji

  1. Użyj interfejsu wiersza polecenia platformy .NET i uruchom następujące polecenie, aby utworzyć nowy projekt aplikacji internetowej platformy ASP.NET Core w nowym katalogu MyWebApp :

    dotnet new webapp --output MyWebApp --framework net6.0
    
  2. Otwórz plik Index.cshtml w katalogu Pages i zaktualizuj zawartość przy użyciu następującego kodu.

    @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. Utwórz katalog konfiguracji w katalogu głównym projektu i dodaj do niego plik mysettings.json z następującą zawartością.

    {
      "Settings": {
        "FontColor": "Black",
        "Message": "Message from the local configuration"
      }
    }
    
  4. Otwórz program.cs i dodaj plik JSON do źródła konfiguracji, wywołując metodę 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
    // ... ...
    

Konteneryzowanie aplikacji

  1. Uruchom polecenie dotnet publish, aby skompilować aplikację w trybie wydania i utworzyć zasoby w opublikowanym katalogu.

    dotnet publish -c Release -o published
    
  2. Utwórz plik o nazwie Dockerfile w katalogu głównym projektu, otwórz go w edytorze tekstów i wprowadź następującą zawartość. Plik Dockerfile to plik tekstowy, który nie ma rozszerzenia i służy do tworzenia obrazu kontenera.

    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
    WORKDIR /app
    COPY published/ ./
    ENTRYPOINT ["dotnet", "MyWebApp.dll"]
    
  3. Skompiluj obraz kontenera o nazwie aspnetapp , uruchamiając następujące polecenie.

    docker build --tag aspnetapp .
    

Wypychanie obrazu do usługi Azure Container Registry

  1. Uruchom polecenie az acr login, aby zalogować się do rejestru kontenerów. Poniższy przykład rejestruje się w rejestrze o nazwie myregistry. Zastąp nazwę rejestru twoimi.

    az acr login --name myregistry
    

    Polecenie zwraca wartość Login Succeeded po pomyślnym zalogowaniu.

  2. Użyj tagu platformy Docker, aby utworzyć myregistry.azurecr.io/aspnetapp:v1 tagu dla aplikacji aspnetapp obrazu.

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

    Napiwek

    Aby przejrzeć listę istniejących obrazów i tagów platformy Docker, uruchom polecenie docker image ls. W tym scenariuszu powinny zostać wyświetlone co najmniej dwa obrazy: aspnetapp i myregistry.azurecr.io/aspnetapp.

  3. Użyj polecenia docker push , aby przekazać obraz do rejestru kontenerów. Na przykład następujące polecenie wypycha obraz do repozytorium o nazwie aspnetapp z tagiem v1 w rejestrze myregistry.

    docker push myregistry.azurecr.io/aspnetapp:v1
    

Wdrażanie aplikacji

  1. Utwórz katalog wdrożenia w katalogu głównym projektu.

  2. Dodaj plik deployment.yaml do katalogu Wdrożenia z następującą zawartością, aby utworzyć wdrożenie. Zastąp wartość template.spec.containers.image wartości obrazem utworzonym w poprzednim 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. Dodaj plik service.yaml do katalogu Wdrożenia z następującą zawartością, aby utworzyć usługę LoadBalancer.

    apiVersion: v1
    kind: Service
    metadata:
      name: aspnetapp-demo-service
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: aspnetapp-demo
    
  4. Uruchom następujące polecenie, aby wdrożyć aplikację w klastrze usługi AKS.

    kubectl create namespace appconfig-demo
    kubectl apply -f ./Deployment -n appconfig-demo
    
  5. Uruchom następujące polecenie i uzyskaj zewnętrzny adres IP uwidoczniony przez usługę LoadBalancer.

    kubectl get service aspnetapp-demo-service -n appconfig-demo
    
  6. Otwórz okno przeglądarki i przejdź do adresu IP uzyskanego w poprzednim kroku. Strona internetowa wygląda następująco:

    Zrzut ekranu przedstawiający dostawcę Kubernetes przed użyciem narzędzia configMap.

Korzystanie z dostawcy Kubernetes konfiguracji aplikacji

Teraz, gdy masz aplikację działającą w usłudze AKS, wdrożysz dostawcę Kubernetes usługi App Configuration w klastrze usługi AKS działającym jako kontroler Kubernetes. Dostawca pobiera dane ze sklepu App Configuration i tworzy obiekt ConfigMap, który jest używany jako plik JSON zainstalowany w woluminie danych.

Konfigurowanie magazynu konfiguracji aplikacja systemu Azure

Dodaj następujące wartości klucza do magazynu App Configuration i pozostaw wartość Etykieta i Typ zawartości z ich wartościami domyślnymi. Aby uzyskać więcej informacji na temat dodawania wartości klucz-wartości do magazynu przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia, przejdź do artykułu Create a key-value (Tworzenie wartości klucza).

Klawisz Wartość
Ustawienia:FontColor Green (Zielony)
Ustawienia:Komunikat Witaj z konfiguracji aplikacja systemu Azure

Konfigurowanie dostawcy kubernetes konfiguracji aplikacji

  1. Uruchom następujące polecenie, aby uzyskać poświadczenia dostępu dla klastra usługi AKS. Zastąp wartość parametrów name i resource-group wystąpieniem usługi AKS:

    az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
    
  2. Zainstaluj dostawcę kubernetes konfiguracji aplikacja systemu Azure w klastrze usługi AKS przy użyciu polecenia helm:

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

    Napiwek

    Dostawca Kubernetes konfiguracji aplikacji jest również dostępny jako rozszerzenie usługi AKS. Ta integracja umożliwia bezproblemową instalację i zarządzanie za pośrednictwem interfejsu wiersza polecenia platformy Azure, szablonów usługi ARM lub szablonów Bicep. Użycie rozszerzenia AKS ułatwia automatyczne aktualizacje wersji pomocniczych/poprawek, zapewniając, że system jest zawsze aktualny. Aby uzyskać szczegółowe instrukcje dotyczące instalacji, zapoznaj się z rozszerzeniem aplikacja systemu Azure Configuration dla usługi Azure Kubernetes Service.

  3. Dodaj plik appConfigurationProvider.yaml do katalogu Deployment z następującą zawartością, aby utworzyć AzureAppConfigurationProvider zasób. AzureAppConfigurationProviderto zasób niestandardowy, który definiuje dane do pobrania z magazynu konfiguracji aplikacja systemu Azure i tworzy obiekt 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>
    

    Zastąp wartość endpoint pola punktem końcowym magazynu konfiguracji aplikacja systemu Azure. Przejdź do następnego kroku, aby zaktualizować sekcję auth przy użyciu informacji uwierzytelniania.

    Uwaga

    AzureAppConfigurationProvider jest obiektem deklaratywnego interfejsu API. Definiuje żądany stan obiektu ConfigMap utworzonego na podstawie danych w magazynie usługi App Configuration z następującym zachowaniem:

    • Nie można utworzyć obiektu ConfigMap, jeśli ConfigMap o tej samej nazwie już istnieje w tej samej przestrzeni nazw.
    • Obiekt ConfigMap zostanie zresetowany na podstawie obecnych danych w magazynie usługi App Configuration, jeśli zostaną usunięte lub zmodyfikowane w jakikolwiek inny sposób.
    • Obiekt ConfigMap zostanie usunięty, jeśli dostawca kubernetes konfiguracji aplikacji zostanie odinstalowany.
  4. Postępuj zgodnie z instrukcjami, aby użyć tożsamości obciążenia do uwierzytelniania w magazynie usługi App Configuration. Zaktualizuj plik appConfigurationProvider.yaml, serviceAccountName zastępując pole nazwą utworzonego konta usługi. Aby uzyskać więcej informacji na temat innych metod uwierzytelniania, zapoznaj się z przykładami w sekcji Uwierzytelnianie .

  5. Zaktualizuj plik deployment.yaml w katalogu Deployment, aby użyć obiektu ConfigMap configmap-created-by-appconfig-provider jako zainstalowanego woluminu danych. Należy upewnić się, że element volumeMounts.mountPath jest zgodny z WORKDIR określonym elementem w pliku Dockerfile i utworzonym wcześniej katalogem konfiguracji .

    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. Uruchom następujące polecenie, aby wdrożyć zmiany. Zastąp przestrzeń nazw, jeśli używasz istniejącej aplikacji usługi AKS.

    kubectl apply -f ./Deployment -n appconfig-demo
    
  7. Odśwież przeglądarkę. Na stronie jest wyświetlana zaktualizowana zawartość.

    Zrzut ekranu przedstawiający dostawcę Kubernetes po użyciu narzędzia configMap.

Rozwiązywanie problemów

Jeśli nie widzisz, że aplikacja pobiera dane ze sklepu App Configuration Store, uruchom następujące polecenie, aby sprawdzić, czy mapa konfiguracji została utworzona prawidłowo.

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

Jeśli nie utworzono obiektu ConfigMap, uruchom następujące polecenie, aby pobrać stan pobierania danych.

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

Jeśli dostawca kubernetes konfiguracji aplikacja systemu Azure pomyślnie pobrał dane z magazynu usługi App Configuration, phase właściwość w sekcji stanu danych wyjściowych powinna być COMPLETEnastępująca, jak pokazano w poniższym przykładzie.

$ 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

Jeśli faza nie COMPLETEjest równa , dane nie są prawidłowo pobierane z magazynu usługi App Configuration. Uruchom następujące polecenie, aby wyświetlić dzienniki dostawcy kubernetes konfiguracji aplikacja systemu Azure.

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

Użyj dzienników, aby uzyskać dalsze rozwiązywanie problemów. Zapoznaj się z sekcją Często zadawane pytania , aby zapoznać się z typowymi problemami.

Często zadawane pytania

Dlaczego nie jest generowany element ConfigMap lub Wpis tajny?

Możesz wykonać kroki opisane w przewodniku rozwiązywania problemów, aby zebrać dzienniki w celu uzyskania szczegółowych informacji o błędzie. Oto kilka typowych przyczyn.

  • RESPONSE 403: 403 Zabronione: Skonfigurowana tożsamość nie ma niezbędnych uprawnień dostępu do magazynu App Configuration. Zapoznaj się z sekcją Uwierzytelnianie , aby zapoznać się z przykładami zgodnymi z używaną tożsamością.
  • Odwołanie do usługi Key Vault znajduje się w usłudze App Configuration, ale nie skonfigurowano "spec.secret": co najmniej jedno odwołanie do usługi Key Vault znajduje się w wybranych wartościach kluczy, ale nie podano informacji o uwierzytelnianiu dla usługi Key Vault. Aby zachować integralność konfiguracji, nie można załadować całej konfiguracji. Skonfiguruj sekcję w spec.secret celu udostępnienia niezbędnych informacji dotyczących uwierzytelniania. Aby uzyskać przykłady i więcej informacji, zobacz Dokumentacja usługi Key Vault.

Dlaczego wygenerowana mapa ConfigMap nie zawiera oczekiwanych danych?

Upewnij się, że określono poprawne selektory klucz-wartość, aby odpowiadały oczekiwanym danym. Jeśli nie określono selektorów, wszystkie wartości kluczy bez etykiety zostaną pobrane ze sklepu App Configuration. W przypadku korzystania z filtru klucza sprawdź, czy jest zgodny z prefiksem oczekiwanych wartości klucza. Jeśli twoje wartości kluczy mają etykiety, pamiętaj, aby określić filtr etykiet w selektorach. Aby uzyskać więcej przykładów, zapoznaj się z dokumentacją wyboru klucz-wartość.

Jak dostosować instalację dostawcy kubernetes konfiguracji aplikacja systemu Azure?

Instalację można dostosować, podając dodatkowe wartości programu Helm podczas instalowania dostawcy kubernetes konfiguracji aplikacja systemu Azure. Można na przykład ustawić poziom dziennika, skonfigurować dostawcę do uruchamiania w określonym węźle lub wyłączyć tożsamość obciążenia. Aby uzyskać więcej informacji, zapoznaj się z przewodnikiem instalacji.

Jak wyzwalać odświeżanie na żądanie obiektu ConfigMap i wpisu tajnego

Chociaż możesz skonfigurować automatyczne odświeżanie danych, czasami możesz wyzwolić odświeżanie na żądanie, aby pobrać najnowsze dane z usługi App Configuration i Key Vault. W tym celu można ponownie uruchomić wdrożenie kontrolera dostawcy platformy Kubernetes konfiguracji aplikacja systemu Azure. Następnie dostawca Kubernetes uzgodni i zaktualizuje ConfigMap i Secret najnowsze dane ze sklepu App Configuration Store i Key Vault.

Nie zaleca się usuwania ani modyfikowania obiektu ConfigMap i wpisu tajnego wygenerowanego przez dostawcę Kubernetes. Chociaż nowe będą generowane na podstawie najnowszych danych, może to spowodować przestój aplikacji w przypadku awarii.

Dlaczego nie mogę uwierzytelnić się przy użyciu usługi aplikacja systemu Azure Configuration przy użyciu tożsamości obciążenia po uaktualnieniu dostawcy do wersji 2.0.0?

Począwszy od wersji 2.0.0, do uwierzytelniania przy użyciu aplikacja systemu Azure Configuration przy użyciu tożsamości obciążenia wymagane jest konto usługi dostarczane przez użytkownika. Ta zmiana zwiększa bezpieczeństwo dzięki izolacji przestrzeni nazw. Wcześniej konto usługi dostawcy Kubernetes było używane dla wszystkich przestrzeni nazw. Aby uzyskać zaktualizowane instrukcje, zobacz dokumentację dotyczącą korzystania z tożsamości obciążenia. Jeśli potrzebujesz czasu na migrację podczas uaktualniania do wersji 2.0.0, możesz tymczasowo ustawić workloadIdentity.globalServiceAccountEnabled=true podczas instalacji dostawcy. Pamiętaj, że obsługa korzystania z konta usługi dostawcy zostanie wycofana w przyszłej wersji.

Czyszczenie zasobów

Odinstaluj dostawcę Kubernetes usługi App Configuration z klastra usługi AKS, jeśli chcesz zachować klaster usługi AKS.

helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system

Jeśli nie chcesz nadal korzystać z zasobów utworzonych w tym artykule, usuń utworzoną tutaj grupę zasobów, aby uniknąć naliczania opłat.

Ważne

Usunięcie grupy zasobów jest nieodwracalne. Grupa zasobów i wszystkie zasoby w niej są trwale usuwane. Upewnij się, że nie usuniesz przypadkowo nieprawidłowej grupy zasobów ani zasobów. Jeśli zasoby dla tego artykułu zostały utworzone w grupie zasobów zawierającej inne zasoby, które chcesz zachować, usuń każdy zasób oddzielnie z odpowiedniego okienka zamiast usuwać grupę zasobów.

  1. Zaloguj się do witryny Azure Portal i wybierz pozycję Grupy zasobów.
  2. W polu Filtruj według nazwy wprowadź nazwę grupy zasobów.
  3. Na liście wyników wybierz nazwę grupy zasobów, aby wyświetlić przegląd.
  4. Wybierz pozycję Usuń grupę zasobów.
  5. Zobaczysz prośbę o potwierdzenie usunięcia grupy zasobów. Wprowadź nazwę grupy zasobów, aby potwierdzić, a następnie wybierz pozycję Usuń.

Po kilku chwilach grupa zasobów i wszystkie jej zasoby zostaną usunięte.

Uwaga

Jeśli używasz interfejsu wiersza polecenia dla deweloperów platformy Azure do konfigurowania zasobów, możesz uruchomić azd down polecenie , aby usunąć wszystkie zasoby utworzone przez azure-appconfig-aks szablon.

Następne kroki

W ramach tego przewodnika Szybki start wykonasz następujące czynności:

  • Utworzono aplikację działającą w usłudze Azure Kubernetes Service (AKS).
  • Połączono klaster usługi AKS z magazynem App Configuration przy użyciu dostawcy kubernetes usługi App Configuration.
  • Utworzono aplikację ConfigMap z danymi ze sklepu App Configuration.
  • Uruchom aplikację z konfiguracją ze sklepu App Configuration bez zmiany kodu aplikacji.

Aby dowiedzieć się, jak zaktualizować obciążenia usługi AKS w celu dynamicznego odświeżania konfiguracji, przejdź do następnego samouczka.

Aby dowiedzieć się więcej na temat dostawcy platformy Kubernetes konfiguracji aplikacja systemu Azure, zobacz aplikacja systemu Azure Configuration Kubernetes Provider reference (Dokumentacja dostawcy usługi Kubernetes konfiguracji platformy Kubernetes).