Odesílání dat Prometheus do služby Azure Monitor pomocí ověřování ID úloh Microsoft Entra (Preview)

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.

  • Cluster s příznaky funkcí, které jsou specifické pro OpenID Připojení (OIDC) a adresu URL vystavitele OIDC:

  • Nainstalovaný webhook pro ztlumení přístupu. Další informace naleznete v tématu Mutating Access Webhook - ID úloh Microsoft Entra.

  • 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í úlohy pro ID úloh Microsoft Entra

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

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

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

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 of Prometheus pod>"
export SERVICE_ACCOUNT_NAME="<name of service account associated with Prometheus pod>"
export SERVICE_ACCOUNT_ISSUER="<your service account 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 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/prometheus/promdev/prom-remotewrite:prom-remotewrite-20230906.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