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ń:
- Włącz program OpenID Connect i zanotuj adres URL wystawcy.
- Skonfigurujmutowanie elementu webhook przyjęcia.
- Skonfiguruj tożsamość obciążenia.
- Utwórz aplikację Microsoft Entra lub tożsamość zarządzaną przypisaną przez użytkownika i przyznaj uprawnienia.
- Przypisz rolę Wydawca metryk monitorowania w regule zbierania danych obszaru roboczego do aplikacji.
- Utwórz lub zaktualizuj konto usługi Kubernetes Prometheus.
- Ustanów poświadczenia tożsamości federacyjnej między tożsamością a wystawcą konta usługi i podmiotem.
- 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_NAME
programu 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 MonitorLISTENING_PORT
:8081
(obsługiwany jest dowolny port)IDENTITY_TYPE
:workloadIdentity
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
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. 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
- Zbieranie metryk rozwiązania Prometheus z klastra usługi AKS
- Dowiedz się więcej o usłudze zarządzanej Azure Monitor dla rozwiązania Prometheus
- Zdalne zapisywanie w usłudze zarządzanej Azure Monitor dla rozwiązania Prometheus
- Wysyłanie danych rozwiązania Prometheus do usługi Azure Monitor przy użyciu uwierzytelniania firmy Microsoft Entra
- Wysyłanie danych rozwiązania Prometheus do usługi Azure Monitor przy użyciu uwierzytelniania tożsamości zarządzanej
- Wysyłanie danych rozwiązania Prometheus do usługi Azure Monitor przy użyciu uwierzytelniania tożsamości zarządzanej przez pod firmy Microsoft (wersja zapoznawcza)