Поделиться через


Отправка данных Prometheus в Azure Monitor с помощью проверки подлинности Идентификация рабочей нагрузки Microsoft Entra

В этой статье описывается настройка удаленной записи для отправки данных из управляемого кластера Prometheus Azure Monitor с помощью проверки подлинности Идентификация рабочей нагрузки Microsoft Entra.

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

  • Версии Prometheus, превышающие версию 2.48, необходимы для проверки подлинности приложения Идентификатора Microsoft Entra.
  • Prometheus, работающий в кластере. В этой статье предполагается, что кластер Prometheus настроен с помощью стека kube-prometheus, но вы можете настроить Prometheus с помощью других методов.

Настройка удаленной записи с помощью Идентификация рабочей нагрузки Microsoft Entra

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

  1. Включите OpenID Connect и запишите URL-адрес издателя.
  2. Настройте изменение веб-перехватчика приема.
  3. Настройте удостоверение рабочей нагрузки.
  4. Создайте приложение Microsoft Entra или управляемое удостоверение, назначаемое пользователем, и предоставьте разрешения.
  5. Назначьте роль издателя метрик мониторинга в правиле сбора данных рабочей области приложению.
  6. Создайте или обновите модуль pod учетной записи службы Kubernetes Prometheus.
  7. Установите учетные данные федеративного удостоверения между удостоверением и издателем учетной записи службы и субъектом.
  8. Разверните контейнер бокового контейнера для настройки удаленной записи.

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

Включение OpenID Connect и запрос издателя

Чтобы включить OpenID Connect (OIDC) в кластере AKS, следуйте инструкциям в статье "Создание поставщика OpenID Connect в AKS".

После включения запишите SERVICE_ACCOUNT_ISSUER, который по сути является URL-адресом издателя OIDC. Чтобы получить URL-адрес издателя OIDC, выполните команду az aks show . Замените значения по умолчанию для имени кластера и имени группы ресурсов.

az aks show --name myAKScluster --resource-group myResourceGroup --query "oidcIssuerProfile.issuerUrl" -o tsv

По умолчанию издатель использует базовый URL-адрес https://{region}.oic.prod-aks.azure.com, где значение для {region} совпадений с расположением кластера AKS развертывается.

Сведения о других управляемых кластерах (Amazon Elastic Kubernetes Service и Google Kubernetes Engine) см. в разделе "Управляемые кластеры" — Идентификация рабочей нагрузки Microsoft Entra. Сведения о самоуправляемых кластерах см. в разделе "Самоуправляемые кластеры" Идентификация рабочей нагрузки Microsoft Entra.

Настройка мутации веб-перехватчика приема

Настройте изменение веб-перехватчика допуска, чтобы сохранить федеративные учетные данные в актуальном состоянии. Чтобы настроить веб-перехватчик, см. раздел "Изменение допуска". Идентификация рабочей нагрузки Microsoft Entra.

Настройка удостоверения рабочей нагрузки

Чтобы настроить удостоверение рабочей нагрузки, экспортируйте следующие переменные среды:

# [OPTIONAL] Set this if you're using a Microsoft Entra application
export APPLICATION_NAME="<your application name>"
    
# [OPTIONAL] Set this only if you're using a user-assigned managed identity
export USER_ASSIGNED_IDENTITY_NAME="<your user-assigned managed identity name>"
    
# Environment variables for the Kubernetes service account and federated identity credential
export SERVICE_ACCOUNT_NAMESPACE="<namespace where Prometheus pod is running>"
export SERVICE_ACCOUNT_NAME="<name of service account associated with Prometheus pod. See below for more details>"
export SERVICE_ACCOUNT_ISSUER="<your service account (or OIDC) issuer URL>"

Для SERVICE_ACCOUNT_NAMEэтого проверьте, связана ли учетная запись службы (отдельная от учетной записи службы по умолчанию ) с модулем Prometheus. Найдите значение serviceaccountName или serviceAccount (не рекомендуется) в spec модуле pod Prometheus. Используйте это значение, если оно существует. Чтобы найти учетную запись службы, связанную с pod Prometheus, выполните следующую команду kubectl:

kubectl get pods/<Promethuespodname> -o yaml

Если serviceaccountName и serviceAccount не существует, введите имя учетной записи службы, которую вы хотите связать с модулем Prometheus pod.

Создание приложения Microsoft Entra или управляемого удостоверения, назначаемого пользователем, и предоставление разрешений

Создайте приложение Microsoft Entra или управляемое удостоверение, назначаемое пользователем, и предоставьте разрешение на публикацию метрик в рабочей области Azure Monitor:

# create a Microsoft Entra application
az ad sp create-for-rbac --name "${APPLICATION_NAME}"

# create a user-assigned managed identity if you use a user-assigned managed identity for this article
az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}"

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

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

Создание или обновление учетной записи службы Kubernetes Pod Prometheus

Часто создается учетная запись службы Kubernetes и связана с модулем pod под управлением контейнера Prometheus. Если вы используете стек kube-prometheus, код автоматически создает учетную запись службы prometheus-kube-prometheus-prometheus-prometheus.

Если учетная запись службы Kubernetes, кроме учетной записи службы по умолчанию, связана с Prometheus, создайте новую учетную запись службы специально для модуля pod под управлением Prometheus.

Чтобы создать учетную запись службы, выполните следующую команду kubectl:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: service account
metadata:
  annotations:
    azure.workload.identity/client-id: ${APPLICATION_CLIENT_ID:-$USER_ASSIGNED_IDENTITY_CLIENT_ID}
  name: ${SERVICE_ACCOUNT_NAME}
  namespace: ${SERVICE_ACCOUNT_NAMESPACE}
EOF

Если учетная запись службы Kubernetes, отличной от учетной записи службы по умолчанию, связана с модулем pod, добавьте следующую заметку в учетную запись службы:

kubectl annotate sa ${SERVICE_ACCOUNT_NAME} -n ${SERVICE_ACCOUNT_NAMESPACE} azure.workload.identity/client-id="${APPLICATION_OR_USER_ASSIGNED_IDENTITY_CLIENT_ID}" –overwrite

Если ваше приложение Microsoft Entra или управляемое удостоверение, назначаемое пользователем, не входит в тот же клиент, что и кластер, добавьте следующую заметку в учетную запись службы:

kubectl annotate sa ${SERVICE_ACCOUNT_NAME} -n ${SERVICE_ACCOUNT_NAMESPACE} azure.workload.identity/tenant-id="${APPLICATION_OR_USER_ASSIGNED_IDENTITY_TENANT_ID}" –overwrite

Установка учетных данных федеративного удостоверения между удостоверением и издателем учетной записи службы и субъектом

Создайте федеративные учетные данные с помощью Azure CLI.

Управляемое удостоверение, назначаемое пользователем

az identity federated-credential create \
   --name "kubernetes-federated-credential" \
   --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \
   --resource-group "${RESOURCE_GROUP}" \
   --issuer "${SERVICE_ACCOUNT_ISSUER}" \
   --subject "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}"

Приложение Microsoft Entra

# Get the ObjectID of the Microsoft Entra app.

export APPLICATION_OBJECT_ID="$(az ad app show --id ${APPLICATION_CLIENT_ID} --query id -otsv)"

# Add a federated identity credential.

cat <<EOF > params.json
{
  "name": "kubernetes-federated-credential",
  "issuer": "${SERVICE_ACCOUNT_ISSUER}",
  "subject": "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}",
  "description": "Kubernetes service account federated credential",
  "audiences": [
    "api://AzureADTokenExchange"
  ]
}
EOF

az ad app federated-credential create --id ${APPLICATION_OBJECT_ID} --parameters @params.json

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

Внимание

Модуль Pod Prometheus должен иметь следующую метку: azure.workload.identity/use: "true"

Для контейнера бокового контейнера удаленной записи требуются следующие значения среды:

  • INGESTION_URL: конечная точка приема метрик, показанная на странице обзора рабочей области Azure Monitor
  • LISTENING_PORT: 8081 (поддерживается любой порт)
  • IDENTITY_TYPE: workloadIdentity
  1. Скопируйте следующий YAML и сохраните его в файл. YAML использует порт 8081 в качестве порта прослушивания. При использовании другого порта измените это значение в YAML.

    prometheus:
      prometheusSpec:
        externalLabels:
              cluster: <AKS-CLUSTER-NAME>
        podMetadata:
            labels:
                azure.workload.identity/use: "true"
        ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write    
        remoteWrite:
        - url: 'http://localhost:8081/api/v1/write'
    
        containers:
        - name: prom-remotewrite
          image: <CONTAINER-IMAGE-VERSION>
          imagePullPolicy: Always
          ports:
            - name: rw-port
              containerPort: 8081
          env:
          - name: INGESTION_URL
            value: <INGESTION_URL>
          - name: LISTENING_PORT
            value: '8081'
          - name: IDENTITY_TYPE
            value: workloadIdentity
    
  2. Замените следующие значения в YAML:

    значение Описание
    <CLUSTER-NAME> Имя кластера AKS.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    Версия образа контейнера удаленной записи.
    <INGESTION-URL> Значение конечной точки приема метрик на странице обзора рабочей области Azure Monitor.
  3. Используйте Helm, чтобы применить YAML-файл и обновить конфигурацию Prometheus:

    # set a 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".

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