Dela via


Skicka Prometheus-data till Azure Monitor med Microsoft Entra-arbetslast-ID-autentisering

Den här artikeln beskriver hur du konfigurerar fjärrskrivning för att skicka data från ditt Azure Monitor-hanterade Prometheus-kluster med Microsoft Entra-arbetsbelastnings-ID-autentisering.

Förutsättningar

  • Prometheus-versioner som är större än v2.48 krävs för Microsoft Entra ID-programautentisering.
  • Prometheus körs i klustret. Den här artikeln förutsätter att Prometheus-klustret konfigureras med hjälp av kube-prometheus-stacken, men du kan konfigurera Prometheus med hjälp av andra metoder.

Konfigurera fjärrskrivning med Microsoft Entra-arbetsbelastnings-ID

Processen för att konfigurera Prometheus-fjärrskrivning med microsoft Entra-arbetsbelastnings-ID-autentisering innebär att du utför följande uppgifter:

  1. Aktivera OpenID Connect och anteckna utfärdarens URL.
  2. Konfigurera en webhook för att mutera antagning.
  3. Konfigurera arbetsbelastningsidentiteten.
  4. Skapa ett Microsoft Entra-program eller en användartilldelad hanterad identitet och bevilja behörigheter.
  5. Tilldela rollen för publicering av övervakningsmått på datainsamlingsregeln för arbetsytan till applikationen.
  6. Skapa eller uppdatera kubernetes-tjänstkontots Prometheus-podd.
  7. Upprätta federerade identitetsuppgifter mellan identiteten och utfärdaren av tjänstkontot och ämne.
  8. Implementera en sidovagnscontainer för att konfigurera fjärrskrivningsfunktion.

Uppgifterna beskrivs i följande avsnitt.

Aktivera OpenID Connect och fråga utfärdaren

Om du vill aktivera OpenID Connect (OIDC) i ett AKS-kluster följer du anvisningarna i Skapa en OpenID Connect-provider på AKS.

När det har aktiverats, anteckna SERVICE_ACCOUNT_ISSUER, vilket i huvudsak är OIDC-utfärdarens webbadress. Om du vill hämta OIDC-utfärdarens URL kör du kommandot az aks show. Ersätt standardvärdena för klusternamnet och resursgruppens namn.

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

Som standard är utfärdaren inställd på att använda bas-URL:en https://{region}.oic.prod-aks.azure.com, där värdet för {region} matchar platsen där AKS-klustret distribueras.

Andra hanterade kluster (Amazon Elastic Kubernetes Service och Google Kubernetes Engine) finns i Hanterade kluster – Microsoft Entra-arbetsbelastnings-ID. För självhanterade kluster, se Självhanterade kluster – Microsoft Entra-arbetsbelastnings-ID.

Konfigurera webhooken för att mutera antagning

Konfigurera en muterande admission-webhook för att hålla federerade autentiseringsuppgifter uppdaterade. Se Mutating Admission Webhook – Microsoft Entra Workload ID för att ställa in.

Konfigurera arbetsbelastningsidentiteten

Om du vill konfigurera arbetsbelastningsidentiteten exporterar du följande miljövariabler:

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

För SERVICE_ACCOUNT_NAMEkontrollerar du om ett tjänstkonto (separat från standardtjänstkontot ) redan är associerat med Prometheus-podden. Leta efter värdet serviceaccountName eller serviceAccount (inaktuellt) i spec på din Prometheus-pod. Använd det här värdet om det finns. Om du vill hitta tjänstkontot som är associerat med Prometheus-podden kör du kommandot kubectl nedan:

kubectl get pods/<Promethuespodname> -o yaml

Om serviceaccountName och serviceAccount inte finns anger du namnet på det tjänstkonto som du vill associera med prometheus-podden.

Skapa ett Microsoft Entra-program eller användartilldelad hanterad identitet och bevilja behörigheter

Skapa ett Microsoft Entra-program eller en användartilldelad hanterad identitet och ge behörighet att publicera mått till Azure Monitor-arbetsytan:

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

Tilldela rollen Monitoring Metrics Publisher på datainsamlingsregeln för arbetsytan till programmet eller den hanterade identiteten

För information om hur du tilldelar rollen, se Tilldela rollen Monitoring Metrics Publisher till den hanterade identiteten i arbetsytans datainsamlingsregel.

Skapa eller uppdatera kubernetes-tjänstkontots Prometheus-podd

Ofta skapas ett Kubernetes-tjänstkonto och associeras med podden som kör Prometheus-containern. Om du använder kube-prometheus-stacken skapar koden automatiskt tjänstkontot prometheus-kube-prometheus-prometheus.

Om inget Kubernetes-tjänstkonto förutom standardtjänstkontot är associerat med Prometheus skapar du ett nytt tjänstkonto specifikt för podden som kör Prometheus.

Kör följande kubectl-kommando för att skapa tjänstkontot:

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

Om ett annat Kubernetes-tjänstkonto än standardtjänstkontot är associerat med din podd lägger du till följande kommentar i ditt tjänstkonto:

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

Om ditt Microsoft Entra-program eller användartilldelade hanterade identiteter inte finns i samma klientorganisation som klustret lägger du till följande kommentar i tjänstkontot:

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

Upprätta federerade identitetsuppgifter mellan identiteten och utfärdaren och subjektet av tjänstkontot.

Skapa federerade autentiseringsuppgifter med hjälp av Azure CLI.

Användartilldelad hanterad identitet

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

# 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

Distribuera en sidovagnscontainer för att konfigurera fjärrskrivning

Viktigt!

Prometheus-podden måste ha följande etikett: azure.workload.identity/use: "true"

Containern för fjärrskrivning av sidovagn kräver följande miljövärden:

  • INGESTION_URL: Slutpunkten för måttinmatning som visas på sidan Översikt för Azure Monitor-arbetsytan
  • LISTENING_PORT: 8081 (alla portar stöds)
  • IDENTITY_TYPE: workloadIdentity
  1. Kopiera följande YAML och spara den i en fil. YAML använder port 8081 som lyssnarport. Om du använder en annan port ändrar du det värdet i 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. Ersätt följande värden i YAML:

    Värde beskrivning
    <CLUSTER-NAME> Namnet på ditt AKS-kluster.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20250814.1
    Containeravbildningsversionen för fjärrskrivning.
    <INGESTION-URL> Värdet för måttsamlingsslutpunkt från sidan Översikt för Azure Monitor-arbetsytan.
  3. Använd Helm för att tillämpa YAML-filen och uppdatera Prometheus-konfigurationen:

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

Verifiering och felsökning

Information om verifiering och felsökning finns i Felsöka fjärrskrivning och Azure Monitor-hanterad tjänst för Prometheus fjärrskrivning.

Nästa steg