Freigeben über


Senden von Prometheus-Daten an Azure Monitor unter Verwendung der Authentifizierung mit Microsoft Entra Workload ID

In diesem Artikel wird beschrieben, wie Sie Remoteschreibvorgänge einrichten, um Daten aus Ihrem verwalteten Azure Monitor Prometheus-Cluster mithilfe der Microsoft Entra Workload ID-Authentifizierung zu senden.

Voraussetzungen

  • Für die Microsoft Entra ID-Anwendungsauthentifizierung sind Prometheus-Versionen über v2.48 erforderlich.
  • Prometheus, das im Cluster ausgeführt wird. In diesem Artikel wird davon ausgegangen, dass das Prometheus-Cluster mithilfe des Kube-prometheus-Stapels eingerichtet wird, Aber Sie können Prometheus auch mithilfe anderer Methoden einrichten.

Einrichten des Remoteschreibzugriffs mithilfe von Microsoft Entra Workload ID

Der Prozess zum Einrichten des Prometheus-Remoteschreibzugriffs unter Verwendung der Microsoft Entra Workload ID-Authentifizierung umfasst folgende Aufgaben:

  1. Aktivieren Sie OpenID Connect, und notieren Sie sich die Aussteller-URL.
  2. Richten Sie den Webhook die für mutierende Zulassung ein.
  3. Richten Sie die Workload-Identität ein.
  4. Erstellen Sie eine Microsoft Entra-Anwendung oder vom Benutzer zugewiesene verwaltete Identität, und erteilen Sie Berechtigungen.
  5. Weisen Sie die Rolle „Herausgeber von Überwachungsmetriken“ in der Datensammlungsregel des Arbeitsbereichs zur Anwendung hinzu.
  6. Erstellen oder aktualisieren Sie den Prometheus-Pod für Ihr Kubernetes-Dienstkonto.
  7. Richten Sie Verbundidentitäts-Anmeldeinformationen zwischen der Identität und dem Aussteller und Antragsteller des Dienstkontos ein.
  8. Stellen Sie einen Sidecar-Container zum Einrichten des Remoteschreibzugriffs bereit.

Die Aufgaben werden in den folgenden Abschnitten beschrieben.

Aktivieren von OpenID Connect und Abfragen des Ausstellers

Um OpenID Connect (OIDC) auf einem AKS-Cluster zu aktivieren, befolgen Sie die Anweisungen in Erstellen eines OpenID Connect-Anbieters in AKS.

Notieren Sie sich nach der Aktivierung den Wert für SERVICE_ACCOUNT_ISSUER, der im Wesentlichen die OIDC-Aussteller-URL ist. Führen Sie den Befehl az aks show aus, um die URL des OIDC-Ausstellers abzurufen. Ersetzen Sie die Standardwerte für den Clusternamen und den Ressourcengruppennamen.

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

Standardmäßig ist der Aussteller so eingestellt, dass er die Basis-URL https://{region}.oic.prod-aks.azure.com verwendet, wobei der Wert für {region} dem Standort entspricht, an dem der AKS-Cluster bereitgestellt wird.

Informationen zu anderen verwalteten Clustern (Amazon Elastic Kubernetes Service und Google Kubernetes Engine) finden Sie unter Verwaltete Cluster in Microsoft Entra Workload ID. Informationen zu selbstverwalteten Clustern finden Sie unter Selbstverwaltete Cluster in Microsoft Entra Workload ID.

Einrichten des Webhooks die für mutierende Zulassung

Richten Sie den Webhook für die mutierende Zulassung ein, um Partneranmeldeinformationen auf dem neuesten Stand zu halten. Weitere Informationen zur Einrichtung finden Sie unter Webhook für die mutierende Zulassung in Microsoft Entra Workload ID.

Einrichten der Workloadidentität

Um die Workloadidentität einzurichten, exportieren Sie die folgenden Umgebungsvariablen:

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

Überprüfen Sie für SERVICE_ACCOUNT_NAME, ob dem Prometheus-Pod bereits ein Dienstkonto (getrennt vom Standard-Dienstkonto) zugeordnet ist. Suchen Sie im spec Ihres Prometheus-Pods nach dem Wert serviceaccountName oder serviceAccount (veraltet). Verwenden Sie diesen Wert, wenn er vorhanden ist. Um das dem Prometheus-Pod zugeordnete Dienstkonto zu finden, führen Sie den folgenden kubectl-Befehl aus:

kubectl get pods/<Promethuespodname> -o yaml

Wenn serviceaccountName und serviceAccount nicht vorhanden sind, geben Sie den Namen des Dienstkontos ein, das Sie Ihrem Prometheus-Pod zuordnen möchten.

Erstellen einer Microsoft Entra-Anwendung oder einer vom Benutzer zugewiesenen verwalteten Identität und Erteilen von Berechtigungen

Erstellen Sie eine Microsoft Entra-Anwendung oder eine benutzerseitig zugewiesene verwaltete Identität, und erteilen Sie die Berechtigung zum Veröffentlichen von Metriken im Azure Monitor-Arbeitsbereich:

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

Zuweisen der Rolle „Herausgeber von Überwachungsmetriken“ in der Datensammlungsregel des Arbeitsbereichs zur Anwendung oder verwalteten Identität

Informationen zum Zuweisen der Rolle finden Sie unter Zuweisen der Rolle „Herausgeber von Überwachungsmetriken“ in der Arbeitsbereichsdatensammlungsregel zur verwalteten Identität.

Erstellen oder aktualisieren des Prometheus-Pod für Ihr Kubernetes-Dienstkonto

Häufig wird ein Kubernetes-Dienstkonto erstellt und dem Pod zugeordnet, auf dem der Prometheus-Container ausgeführt wird. Wenn Sie den Kube-prometheus-Stapel verwenden, erstellt der Code automatisch das Prometheus-kube-prometheus-prometheus-Servicekonto.

Wenn kein Kubernetes-Dienstkonto mit Ausnahme des Standarddienstkontos Prometheus zugeordnet ist, erstellen Sie ein neues Dienstkonto speziell für den Pod, auf dem Prometheus ausgeführt wird.

Führen Sie zum Erstellen des Dienstkontos den folgenden Kubectl-Befehl aus:

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

Wenn Ihrem Pod ein anderes Kubernetes-Dienstkonto als dem „Standard“-Dienstkonto zugeordnet ist, fügen Sie Ihrem Dienstkonto die folgende Anmerkung hinzu:

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

Wenn sich Ihre Microsoft Entra-Anwendung oder benutzerseitig zugewiesene verwaltete Identität nicht im selben Mandanten wie Ihr Cluster befindet, fügen Sie Ihrem Dienstkonto die folgende Anmerkung hinzu:

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

Richten Sie Verbundidentitäts-Anmeldeinformationen zwischen der Identität und dem Aussteller und Antragsteller des Dienstkontos ein

Erstellen Sie Verbundanmeldeinformationen mithilfe der Azure CLI.

Benutzerseitig zugewiesene verwaltete Identität

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-Anwendung

# 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

Bereitstellen eines Sidecar-Containers zum Einrichten des Remoteschreibzugriffs

Wichtig

Der Prometheus-Pod muss die folgende Bezeichnung aufweisen: azure.workload.identity/use: "true"

Für den Sidecar-Container mit Remoteschreibzugriff sind die folgenden Umgebungswerte erforderlich:

  • INGESTION_URL: Der Metrikerfassungsendpunkt, der auf der Seite Übersicht für den Azure Monitor-Arbeitsbereich gezeigt wird
  • LISTENING_PORT: 8081 (jeder Port wird unterstützt)
  • IDENTITY_TYPE: workloadIdentity
  1. Kopieren Sie den folgenden YAML-Code, und speichern Sie ihn in einer Datei. In dem YAML-Code wird der Port 8081 als Lauschport verwendet. Ändern Sie diesen Wert im YAML-Code, falls Sie einen anderen Port verwenden.

    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. Ersetzen Sie die folgenden Werte in YAML:

    Wert Beschreibung
    <CLUSTER-NAME> Der Name Ihres AKS-Clusters.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    Die Version des Remoteschreibzugriff-Containerimages.
    <INGESTION-URL> Der Wert für Metrikerfassungsendpunkt auf der Seite Übersicht für den Azure Monitor-Arbeitsbereich.
  3. Verwenden Sie Helm, um die YAML-Datei anzuwenden und Ihre Prometheus-Konfiguration zu aktualisieren:

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

Überprüfung und Problembehandlung

Informationen zur Überprüfung und Problembehandlung finden Sie unter Problembehandlung bei Remoteschreibzugriff und Verwalteter Azure Monitor-Dienst für Prometheus-Remoteschreibzugriff.

Nächste Schritte