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
Für die Microsoft Entra ID-Anwendungsauthentifizierung sind Prometheus-Versionen über v2.48 erforderlich.
Ein Cluster mit Featurekennzeichnungen, die spezifisch für OpenID Connect (OIDC) und eine OIDC-Aussteller-URL sind:
- Informationen zu verwalteten Clustern (Azure Kubernetes Service, 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.
Ein Webhook für mutierende Zulassung wurde installiert. Weitere Informationen finden Sie unter Webhook für die mutierende Zulassung in Microsoft Entra Workload ID.
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 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:
- Richten Sie die Workload-Identität ein.
- Erstellen Sie eine Microsoft Entra-Anwendung oder vom Benutzer zugewiesene verwaltete Identität, und erteilen Sie Berechtigungen.
- Weisen Sie die Rolle „Herausgeber von Überwachungsmetriken“ in der Datensammlungsregel des Arbeitsbereichs zur Anwendung hinzu.
- Erstellen oder aktualisieren Sie den Prometheus-Pod für Ihr Kubernetes-Dienstkonto.
- Richten Sie Verbundidentitäts-Anmeldeinformationen zwischen der Identität und dem Aussteller und Antragsteller des Dienstkontos ein.
- 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 wirdLISTENING_PORT
:8081
(jeder Port wird unterstützt)IDENTITY_TYPE
:workloadIdentity
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
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. 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
- Sammeln von Prometheus-Metriken aus einem AKS-Cluster
- Weitere Informationen zum verwalteten Azure Monitor-Dienst für Prometheus
- Remoteschreibzugriff im verwalteten Azure Monitor-Dienst für Prometheus
- Senden von Prometheus-Daten an Azure Monitor mithilfe der Microsoft Entra-Authentifizierung
- Senden von Prometheus-Daten an Azure Monitor unter Verwendung der Authentifizierung mit verwalteten Identitäten
- Senden von Prometheus-Daten an Azure Monitor unter Verwendung der Authentifizierung mit podseitig verwalteter Microsoft Entra-Identität (Vorschau)