Share via


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

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

Einrichten einer Workload für Microsoft Entra Workload ID

Der Prozess zum Einrichten des Prometheus-Remoteschreibzugriffs für eine Workload unter Verwendung von Microsoft Entra Workload ID-Authentifizierung umfasst folgende Aufgaben:

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

Die Aufgaben werden in den folgenden Abschnitten beschrieben.

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 of Prometheus pod>"
export SERVICE_ACCOUNT_NAME="<name of service account associated with Prometheus pod>"
export SERVICE_ACCOUNT_ISSUER="<your service account 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. 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-20240507.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