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

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

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

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

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

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

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

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

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

# [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 of Prometheus pod>"
export SERVICE_ACCOUNT_NAME="<name of service account associated with Prometheus pod>"
export SERVICE_ACCOUNT_ISSUER="<your service account issuer URL>"

Для SERVICE_ACCOUNT_NAMEпроверка узнать, связана ли учетная запись службы (отдельная от учетной записи службы по умолчанию) с модулем Prometheus. Найдите значение serviceaccountName или serviceAccount (не рекомендуется) в spec модуле pod Prometheus. Используйте это значение, если оно существует. Если 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-20240507.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".

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