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:
- Siapkan identitas beban kerja.
- Buat aplikasi Microsoft Entra atau identitas terkelola yang ditetapkan pengguna dan berikan izin.
- Tetapkan peran Penerbit Metrik Pemantauan pada aturan pengumpulan data ruang kerja ke aplikasi.
- Buat atau perbarui pod Prometheus akun layanan Kubernetes Anda.
- Tetapkan kredensial identitas gabungan antara identitas dan penerbit akun layanan dan subjek.
- 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 MonitorLISTENING_PORT
:8081
(port apa pun didukung)IDENTITY_TYPE
:workloadIdentity
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
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. 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
- Mengumpulkan metrik Prometheus dari kluster AKS
- Pelajari selengkapnya tentang layanan terkelola Azure Monitor untuk Prometheus
- Penulisan jarak jauh di layanan terkelola Azure Monitor untuk Prometheus
- Mengirim data Prometheus ke Azure Monitor dengan menggunakan autentikasi Microsoft Entra
- Mengirim data Prometheus ke Azure Monitor dengan menggunakan autentikasi identitas terkelola
- Mengirim data Prometheus ke Azure Monitor dengan menggunakan autentikasi identitas yang dikelola pod Microsoft Entra (pratinjau)