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:
- Aktivera OpenID Connect och anteckna utfärdarens URL.
- Konfigurera en webhook för att mutera antagning.
- Konfigurera arbetsbelastningsidentiteten.
- Skapa ett Microsoft Entra-program eller en användartilldelad hanterad identitet och bevilja behörigheter.
- Tilldela utgivarrollen Övervakningsmått för arbetsytans datainsamlingsregel till programmet.
- Skapa eller uppdatera kubernetes-tjänstkontots Prometheus-podd.
- Upprätta federerade identitetsuppgifter mellan identiteten och utfärdaren av tjänstkontot och ämne.
- 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_NAME
kontrollerar 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-arbetsytanLISTENING_PORT
:8081
(alla portar stöds)IDENTITY_TYPE
:workloadIdentity
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
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. 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
- Samla in Prometheus-mått från ett AKS-kluster
- Läs mer om azure monitor-hanterad tjänst för Prometheus
- Fjärrskrivning i Azure Monitor-hanterad tjänst för Prometheus
- Skicka Prometheus-data till Azure Monitor med hjälp av Microsoft Entra-autentisering
- Skicka Prometheus-data till Azure Monitor med hjälp av hanterad identitetsautentisering
- Skicka Prometheus-data till Azure Monitor med hjälp av Microsoft Entra-poddhanterad identitetsautentisering (förhandsversion)