Partager via


Envoyer des données Prometheus à Azure Monitor en utilisant l’authentification Microsoft Entra Workload ID (préversion)

Cet article explique comment configurer l’écriture à distance pour envoyer des données depuis votre cluster Prometheus managé par Azure Monitor en utilisant l’authentification Microsoft Entra Workload ID.

Prérequis

Configurer une charge de travail pour Microsoft Entra Workload ID

Le processus de configuration de l’écriture à distance de Prometheus pour une charge de travail en utilisant l’authentification Microsoft Entra Workload ID implique l’exécution des tâches suivantes :

  1. Configurer une identité de charge de travail.
  2. Créer une application Microsoft Entra ou une identité managée affectée par l’utilisateur, et octroyer des autorisations.
  3. Attribuer à l’application le rôle Éditeur de métriques de monitoring sur la règle de collecte de données d’espace de travail.
  4. Créer ou mettre à jour le pod Prometheus de votre compte de service Kubernetes.
  5. Établir des informations d’identification d’identités fédérées entre l’identité et l’émetteur et le sujet du compte de service.
  6. Déployer un conteneur sidecar pour configurer l’écriture à distance.

Les tâches sont décrites dans les sections suivantes.

Configurer l’identité de la charge de travail

Pour configurer l’identité de la charge de travail, exportez les variables d’environnement suivantes :

# [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>"

Pour SERVICE_ACCOUNT_NAME, vérifiez si un compte de service (distinct du compte de service par défaut) est déjà associé au pod Prometheus. Recherchez la valeur de serviceaccountName ou de serviceAccount (déconseillée) dans le spec de votre pod Prometheus. Utilisez cette valeur si elle existe. Si serviceaccountName et serviceAccount n’existent pas, entrez le nom du compte de service que vous voulez associer à votre pod Prometheus.

Créer une application Microsoft Entra ou une identité managée affectée par l’utilisateur, et octroyer des autorisations

Créez une application Microsoft Entra ou une identité managée affectée par l’utilisateur, et octroyez des autorisations de publier des métriques dans l’espace de travail 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}"

Attribuer à l’application ou à l’identité managée le rôle Éditeur de métriques de monitoring sur la règle de collecte de données d’espace de travail

Pour plus d’informations sur l’attribution du rôle, consultez Attribuer à l’identité managée le rôle Éditeur de métriques de monitoring sur la règle de collecte de données d’espace de travail.

Créer ou mettre à jour le pod Prometheus de votre compte de service Kubernetes

Souvent, un compte de service Kubernetes est créé et associé au pod exécutant le conteneur Prometheus. Si vous utilisez la pile kube-prometheus, le code crée automatiquement le compte de service prometheus-kube-prometheus-prometheus.

Si aucun compte de service Kubernetes n’est associé à Prometheus à l’exception du compte de service par défaut, créez un compte de service spécifiquement pour le pod exécutant Prometheus.

Pour créer le compte de service, exécutez la commande kubectl suivante :

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

Si un compte de service Kubernetes autre que le compte de service par défaut est associé à votre pod, ajoutez l’annotation suivante à votre compte de service :

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

Si votre application Microsoft Entra ou votre identité managée affectée par l’utilisateur ne se trouve pas dans le même locataire que votre cluster, ajoutez l’annotation suivante à votre compte de service :

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

Établir des informations d’identification d’identités fédérées entre l’identité et l’émetteur et le sujet du compte de service

Créez des informations d’identification fédérées en utilisant Azure CLI.

Identité managée affectée par l’utilisateur

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}"

Application 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

Déployer un conteneur sidecar pour configurer l’écriture à distance

Important

Le pod Prometheus doit avoir l’étiquette suivante : azure.workload.identity/use: "true"

Le conteneur side-car d’écriture à distance requiert les valeurs d’environnement suivantes :

  • INGESTION_URL : le point de terminaison d’ingestion des métriques tel qu’il apparaît sur la page Vue d’ensemble pour l’espace de travail Azure Monitor
  • LISTENING_PORT : 8081 (tous les ports sont pris en charge)
  • IDENTITY_TYPE: workloadIdentity
  1. Copiez le code YAML suivant et enregistrez-le dans un fichier. Le code YAML utilise le port 8081 comme port d’écoute. Si vous utilisez un autre port, modifiez cette valeur dans le 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. Remplacez les valeurs suivantes dans le YAML :

    Valeur Description
    <CLUSTER-NAME> Le nom de votre cluster AKS.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    La version d’image conteneur d’écriture distante.
    <INGESTION-URL> La valeur pour Point de terminaison d’ingestion des métriques de la page Vue d’ensemble de l’espace de travail Azure Monitor.
  3. Utilisez Helm pour appliquer le fichier YAML et mettre à jour votre configuration 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> 
    

Vérification et résolution des problèmes

Pour plus d'informations sur la vérification et la résolution des problèmes, consultez Résolution des problèmes de l'écriture distante et le service géré pour Prometheus Azure Monitor pour l'écriture distante Prometheus.

Étapes suivantes