Share via


Prometheus-gegevens verzenden naar Azure Monitor met behulp van Microsoft Entra Workload-ID (preview)-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.

  • Een cluster met functievlagken die specifiek zijn voor OpenID Verbinding maken (OIDC) en een OIDC-verlener-URL:

  • Een geïnstalleerde dempingswebhook voor toegang. Zie Toegangswebhook dempen - Microsoft Entra Workload-ID voor meer informatie.

  • 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.

Een workload instellen voor Microsoft Entra Workload-ID

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

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

De taken worden beschreven in de volgende secties.

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