Sdílet prostřednictvím


Odeslání dat Prometheus do služby Azure Monitor pomocí ověřování ID úloh Microsoft Entra

Tento článek popisuje, jak nastavit vzdálené zápisy pro odesílání dat ze spravovaného clusteru Azure Monitoru pomocí ověřování ID úloh Microsoft Entra.

Požadavky

  • Pro ověřování aplikace Microsoft Entra ID se vyžadují verze Prometheus větší než verze 2.48.
  • Prometheus spuštěný v clusteru. Tento článek předpokládá, že cluster Prometheus je nastavený pomocí zásobníku kube-prometheus, ale prometheus můžete nastavit pomocí jiných metod.

Nastavení vzdáleného zápisu pomocí ID úloh Microsoft Entra

Proces nastavení vzdáleného zápisu Prometheus pomocí ověřování ID úloh Microsoft Entra zahrnuje dokončení následujících úloh:

  1. Povolte OpenID Connect a poznamenejte si adresu URL vystavitele.
  2. Nastavte webhook pro ztlumení přístupu.
  3. Nastavte identitu úlohy.
  4. Vytvořte aplikaci Microsoft Entra nebo spravovanou identitu přiřazenou uživatelem a udělte oprávnění.
  5. Přiřaďte aplikaci roli Vydavatele metrik monitorování v pravidle shromažďování dat pracovního prostoru.
  6. Vytvořte nebo aktualizujte svůj účet služby Kubernetes Prometheus.
  7. Vytvořte přihlašovací údaje federované identity mezi identitou a vystavitelem účtu služby a předmětem.
  8. Nasaďte kontejner sajdkáru pro nastavení vzdáleného zápisu.

Úkoly jsou popsány v následujících částech.

Povolení OpenID Connect a dotazování vystavitele

Pokud chcete povolit OpenID Connect (OIDC) v clusteru AKS, postupujte podle pokynů v tématu Vytvoření zprostředkovatele OpenID Connect v AKS.

Po povolení si poznamenejte SERVICE_ACCOUNT_ISSUER, což je v podstatě adresa URL vystavitele OIDC. Pokud chcete získat adresu URL vystavitele OIDC, spusťte příkaz az aks show . Nahraďte výchozí hodnoty pro název clusteru a název skupiny prostředků.

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

Ve výchozím nastavení je vystavitel nastavený tak, aby používal základní adresu URL https://{region}.oic.prod-aks.azure.com, kde hodnota odpovídá {region} umístění, ve kterém je cluster AKS nasazený.

Další spravované clustery (Amazon Elastic Kubernetes Service a Google Kubernetes Engine) najdete v tématu Spravované clustery – ID úloh Microsoft Entra. Informace o samoobslužných clusterech najdete v tématu Samoobslužné clustery – ID úloh Microsoft Entra.

Nastavení webhooku pro ztlumení přístupu

Nastavte webhook pro ztlumení přístupu, aby byly federované přihlašovací údaje aktuální. Viz Mutating Access Webhook – ID úloh Microsoft Entra k nastavení.

Nastavení identity úlohy

Pokud chcete nastavit identitu úlohy, exportujte následující proměnné prostředí:

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

Pokud SERVICE_ACCOUNT_NAMEchcete zjistit, jestli je účet služby (oddělený od výchozího účtu služby) již přidružený k podu Prometheus. V podu Prometheus vyhledejte hodnotu serviceaccountName nebo serviceAccount (zastaralá spec ). Tuto hodnotu použijte, pokud existuje. Pokud chcete najít účet služby přidružený k podu Prometheus, spusťte následující příkaz kubectl:

kubectl get pods/<Promethuespodname> -o yaml

Pokud serviceaccountName a serviceAccount neexistuje, zadejte název účtu služby, který chcete přidružit k podu Prometheus.

Vytvoření aplikace Microsoft Entra nebo spravované identity přiřazené uživatelem a udělení oprávnění

Vytvořte aplikaci Microsoft Entra nebo spravovanou identitu přiřazenou uživatelem a udělte oprávnění k publikování metrik do pracovního prostoru služby 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}"

Přiřazení role Vydavatele metrik monitorování v pravidle shromažďování dat pracovního prostoru k aplikaci nebo spravované identitě

Informace o přiřazování role najdete v tématu Přiřazení role vydavatele metrik monitorování v pravidle shromažďování dat pracovního prostoru spravované identitě.

Vytvoření nebo aktualizace účtu služby Kubernetes Prometheus

Účet služby Kubernetes se často vytvoří a přidružuje k podu, na kterém běží kontejner Prometheus. Pokud používáte zásobník kube-prometheus, kód automaticky vytvoří účet služby prometheus-kube-prometheus-prometheus-prometheus.

Pokud k Prometheus není přidružený žádný účet služby Kubernetes s výjimkou výchozího účtu služby, vytvořte nový účet služby speciálně pro pod, na kterém běží Prometheus.

Pokud chcete vytvořit účet služby, spusťte následující příkaz 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

Pokud je k vašemu podu přidružený jiný účet služby Kubernetes, než je výchozí účet služby, přidejte do svého účtu služby následující poznámku:

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

Pokud vaše aplikace Microsoft Entra nebo spravovaná identita přiřazená uživatelem není ve stejném tenantovi jako váš cluster, přidejte do svého účtu služby následující poznámku:

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

Vytvoření přihlašovacích údajů federované identity mezi identitou a vystavitelem účtu služby a předmětem

Vytvoření federovaných přihlašovacích údajů pomocí Azure CLI

Spravovaná identita přiřazená uživatelem

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

Aplikace 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

Nasazení kontejneru sajdkáru pro nastavení vzdáleného zápisu

Důležité

Pod Prometheus musí mít následující popisek: azure.workload.identity/use: "true"

Kontejner vzdáleného zápisu sajdkáře vyžaduje následující hodnoty prostředí:

  • INGESTION_URL: Koncový bod příjmu metrik zobrazený na stránce Přehled pracovního prostoru služby Azure Monitor
  • LISTENING_PORT: 8081 (podporuje se jakýkoli port)
  • IDENTITY_TYPE: workloadIdentity
  1. Zkopírujte následující YAML a uložte ho do souboru. YAML používá jako naslouchající port port 8081. Pokud používáte jiný port, upravte tuto hodnotu v 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. Nahraďte v YAML následující hodnoty:

    Hodnota Popis
    <CLUSTER-NAME> Název clusteru AKS
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    Verze image vzdáleného zápisu kontejneru pro zápis
    <INGESTION-URL> Hodnota koncového bodu příjmu metrik ze stránky Přehled pracovního prostoru služby Azure Monitor.
  3. Použijte Helm k instalaci souboru YAML a aktualizaci konfigurace 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> 
    

Ověření a řešení potíží

Informace o ověřování a řešení potíží najdete v tématu Řešení potíží se vzdáleným zápisem a spravovanou službou Azure Monitor pro vzdálený zápis pro Prometheus.

Další kroky