Delen via


Prometheus-gegevens verzenden naar Azure Monitor met behulp van Microsoft Entra Workload-ID-verificatie

In dit artikel wordt beschreven hoe u externe schrijfbewerking instelt om gegevens te verzenden vanuit uw door Azure Monitor beheerde Prometheus-cluster met behulp van Microsoft Entra Workload-ID-verificatie.

Vereisten

  • Prometheus-versies die groter zijn dan v2.48 zijn vereist voor verificatie van Microsoft Entra ID-toepassingen.
  • Prometheus wordt uitgevoerd in het cluster. In dit artikel wordt ervan uitgegaan dat het Prometheus-cluster is ingesteld met behulp van de kube-prometheus-stack, maar u kunt Prometheus instellen met behulp van andere methoden.

Extern schrijven instellen met Microsoft Entra Workload-ID

Het proces voor het instellen van externe schrijfbewerkingen van Prometheus met behulp van Microsoft Entra Workload-ID-verificatie omvat het voltooien van de volgende taken:

  1. Schakel OpenID Connect in en noteer de URL van de uitgever.
  2. Stel de toegangswebhook voor het dempen in.
  3. Stel de workloadidentiteit in.
  4. Maak een Microsoft Entra-toepassing of door de gebruiker toegewezen beheerde identiteit en verken machtigingen.
  5. Wijs de rol Monitoring Metrics Publisher toe aan de regel voor het verzamelen van werkruimtegegevens aan de toepassing.
  6. Maak of werk uw Kubernetes-serviceaccount Prometheus-pod bij.
  7. Stel federatieve identiteitsreferenties in tussen de identiteit en de verlener van het serviceaccount en het onderwerp.
  8. Implementeer een sidecar-container om externe schrijfbewerkingen in te stellen.

De taken worden beschreven in de volgende secties.

OpenID Connect inschakelen en een query uitvoeren op de verlener

Als u OpenID Connect (OIDC) wilt inschakelen op een AKS-cluster, volgt u de instructies in Een OpenID Connect-provider maken op AKS.

Zodra deze optie is ingeschakeld, noteert u de SERVICE_ACCOUNT_ISSUER die in wezen de URL van de OIDC-verlener is. Voer de opdracht az aks show uit om de URL van de OIDC-verlener op te halen. Vervang de standaardwaarden voor de clusternaam en de naam van de resourcegroep.

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

De verlener is standaard ingesteld op het gebruik van de basis-URL https://{region}.oic.prod-aks.azure.com, waarbij de waarde overeenkomt {region} met de locatie waarin het AKS-cluster wordt geïmplementeerd.

Zie Beheerde clusters - Microsoft Entra Workload-ID voor andere beheerde clusters (Amazon Elastic Kubernetes Service en Google Kubernetes Engine). Zie Zelfbeheerde clusters- Microsoft Entra Workload-ID voor zelfbeheerde clusters.

Toegangswebhook voor het dempen instellen

Stel de toegangswebhook voor het dempen van toegang in om federatieve referenties up-to-date te houden. Zie Toegangswebhook dempen- Microsoft Entra Workload-ID om in te stellen.

De workloadidentiteit instellen

Als u de workloadidentiteit wilt instellen, exporteert u de volgende omgevingsvariabelen:

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

Controleer SERVICE_ACCOUNT_NAMEof een serviceaccount (gescheiden van het standaardserviceaccount ) al is gekoppeld aan de Prometheus-pod. Zoek de waarde van serviceaccountName of serviceAccount (afgeschaft) in de spec Prometheus-pod. Gebruik deze waarde als deze bestaat. Voer de onderstaande kubectl-opdracht uit om het serviceaccount te vinden dat is gekoppeld aan de Prometheus-pod:

kubectl get pods/<Promethuespodname> -o yaml

Als serviceaccountName deze serviceAccount niet bestaat, voert u de naam in van het serviceaccount dat u wilt koppelen aan uw Prometheus-pod.

Een Door de gebruiker toegewezen Microsoft Entra-toepassing of door de gebruiker toegewezen beheerde identiteit maken en machtigingen verlenen

Maak een Microsoft Entra-toepassing of een door de gebruiker toegewezen beheerde identiteit en verwijs machtigingen voor het publiceren van metrische gegevens naar de Azure Monitor-werkruimte:

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

De rol Monitoring Metrics Publisher toewijzen aan de regel voor het verzamelen van werkruimtegegevens aan de toepassing of beheerde identiteit

Zie De rol Monitoring Metrics Publisher toewijzen aan de regel voor het verzamelen van werkruimtegegevens aan de beheerde identiteit voor meer informatie over het toewijzen van de rol.

Uw Kubernetes-serviceaccount Prometheus-pod maken of bijwerken

Vaak wordt een Kubernetes-serviceaccount gemaakt en gekoppeld aan de pod waarop de Prometheus-container wordt uitgevoerd. Als u de kube-prometheus-stack gebruikt, wordt met de code automatisch het serviceaccount prometheus-kube-prometheus-prometheus gemaakt.

Als er geen Kubernetes-serviceaccount is gekoppeld aan Prometheus, maakt u een nieuw serviceaccount speciaal voor de pod waarop Prometheus wordt uitgevoerd.

Voer de volgende kubectl-opdracht uit om het serviceaccount te maken:

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

Als een ander Kubernetes-serviceaccount dan het standaardserviceaccount aan uw pod is gekoppeld, voegt u de volgende aantekening toe aan uw serviceaccount:

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

Als uw Microsoft Entra-toepassing of door de gebruiker toegewezen beheerde identiteit zich niet in dezelfde tenant bevindt als uw cluster, voegt u de volgende aantekening toe aan uw serviceaccount:

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

Federatieve identiteitsreferenties tot stand brengen tussen de identiteit en de verlener van het serviceaccount en het onderwerp

Federatieve referenties maken met behulp van de Azure CLI.

Door de gebruiker toegewezen beheerde identiteit

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

# 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

Een sidecar-container implementeren om externe schrijfbewerkingen in te stellen

Belangrijk

De Prometheus-pod moet het volgende label hebben: azure.workload.identity/use: "true"

Voor de sidecarcontainer voor externe schrijfbewerkingen zijn de volgende omgevingswaarden vereist:

  • INGESTION_URL: Het eindpunt voor opname van metrische gegevens dat wordt weergegeven op de overzichtspagina voor de Azure Monitor-werkruimte
  • LISTENING_PORT: 8081 (elke poort wordt ondersteund)
  • IDENTITY_TYPE: workloadIdentity
  1. Kopieer de volgende YAML en sla deze op in een bestand. De YAML gebruikt poort 8081 als de luisterpoort. Als u een andere poort gebruikt, wijzigt u die waarde in de 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. Vervang de volgende waarden in de YAML:

    Weergegeven als Beschrijving
    <CLUSTER-NAME> De naam van uw AKS-cluster.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    De versie van de externe schrijfcontainerinstallatiekopieën.
    <INGESTION-URL> De waarde voor het opname-eindpunt voor metrische gegevens op de overzichtspagina voor de Azure Monitor-werkruimte.
  3. Gebruik Helm om het YAML-bestand toe te passen en uw Prometheus-configuratie bij te werken:

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

Verificatie en probleemoplossing

Zie Problemen met externe schrijfbewerkingen en beheerde Azure Monitor-service voor externe schrijfbewerkingen voor Prometheus voor informatie over verificatie en probleemoplossing.

Volgende stappen