Mengirim data Prometheus ke Azure Monitor dengan menggunakan autentikasi ID Beban Kerja Microsoft Entra (pratinjau)

Artikel ini menjelaskan cara menyiapkan penulisan jarak jauh untuk mengirim data dari kluster Prometheus terkelola Azure Monitor Anda dengan menggunakan autentikasi ID Beban Kerja Microsoft Entra.

Prasyarat

  • Versi Prometheus yang lebih besar dari v2.48 diperlukan untuk autentikasi aplikasi ID Microsoft Entra.

  • Kluster yang memiliki bendera fitur yang khusus untuk OpenID Koneksi (OIDC) dan URL penerbit OIDC:

    • Untuk kluster terkelola (Azure Kubernetes Service, Amazon Elastic Kubernetes Service, dan Google Kubernetes Engine), lihat Kluster Terkelola - ID Beban Kerja Microsoft Entra.
    • Untuk kluster yang dikelola sendiri, lihat Kluster yang Dikelola Sendiri - ID Beban Kerja Microsoft Entra.
  • Webhook penerimaan bermutasi yang terpasang. Untuk informasi selengkapnya, lihat Bermutasi Webhook Penerimaan - ID Beban Kerja Microsoft Entra.

  • Prometheus berjalan di kluster. Artikel ini mengasumsikan bahwa kluster Prometheus disiapkan dengan menggunakan tumpukan kube-prometheus, tetapi Anda dapat mengatur Prometheus dengan menggunakan metode lain.

Menyiapkan beban kerja untuk ID Beban Kerja Microsoft Entra

Proses untuk menyiapkan penulisan jarak jauh Prometheus untuk beban kerja dengan menggunakan autentikasi ID Beban Kerja Microsoft Entra melibatkan penyelesaian tugas-tugas berikut:

  1. Siapkan identitas beban kerja.
  2. Buat aplikasi Microsoft Entra atau identitas terkelola yang ditetapkan pengguna dan berikan izin.
  3. Tetapkan peran Penerbit Metrik Pemantauan pada aturan pengumpulan data ruang kerja ke aplikasi.
  4. Buat atau perbarui pod Prometheus akun layanan Kubernetes Anda.
  5. Tetapkan kredensial identitas gabungan antara identitas dan penerbit akun layanan dan subjek.
  6. Sebarkan kontainer sidecar untuk menyiapkan penulisan jarak jauh.

Tugas dijelaskan di bagian berikut.

Menyiapkan identitas beban kerja

Untuk menyiapkan identitas beban kerja, ekspor variabel lingkungan berikut:

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

Untuk SERVICE_ACCOUNT_NAME, periksa untuk melihat apakah akun layanan (terpisah dari akun layanan default ) sudah dikaitkan dengan pod Prometheus. Cari nilai serviceaccountName atau serviceAccount (tidak digunakan lagi) di spec pod Prometheus Anda. Gunakan nilai ini jika ada. Jika serviceaccountName dan serviceAccount tidak ada, masukkan nama akun layanan yang ingin Anda kaitkan dengan pod Prometheus Anda.

Membuat aplikasi Microsoft Entra atau identitas terkelola yang ditetapkan pengguna dan memberikan izin

Buat aplikasi Microsoft Entra atau identitas terkelola yang ditetapkan pengguna dan berikan izin untuk menerbitkan metrik ke ruang kerja 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}"

Tetapkan peran Penerbit Metrik Pemantauan pada aturan pengumpulan data ruang kerja ke aplikasi atau identitas terkelola

Untuk informasi tentang menetapkan peran, lihat Menetapkan peran Penerbit Metrik Pemantauan pada aturan pengumpulan data ruang kerja ke identitas terkelola.

Membuat atau memperbarui pod Prometheus akun layanan Kubernetes Anda

Sering kali, akun layanan Kubernetes dibuat dan dikaitkan dengan pod yang menjalankan kontainer Prometheus. Jika Anda menggunakan tumpukan kube-prometheus, kode secara otomatis membuat akun layanan prometheus-kube-prometheus-prometheus.

Jika tidak ada akun layanan Kubernetes kecuali akun layanan default yang terkait dengan Prometheus, buat akun layanan baru khusus untuk pod yang menjalankan Prometheus.

Untuk membuat akun layanan, jalankan perintah kubectl berikut:

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

Jika akun layanan Kubernetes selain akun layanan default dikaitkan dengan pod Anda, tambahkan anotasi berikut ke akun layanan Anda:

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

Jika aplikasi Microsoft Entra atau identitas terkelola yang ditetapkan pengguna tidak berada di penyewa yang sama dengan kluster Anda, tambahkan anotasi berikut ke akun layanan Anda:

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

Menetapkan kredensial identitas federasi antara identitas dan penerbit akun layanan dan subjek

Buat kredensial federasi dengan menggunakan Azure CLI.

Identitas terkelola yang ditetapkan pengguna

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

Aplikasi 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

Menyebarkan kontainer sidecar untuk menyiapkan penulisan jarak jauh

Penting

Pod Prometheus harus memiliki label berikut: azure.workload.identity/use: "true"

Kontainer sidecar tulis jarak jauh memerlukan nilai lingkungan berikut:

  • INGESTION_URL: Titik akhir penyerapan metrik yang ditampilkan di halaman Gambaran Umum untuk ruang kerja Azure Monitor
  • LISTENING_PORT: 8081 (port apa pun didukung)
  • IDENTITY_TYPE: workloadIdentity
  1. Salin YAML berikut dan simpan ke file. YAML menggunakan port 8081 sebagai port mendengarkan. Jika Anda menggunakan port yang berbeda, ubah nilai tersebut di 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. Ganti nilai berikut di YAML:

    Nilai Deskripsi
    <CLUSTER-NAME> Nama kluster AKS Anda.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/prometheus/promdev/prom-remotewrite:prom-remotewrite-20230906.1
    Versi gambar kontainer tulis jarak jauh.
    <INGESTION-URL> Nilai untuk titik akhir penyerapan Metrik dari halaman Gambaran Umum untuk ruang kerja Azure Monitor.
  3. Gunakan Helm untuk menerapkan file YAML dan memperbarui konfigurasi Prometheus Anda:

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

Verifikasi dan pemecahan masalah

Untuk informasi verifikasi dan pemecahan masalah, lihat Pemecahan masalah penulisan jarak jauh dan layanan terkelola Azure Monitor untuk penulisan jarak jauh Prometheus.

Langkah berikutnya