Краткое руководство. Использование Конфигурация приложений Azure в Служба Azure Kubernetes

В Kubernetes вы настроили модули pod для использования конфигурации из Config Карты. Это позволяет отделить конфигурацию от образов контейнеров, что упрощает перенос приложений. Конфигурация приложений Azure поставщик Kubernetes может создавать конфигурацию Карты и секреты из ссылок на ключи и Key Vault в Конфигурация приложений Azure. Это позволяет воспользоваться преимуществами Конфигурация приложений Azure для централизованного хранилища и управления конфигурацией без каких-либо изменений в коде приложения.

ConfigMap можно использовать в качестве переменных среды или подключенного файла. В этом кратком руководстве описано, как включить Конфигурация приложений Azure поставщика Kubernetes в рабочую нагрузку Служба Azure Kubernetes, в которой выполняется простое приложение ASP.NET Core, потребляющее конфигурацию из JSON-файла.

Совет

См. параметры рабочих нагрузок, размещенных в Kubernetes, для доступа к Конфигурация приложений Azure.

Примечание.

В этом кратком руководстве описана настройка Конфигурация приложений Azure поставщика Kubernetes. При необходимости можно использовать следующие команды интерфейса командной строки разработчика Azure с шаблоном azure-appconfig-aks для подготовки ресурсов Azure и развертывания примера приложения, используемого в этом кратком руководстве. Дополнительные сведения об этом шаблоне см. в репозитории azure-appconfig-aks на GitHub.

azd init -t azure-appconfig-aks
azd up

Необходимые компоненты

Создание приложения, работающего в AKS

В этом разделе вы создадите простое веб-приложение ASP.NET Core, работающее в Служба Azure Kubernetes (AKS). Приложение считывает конфигурацию из локального JSON-файла. В следующем разделе вы сможете использовать конфигурацию из Конфигурация приложений Azure без изменения кода приложения. Если у вас уже есть приложение AKS, которое считывает конфигурацию из файла, пропустите этот раздел и перейдите к разделу "Использовать Конфигурация приложений поставщик Kubernetes". Необходимо убедиться, что файл конфигурации, созданный поставщиком, соответствует пути к файлу, используемому приложением.

Создание приложения

  1. Используйте интерфейс командной строки .NET (CLI) и выполните следующую команду, чтобы создать проект веб-приложения ASP.NET Core в новом каталоге MyWebApp :

    dotnet new webapp --output MyWebApp --framework net6.0
    
  2. Откройте Index.cshtml в каталоге Pages и обновите содержимое следующим кодом.

    @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. Создайте каталог конфигурации в корне проекта и добавьте в него файл mysettings.json со следующим содержимым.

    {
      "Settings": {
        "FontColor": "Black",
        "Message": "Message from the local configuration"
      }
    }
    
  4. Откройте program.cs и добавьте JSON-файл в источник конфигурации, вызвав 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
    // ... ...
    

Помещение приложения в контейнер

  1. Выполните команду dotnet publish, чтобы создать приложение в режиме выпуска и создать ресурсы в опубликованном каталоге.

    dotnet publish -c Release -o published
    
  2. Создайте файл с именем Dockerfile в корне каталога проекта, откройте его в текстовом редакторе и введите следующее содержимое. Dockerfile — это текстовый файл, который не имеет расширения и используется для создания образа контейнера.

    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
    WORKDIR /app
    COPY published/ ./
    ENTRYPOINT ["dotnet", "MyWebApp.dll"]
    
  3. Создайте образ контейнера с именем aspnetapp , выполнив следующую команду.

    docker build --tag aspnetapp .
    

Принудительная отправка образов в Реестр контейнеров Azure

  1. Выполните команду az acr login, чтобы войти в реестр контейнеров. В следующем примере выполняется вход в реестр с именем myregistry. Замените имя реестра вашими.

    az acr login --name myregistry
    

    Команда возвращается Login Succeeded после успешного входа.

  2. Используйте тег Docker для создания тегаmyregistry.azurecr.io/aspnetapp:v1 для aspnetapp изображения.

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

    Совет

    Чтобы просмотреть список существующих образов и тегов Docker, выполните команду docker image ls. В этом сценарии должно отображаться по крайней мере два изображения: aspnetapp и myregistry.azurecr.io/aspnetapp.

  3. С помощью docker push-отправки образа в реестр контейнеров. Например, следующая команда отправляет образ в репозиторий с именем aspnetapp с тегом v1 в реестре myregistry.

    docker push myregistry.azurecr.io/aspnetapp:v1
    

Развертывание приложения

  1. Создайте каталог развертывания в корневом каталоге проекта.

  2. Добавьте файл deployment.yaml в каталог развертывания со следующим содержимым, чтобы создать развертывание. Замените значение изображения, созданного template.spec.containers.image на предыдущем шаге.

    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. Добавьте файл service.yaml в каталог развертывания со следующим содержимым, чтобы создать службу LoadBalancer.

    apiVersion: v1
    kind: Service
    metadata:
      name: aspnetapp-demo-service
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: aspnetapp-demo
    
  4. Выполните следующую команду, чтобы развернуть приложение в кластере AKS.

    kubectl create namespace appconfig-demo
    kubectl apply -f ./Deployment -n appconfig-demo
    
  5. Выполните следующую команду и получите внешний IP-адрес, предоставляемый службой LoadBalancer.

    kubectl get service aspnetapp-demo-service -n appconfig-demo
    
  6. Откройте окно браузера и перейдите к IP-адресу, полученному на предыдущем шаге. Веб-страница выглядит следующим образом:

    Снимок экрана: поставщик Kubernetes перед использованием configMap.

Использование поставщика kubernetes Конфигурация приложений

Теперь, когда у вас есть приложение, работающее в AKS, вы развернете Конфигурация приложений поставщик Kubernetes в кластере AKS, работающем в качестве контроллера Kubernetes. Поставщик извлекает данные из хранилища Конфигурация приложений и создает ConfigMap, который используется в виде JSON-файла, подключенного в томе данных.

Настройка хранилища Конфигурация приложений Azure

Добавьте следующие ключевые значения в хранилище Конфигурация приложений и оставьте метку и тип контента со значениями по умолчанию. Дополнительные сведения о добавлении значений ключей в хранилище с помощью портал Azure или ИНТЕРФЕЙСА командной строки см. в разделе "Создание значения ключа".

Ключ Value
Параметры:FontColor Зеленый
Параметры:Message Привет от Конфигурация приложений Azure

Настройка поставщика Конфигурация приложений Kubernetes

  1. Выполните следующую команду, чтобы получить учетные данные для кластера AKS. Замените значение name и resource-group параметры экземпляром AKS:

    az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
    
  2. Установите поставщик Конфигурация приложений Azure Kubernetes в кластер AKS с помощьюhelm:

    helm install azureappconfiguration.kubernetesprovider \
         oci://mcr.microsoft.com/azure-app-configuration/helmchart/kubernetes-provider \
         --namespace azappconfig-system \
         --create-namespace
    
  3. Добавьте файл appConfigurationProvider.yaml в каталог развертывания со следующим содержимым, чтобы создать AzureAppConfigurationProvider ресурс. AzureAppConfigurationProvider— это пользовательский ресурс, определяющий, какие данные нужно скачать из хранилища Конфигурация приложений Azure и создать 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:
          managedIdentityClientId: <your-managed-identity-client-id>
    

    Замените значение endpoint поля конечной точкой хранилища Конфигурация приложений Azure. Выполните действия по использованию удостоверения рабочей нагрузки и обновите auth раздел с идентификатором клиента созданного управляемого удостоверения, назначаемого пользователем.

    Примечание.

    AzureAppConfigurationProvider является декларативным объектом API. Он определяет требуемое состояние конфигурации, созданного из данных в хранилище Конфигурация приложений с помощью следующего поведения:

    • ConfigMap не будет создан, если ConfigMap с тем же именем уже существует в том же пространстве имен.
    • ConfigMap будет сброшен на основе представленных данных в хранилище Конфигурация приложений, если он удален или изменен другими средствами.
    • ConfigMap будет удален, если поставщик Kubernetes Конфигурация приложений удаляется.
  4. Обновите файл deployment.yaml в каталоге развертывания, чтобы использовать ConfigMap configmap-created-by-appconfig-provider в качестве подключенного тома данных. Важно убедиться, что volumeMounts.mountPath совпадения, указанные WORKDIR в Dockerfile , и каталог конфигурации , созданный ранее.

    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. Выполните следующую команду, чтобы развернуть изменения. Замените пространство имен, если вы используете существующее приложение AKS.

    kubectl apply -f ./Deployment -n appconfig-demo
    
  6. Обновите окно браузера. На странице отображается обновленное содержимое.

    Снимок экрана: поставщик Kubernetes после использования configMap.

Устранение неполадок

Если приложение не отображает данные из хранилища Конфигурация приложений, выполните следующую команду, чтобы проверить правильность создания ConfigMap.

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

Если ConfigMap не создан, выполните следующую команду, чтобы получить состояние извлечения данных.

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

Если поставщик Kubernetes Конфигурация приложений Azure успешно извлекает данные из хранилища Конфигурация приложений, phase свойство в разделе состояния выходных данных должно бытьCOMPLETE, как показано в следующем примере.

$ 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

Если этап не COMPLETEустановлен, данные не скачиваются из Конфигурация приложений хранения должным образом. Выполните следующую команду, чтобы отобразить журналы поставщика kubernetes Конфигурация приложений Azure.

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

Используйте журналы для дальнейшего устранения неполадок. Например, если вы видите запросы к хранилищу Конфигурация приложений ответ 403: 403 Запрещено, это может указывать, Конфигурация приложений поставщик Kubernetes не имеет необходимых разрешений для доступа к хранилищу Конфигурация приложений. Следуйте инструкциям по использованию удостоверения рабочей нагрузки, чтобы убедиться, что связанное управляемое удостоверение назначено правильное разрешение.

Очистка ресурсов

Удалите Конфигурация приложений поставщика Kubernetes из кластера AKS, если вы хотите сохранить кластер AKS.

helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system

Если вы не планируете в дальнейшем использовать ресурсы, созданные при работе с этой статьей, удалите созданную группу ресурсов, чтобы избежать расходов.

Внимание

Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не те ресурсы или группу ресурсов. Если ресурсы для работы с этой статьей созданы в группе ресурсов, которая содержит другие нужные ресурсы, удалите каждый ресурс отдельно в соответствующей области ресурса, чтобы не удалять группу ресурсов.

  1. Войдите на портал Azure и выберитеГруппы ресурсов.
  2. Введите имя группы ресурсов в поле Фильтровать по имени.
  3. В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
  4. Выберите команду Удалить группу ресурсов.
  5. Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.

Через некоторое время группа ресурсов и все ее ресурсы будут удалены.

Примечание.

Если вы используете интерфейс командной строки разработчика Azure для настройки ресурсов, можно выполнить azd down команду, чтобы удалить все ресурсы, созданные шаблоном azure-appconfig-aks .

Следующие шаги

В этом кратком руководстве вы:

  • Создано приложение, работающее в Служба Azure Kubernetes (AKS).
  • Подключение кластер AKS в хранилище Конфигурация приложений с помощью поставщика Конфигурация приложений Kubernetes.
  • Создайте ConfigMap с данными из хранилища Конфигурация приложений.
  • Запустите приложение с конфигурацией из хранилища Конфигурация приложений без изменения кода приложения.

Чтобы узнать, как обновить рабочие нагрузки AKS для динамического обновления конфигурации, перейдите к следующему руководству.

Дополнительные сведения о поставщике kubernetes Конфигурация приложений Azure см. в Конфигурация приложений Azure справочнике по поставщику Kubernetes.