Отправка данных Prometheus в Azure Monitor с помощью проверки подлинности Microsoft Entra

В этой статье описывается настройка удаленной записи для отправки данных с локально управляемого сервера Prometheus, работающего в кластере Служба Azure Kubernetes (AKS) или кластере Kubernetes с поддержкой Azure Arc с помощью проверки подлинности Microsoft Entra.

Конфигурации кластера

Эта статья относится к следующим конфигурациям кластера:

  • Кластер Службы Azure Kubernetes
  • Кластер Kubernetes с поддержкой Azure Arc
  • Кластер Kubernetes, работающий в другом облаке или локальной среде

Примечание.

Для кластера AKS или кластера Kubernetes с поддержкой Azure Arc рекомендуется использовать проверку подлинности управляемого удостоверения. Дополнительные сведения см. в статье об управляемой службе Azure Monitor для удаленной записи Prometheus для управляемого удостоверения.

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

Предварительные требования, описанные в управляемой службе Azure Monitor для удаленной записи Prometheus, применяются к процессам, описанным в этой статье.

Настройка приложения для идентификатора Microsoft Entra

Процесс настройки удаленной записи Prometheus для приложения с помощью проверки подлинности Microsoft Entra включает выполнение следующих задач:

  1. Регистрация приложения с Microsoft Entra ID.
  2. Получите идентификатор клиента приложения Microsoft Entra.
  3. Назначьте роль издателя метрик мониторинга в правиле сбора данных рабочей области приложению.
  4. Создайте хранилище ключей Azure и создайте сертификат.
  5. Добавьте сертификат в приложение Microsoft Entra.
  6. Добавьте драйвер И хранилище CSI для кластера.
  7. Разверните контейнер бокового контейнера для настройки удаленной записи.

Задачи описаны в следующих разделах.

Регистрация приложения с помощью идентификатора Microsoft Entra

Выполните действия по регистрации приложения с помощью идентификатора Microsoft Entra и создания субъекта-службы.

Получение идентификатора клиента приложения Microsoft Entra

  1. В портал Azure перейдите в меню идентификатора Microsoft Entra ID и выберите Регистрация приложений.
  2. В списке приложений скопируйте значение для идентификатора приложения (клиента) для зарегистрированного приложения.

Screenshot that shows the application or client ID of a Microsoft Entra application.

Назначение роли издателя метрик мониторинга в правиле сбора данных рабочей области приложению

Приложение должно быть назначено роли издателя метрик мониторинга в правиле сбора данных, связанном с рабочей областью Azure Monitor.

  1. В меню ресурсов для рабочей области Azure Monitor выберите "Обзор". Для правила сбора данных выберите ссылку.

    Screenshot that shows the data collection rule that's used by Azure Monitor workspace.

  2. В меню ресурсов для правила сбора данных выберите элемент управления доступом (IAM).

  3. Выберите Добавить, затем выберите Добавить назначение ролей.

    Screenshot that shows adding a role assignment on Access control pages.

  4. Выберите роль издателя метрик мониторинга и нажмите кнопку "Далее".

    Screenshot that shows a list of role assignments.

  5. Выберите "Пользователь", "Группа" или "Субъект-служба", а затем выберите "Выбрать участников". Выберите созданное приложение и нажмите кнопку "Выбрать".

    Screenshot that shows selecting the application.

  6. Чтобы завершить назначение роли, нажмите кнопку "Проверить и назначить".

Создание хранилища ключей Azure и создание сертификата

  1. Если у вас еще нет хранилища ключей Azure, создайте хранилище.
  2. Создайте сертификат с помощью руководства по добавлению сертификата в Key Vault.
  3. Скачайте сертификат в формате CER с помощью руководства по экспорту сертификата из Key Vault.

Добавление сертификата в приложение Microsoft Entra

  1. В меню ресурсов для приложения Microsoft Entra выберите сертификаты и секреты.

  2. На вкладке "Сертификаты" выберите "Отправить сертификат " и выберите скачанный сертификат.

    Screenshot that shows uploading a certificate for a Microsoft Entra application.

Предупреждение

Сертификаты имеют дату окончания срока действия. Это ответственность пользователя за хранение сертификатов.

Добавление драйвера и хранилища CSI для кластера

Примечание.

Конфигурация драйвера CSI для Azure Key Vault — это только один из способов подключения сертификата к модулем pod. Контейнер удаленной записи должен иметь локальный путь к сертификату в модуле pod только для значения в шаге "Развернуть контейнер боковой кареты" для <AZURE_CLIENT_CERTIFICATE_PATH> настройки удаленной записи.

Этот шаг требуется только в том случае, если вы не включили поставщик Azure Key Vault для драйвера CSI хранилища секретов при создании кластера.

  1. Чтобы включить поставщик Azure Key Vault для драйвера CSI хранилища секретов для кластера, выполните следующую команду Azure CLI:

    az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
    
  2. Чтобы предоставить удостоверению доступ к хранилищу ключей, выполните следующие команды:

    # show client id of the managed identity of the cluster
    az aks show -g <resource-group> -n <cluster-name> --query addonProfiles.azureKeyvaultSecretsProvider.identity.clientId -o tsv
    
    # set policy to access keys in your key vault
    az keyvault set-policy -n <keyvault-name> --key-permissions get --spn <identity-client-id>
    
    # set policy to access secrets in your key vault
    az keyvault set-policy -n <keyvault-name> --secret-permissions get --spn <identity-client-id>
    
    # set policy to access certs in your key vault
    az keyvault set-policy -n <keyvault-name> --certificate-permissions get --spn <identity-client-id>
    
  3. Создайте SecretProviderClass , сохранив следующий YAML в файл с именем secretproviderclass.yml. Замените значения для userAssignedIdentityID, keyvaultNametenantIdи объекты, извлекаемые из хранилища ключей. Сведения об используемых значениях см. в статье "Предоставление удостоверения для доступа к поставщику Хранилища ключей Azure для драйвера CSI хранилища секретов".

    # This is a SecretProviderClass example using user-assigned identity to access your key vault
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: azure-kvname-user-msi
    spec:
      provider: azure
      parameters:
        usePodIdentity: "false"
        useVMManagedIdentity: "true"          # Set to true for using managed identity
        userAssignedIdentityID: <client-id>   # Set the client ID of the user-assigned managed identity to use
        keyvaultName: <key-vault-name>        # Set to the name of your key vault
        cloudName: ""                         # [OPTIONAL for Azure] if not provided, the Azure environment defaults to AzurePublicCloud
        objects:  |
          array:
            - |
              objectName: <name-of-cert>
              objectType: secret              # object types: secret, key, or cert
              objectFormat: pfx
              objectEncoding: base64
              objectVersion: ""
        tenantId: <tenant-id>                 # The tenant ID of the key vault
    
  4. Примените SecretProviderClass следующую команду в кластере:

    kubectl apply -f secretproviderclass.yml
    

Развертывание контейнера на стороне для настройки удаленной записи

  1. Скопируйте следующий YAML и сохраните его в файл. YAML использует порт 8081 в качестве порта прослушивания. При использовании другого порта измените это значение в YAML.

    prometheus:
      prometheusSpec:
        externalLabels:
          cluster: <CLUSTER-NAME>  
    
        ##	Azure Managed Prometheus currently exports some default mixins in Grafana.  
        ##  These mixins are compatible with data scraped by Azure Monitor agent on your 
        ##  Azure Kubernetes Service cluster. These mixins aren't compatible with Prometheus 
        ##  metrics scraped by the Kube Prometheus stack. 
        ##  To make these mixins compatible, uncomment the remote write relabel configuration below:
        ##	writeRelabelConfigs:
        ##	  - sourceLabels: [metrics_path]
        ##	    regex: /metrics/cadvisor
        ##	    targetLabel: job
        ##	    replacement: cadvisor
        ##	    action: replace
        ##	  - sourceLabels: [job]
        ##	    regex: 'node-exporter'
        ##	    targetLabel: job
        ##	    replacement: node
        ##	    action: replace  
        ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
        remoteWrite:
          - url: 'http://localhost:8081/api/v1/write'
        
        # Additional volumes on the output StatefulSet definition.
        # Required only for Microsoft Entra ID based auth
        volumes:
          - name: secrets-store-inline
            csi:
              driver: secrets-store.csi.k8s.io
              readOnly: true
              volumeAttributes:
                secretProviderClass: azure-kvname-user-msi
        containers:
          - name: prom-remotewrite
            image: <CONTAINER-IMAGE-VERSION>
            imagePullPolicy: Always
            # Required only for Microsoft Entra ID based auth
            volumeMounts:
              - name: secrets-store-inline
                mountPath: /mnt/secrets-store
                readOnly: true
            ports:
              - name: rw-port
                containerPort: 8081
            livenessProbe:
              httpGet:
                path: /health
                port: rw-port
                initialDelaySeconds: 10
                timeoutSeconds: 10
            readinessProbe:
              httpGet:
                path: /ready
                port: rw-port
                initialDelaySeconds: 10
                timeoutSeconds: 10
            env:
              - name: INGESTION_URL
                value: '<INGESTION_URL>'
              - name: LISTENING_PORT
                value: '8081'
              - name: IDENTITY_TYPE
                value: aadApplication
              - name: AZURE_CLIENT_ID
                value: '<APP-REGISTRATION-CLIENT-ID>'
              - name: AZURE_TENANT_ID
                value: '<TENANT-ID>'
              - name: AZURE_CLIENT_CERTIFICATE_PATH
                value: /mnt/secrets-store/<CERT-NAME>
              - name: CLUSTER
                value: '<CLUSTER-NAME>'
    
  2. Замените следующие значения в ФАЙЛЕ YAML:

    значение Описание
    <CLUSTER-NAME> Имя кластера AKS.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/prometheus/promdev/prom-remotewrite:prom-remotewrite-20230906.1
    Версия образа контейнера удаленной записи.
    <INGESTION-URL> Значение конечной точки приема метрик на странице обзора рабочей области Azure Monitor.
    <APP-REGISTRATION -CLIENT-ID> Идентификатор клиента приложения.
    <TENANT-ID> Идентификатор клиента приложения Microsoft Entra.
    <CERT-NAME> Имя сертификата.
    <CLUSTER-NAME> Имя кластера, на котором работает Prometheus.
  3. Откройте Azure Cloud Shell и отправьте ФАЙЛ YAML.

  4. Используйте Helm, чтобы применить YAML-файл и обновить конфигурацию Prometheus:

    # set the context to your cluster 
    az aks get-credentials -g <aks-rg-name> -n <aks-cluster-name> 
    
    # use Helm to update your remote write config 
    helm upgrade -f <YAML-FILENAME>.yml prometheus prometheus-community/kube-prometheus-stack -namespace <namespace where Prometheus pod resides> 
    

Проверка и устранение неполадок

Сведения о проверке и устранении неполадок см. в управляемой службе Azure Monitor для удаленной записи Prometheus.