Dela via


Skicka Prometheus-data till Azure Monitor med hjälp av Microsoft Entra-arbetsbelastnings-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 hjälp av 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 utgivarrollen Övervakningsmått för arbetsytans datainsamlingsregel till programmet.
  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. Distribuera en sidovagnscontainer för att konfigurera fjärrskrivning.

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 du är aktiverad antecknar du SERVICE_ACCOUNT_ISSUER som i huvudsak är OIDC-utfärdarens URL. Om du vill hämta url:en för OIDC-utfärdaren 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. Självhanterade kluster finns i Självhanterade kluster – Microsoft Entra-arbetsbelastnings-ID.

Konfigurera webhooken för att mutera antagning

Konfigurera mutating admission webhook för att hålla federerade autentiseringsuppgifter uppdaterade. Se Mutating Admission Webhook – Microsoft Entra Workload ID to set up (Mutating Admission Webhook – Microsoft Entra Workload ID to set up).

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 för eller serviceAccount (inaktuellt) i spec Prometheus-podden. 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

Information om hur du tilldelar rollen finns i Tilldela rollen Monitoring Metrics Publisher på arbetsytans datainsamlingsregel till den hanterade identiteten.

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 av tjänstkontot och ämne

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

# 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-20240617.1
    Containeravbildningsversionen för fjärrskrivning.
    <INGESTION-URL> Värdet för slutpunkten för måttinmatning 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