Udostępnij za pośrednictwem


Wysyłanie danych rozwiązania Prometheus do usługi Azure Monitor przy użyciu uwierzytelniania Tożsamość obciążeń Microsoft Entra

W tym artykule opisano sposób konfigurowania zdalnego zapisu w celu wysyłania danych z zarządzanego klastra Prometheus usługi Azure Monitor przy użyciu uwierzytelniania Tożsamość obciążeń Microsoft Entra.

Wymagania wstępne

  • Wersje Prometheus większe niż wersja 2.48 są wymagane do uwierzytelniania aplikacji Entra ID firmy Microsoft.
  • Prometheus uruchomiony w klastrze. W tym artykule założono, że klaster Prometheus został skonfigurowany przy użyciu stosu kube-prometheus, ale można skonfigurować rozwiązanie Prometheus przy użyciu innych metod.

Konfigurowanie zdalnego zapisu przy użyciu Tożsamość obciążeń Microsoft Entra

Proces konfigurowania zapisu zdalnego rozwiązania Prometheus przy użyciu uwierzytelniania Tożsamość obciążeń Microsoft Entra obejmuje wykonanie następujących zadań:

  1. Włącz program OpenID Connect i zanotuj adres URL wystawcy.
  2. Skonfigurujmutowanie elementu webhook przyjęcia.
  3. Skonfiguruj tożsamość obciążenia.
  4. Utwórz aplikację Microsoft Entra lub tożsamość zarządzaną przypisaną przez użytkownika i przyznaj uprawnienia.
  5. Przypisz rolę Wydawca metryk monitorowania w regule zbierania danych obszaru roboczego do aplikacji.
  6. Utwórz lub zaktualizuj konto usługi Kubernetes Prometheus.
  7. Ustanów poświadczenia tożsamości federacyjnej między tożsamością a wystawcą konta usługi i podmiotem.
  8. Wdróż kontener przyczepki, aby skonfigurować zdalny zapis.

Zadania są opisane w poniższych sekcjach.

Włączanie funkcji OpenID Connect i wykonywanie zapytań względem wystawcy

Aby włączyć program OpenID Connect (OIDC) w klastrze usługi AKS, postępuj zgodnie z instrukcjami w temacie Tworzenie dostawcy openID Connect w usłudze AKS.

Po włączeniu zanotuj SERVICE_ACCOUNT_ISSUER, który jest zasadniczo adresem URL wystawcy OIDC. Aby uzyskać adres URL wystawcy OIDC, uruchom polecenie az aks show . Zastąp wartości domyślne nazwy klastra i nazwy grupy zasobów.

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

Domyślnie wystawca jest ustawiony tak, aby używał podstawowego adresu URL https://{region}.oic.prod-aks.azure.com, gdzie wartość parametru {region} jest zgodna z lokalizacją, w której wdrożony jest klaster usługi AKS.

W przypadku innych klastrów zarządzanych (Amazon Elastic Kubernetes Service i Google Kubernetes Engine) zobacz Managed Clusters - Tożsamość obciążeń Microsoft Entra (Zarządzane klastry — Tożsamość obciążeń Microsoft Entra). W przypadku klastrów zarządzanych samodzielnie zobacz Samoobsługowe klastry — Tożsamość obciążeń Microsoft Entra.

Konfigurowaniemutowania elementu webhook przyjęcia

Skonfiguruj mutowanie elementu webhook przyjęcia, aby zachować aktualne poświadczenia federacyjne. Zobacz Mutating Admission Webhook — Tożsamość obciążeń Microsoft Entra do skonfigurowania.

Konfigurowanie tożsamości obciążenia

Aby skonfigurować tożsamość obciążenia, wyeksportuj następujące zmienne środowiskowe:

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

W przypadku SERVICE_ACCOUNT_NAMEprogramu sprawdź, czy konto usługi (oddzielone od domyślnego konta usługi) jest już skojarzone z zasobnikiem Prometheus. Wyszukaj wartość serviceaccountName lub serviceAccount (przestarzałą) w spec zasobniku Prometheus. Użyj tej wartości, jeśli istnieje. Aby znaleźć konto usługi skojarzone z zasobnikiem Prometheus, uruchom poniższe polecenie kubectl:

kubectl get pods/<Promethuespodname> -o yaml

Jeśli serviceaccountName i serviceAccount nie istnieje, wprowadź nazwę konta usługi, które chcesz skojarzyć z zasobnikiem Prometheus.

Tworzenie aplikacji Microsoft Entra lub tożsamości zarządzanej przypisanej przez użytkownika i udzielanie uprawnień

Utwórz aplikację Microsoft Entra lub tożsamość zarządzaną przypisaną przez użytkownika i przyznaj uprawnienie do publikowania metryk w obszarze roboczym usługi Azure Monitor:

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

Przypisywanie roli Wydawca metryk monitorowania w regule zbierania danych obszaru roboczego do aplikacji lub tożsamości zarządzanej

Aby uzyskać informacje na temat przypisywania roli, zobacz Przypisywanie roli Wydawca metryk monitorowania w regule zbierania danych obszaru roboczego do tożsamości zarządzanej.

Tworzenie lub aktualizowanie konta usługi Kubernetes Prometheus

Często konto usługi Kubernetes jest tworzone i skojarzone z zasobnikiem z uruchomionym kontenerem Prometheus. Jeśli używasz stosu kube-prometheus, kod automatycznie tworzy konto usługi prometheus-kube-prometheus-prometheus.

Jeśli żadne konto usługi Kubernetes z wyjątkiem domyślnego konta usługi jest skojarzone z rozwiązaniem Prometheus, utwórz nowe konto usługi przeznaczone specjalnie dla zasobnika z uruchomionym rozwiązaniem Prometheus.

Aby utworzyć konto usługi, uruchom następujące polecenie kubectl:

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

Jeśli konto usługi Kubernetes inne niż domyślne konto usługi jest skojarzone z zasobnikiem, dodaj następującą adnotację do konta usługi:

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

Jeśli twoja aplikacja Microsoft Entra lub tożsamość zarządzana przypisana przez użytkownika nie znajduje się w tej samej dzierżawie co klaster, dodaj następującą adnotację do konta usługi:

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

Ustanawianie poświadczeń tożsamości federacyjnej między tożsamością a wystawcą konta usługi i podmiotem

Utwórz poświadczenia federacyjne przy użyciu interfejsu wiersza polecenia platformy Azure.

Tożsamość zarządzana przypisana przez użytkownika

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

Aplikacja Microsoft Entra

# 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

Wdrażanie kontenera przyczepki w celu skonfigurowania zdalnego zapisu

Ważne

Zasobnik Prometheus musi mieć następującą etykietę: azure.workload.identity/use: "true"

Zdalny kontener przyczepki zapisu wymaga następujących wartości środowiska:

  • INGESTION_URL: Punkt końcowy pozyskiwania metryk wyświetlany na stronie Przegląd obszaru roboczego usługi Azure Monitor
  • LISTENING_PORT: 8081 (obsługiwany jest dowolny port)
  • IDENTITY_TYPE: workloadIdentity
  1. Skopiuj następujący kod YAML i zapisz go w pliku. Kod YAML używa portu 8081 jako portu nasłuchiwania. Jeśli używasz innego portu, zmodyfikuj ją w pliku 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. Zastąp następujące wartości w pliku YAML:

    Wartość Opis
    <CLUSTER-NAME> Nazwa klastra usługi AKS.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    Zdalna wersja obrazu kontenera zapisu.
    <INGESTION-URL> Wartość punktu końcowego pozyskiwania metryk na stronie Przegląd obszaru roboczego usługi Azure Monitor.
  3. Użyj narzędzia Helm, aby zastosować plik YAML i zaktualizować konfigurację rozwiązania Prometheus:

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

Weryfikacja i rozwiązywanie problemów

Aby uzyskać informacje dotyczące weryfikacji i rozwiązywania problemów, zobacz Rozwiązywanie problemów z zdalnym zapisem i usługą zarządzaną Azure Monitor dla zdalnego zapisu w usłudze Prometheus.

Następne kroki