Saat mutual TLS (mTLS) diaktifkan dalam instans Service Mesh (ASM), proxy sidecar mengintersepsi seluruh lalu lintas masuk ke aplikasi, termasuk permintaan scrape Prometheus. Agar dapat mengakses titik akhir metrik setiap aplikasi, Prometheus harus menyajikan sertifikat yang valid yang dikeluarkan oleh otoritas sertifikat root (CA) ASM.
Panduan ini memandu Anda melalui konfigurasi instans Prometheus yang dikelola sendiri (Prometheus Operator) untuk mengambil metrik aplikasi melalui mTLS dalam instans ASM.
Untuk mengumpulkan metrik dengan Application Real-Time Monitoring Service (ARMS), tingkatkan agen ARMS ke versi 1.1.20 atau lebih baru. Di ARMS console, klik Integration Management di panel navigasi kiri, temukan kluster Anda, lalu klik Configure Agent pada kolom Actions untuk memeriksa versi agen.
Cara kerja
Prometheus memerlukan sertifikat yang dikeluarkan oleh lapisan kontrol ASM untuk mengambil metrik melalui mTLS. Fitur pemasangan sertifikat proxy sidecar menangani hal ini tanpa perlu manajemen sertifikat manual:
Volume
emptyDir(istio-certs) yang didukung oleh memori ditambahkan ke Pod Prometheus.Anotasi Pod menginstruksikan proxy sidecar untuk menulis sertifikat dan kuncinya ke volume bersama ini.
Kontainer Prometheus memasang volume yang sama dan membaca sertifikat dari volume tersebut.
Resource kustom ServiceMonitor (CR) mengonfigurasi Prometheus untuk menggunakan sertifikat ini saat melakukan scrape melalui HTTPS.
Hasilnya: Prometheus menyambungkan sertifikat dan kunci yang disediakan oleh sidecar ke setiap permintaan scrape, sehingga otentikasi mTLS berhasil dilalui secara transparan.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster Kubernetes yang terkait dengan instans ASM
Aplikasi contoh Bookinfo telah di-deploy—lihat Menerapkan aplikasi di instans ASM.
kubectlyang telah dikonfigurasi dengan file kubeconfig dari kluster target
Langkah 1: Instal Prometheus Operator
Klon repositori Prometheus Operator:
git clone https://github.com/prometheus-operator/prometheus-operator.gitInstal Prometheus Operator:
cd prometheus-operator/ kubectl create -f bundle.yamlVerifikasi instalasi:
kubectl get podsOutput yang diharapkan:
NAME READY STATUS RESTARTS prometheus-operator-58dd988c9c-qhrrp 2/2 Running 0
Langkah 2: Terapkan instans Prometheus dengan pemasangan sertifikat mTLS
Langkah ini membuat ServiceAccount, ClusterRole, dan CR Prometheus yang diperlukan untuk menjalankan instans Prometheus dengan akses ke sertifikat yang dikeluarkan oleh ASM.
CR dalam panduan ini hanya untuk tujuan demonstrasi. Sesuaikan dengan kebutuhan produksi Anda.
Simpan YAML berikut sebagai
prometheus.yaml:apiVersion: v1 kind: ServiceAccount metadata: name: prometheus-full-access namespace: default --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus-full-access rules: - apiGroups: [""] resources: - nodes - nodes/metrics - services - endpoints - pods verbs: ["get", "list", "watch"] - apiGroups: - extensions - apps resources: - deployments - replicasets verbs: ["get", "list", "watch"] - apiGroups: [""] resources: - configmaps verbs: ["get"] - nonResourceURLs: ["/metrics"] verbs: ["get"] --- apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: default labels: prometheus: default spec: logLevel: debug podMetadata: annotations: traffic.sidecar.istio.io/includeInboundPorts: "" # jangan intersepsi port inbound apa pun traffic.sidecar.istio.io/includeOutboundIPRanges: "" # jangan intersepsi lalu lintas outbound apa pun proxy.istio.io/config: | # tulis sertifikat ke volume bersama proxyMetadata: OUTPUT_CERTS: /etc/istio-output-certs sidecar.istio.io/userVolumeMount: '[{"name": "istio-certs", "mountPath": "/etc/istio-output-certs"}]' # pasang volume bersama di proxy sidecar volumes: - emptyDir: medium: Memory name: istio-certs volumeMounts: - mountPath: /etc/prom-certs/ # Prometheus membaca sertifikat dari path ini name: istio-certs replicas: 2 version: v2.26.0 serviceAccountName: prometheus-full-access serviceMonitorSelector: matchLabels: team: bookinfo ruleSelector: matchLabels: role: alert-rules prometheus: examplePenjelasan anotasi utama:
Anotasi Tujuan traffic.sidecar.istio.io/includeInboundPorts: ""Mencegah sidecar mengintersepsi lalu lintas masuk ke Prometheus. Model scraping langsung ke titik akhir Prometheus tidak kompatibel dengan proxying sidecar. traffic.sidecar.istio.io/includeOutboundIPRanges: ""Mencegah sidecar mengintersepsi permintaan scrape arah keluar proxy.istio.io/configdenganOUTPUT_CERTSMemberi tahu proxy sidecar untuk menulis sertifikat dan kunci ke /etc/istio-output-certssidecar.istio.io/userVolumeMountMemasang volume istio-certsdi/etc/istio-output-certsdi dalam kontainer sidecarBagian
volumeMountsmemasang volumeistio-certsyang sama di/etc/prom-certs/di dalam kontainer Prometheus. Karena kedua kontainer berbagi volume yang sama, Prometheus dapat membaca sertifikat yang ditulis oleh sidecar.Terapkan konfigurasi:
kubectl apply -f prometheus.yamlVerifikasi bahwa Pod Prometheus sedang berjalan:
kubectl get podsOutput yang diharapkan:
NAME READY STATUS RESTARTS prometheus-default-0 3/3 Running 0 prometheus-default-1 3/3 Running 0 prometheus-operator-58dd988c9c-qhrrp 2/2 Running 0
Langkah 3: Buat ServiceMonitor untuk mengambil metrik melalui mTLS
CR ServiceMonitor memberi tahu Prometheus beban kerja mana yang harus di-scrape dan bagaimana melakukan otentikasi melalui mTLS. Hanya beban kerja dengan proxy sidecar yang disuntikkan yang memerlukan scraping mTLS. Label team: bookinfo pada ServiceMonitor harus sesuai dengan serviceMonitorSelector dalam CR Prometheus dari Langkah 2.
CR dalam panduan ini hanya untuk tujuan demonstrasi. Sesuaikan dengan kebutuhan produksi Anda.
Simpan YAML berikut sebagai
service-monitor.yaml:apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: productpage labels: app: productpage team: bookinfo spec: selector: matchLabels: app: productpage endpoints: - port: http-9080 interval: 30s path: /metrics scheme: https # scrape melalui HTTPS tlsConfig: caFile: /etc/prom-certs/root-cert.pem # Sertifikat CA root ASM certFile: /etc/prom-certs/cert-chain.pem # Rantai sertifikat klien keyFile: /etc/prom-certs/key.pem # Kunci privat klien insecureSkipVerify: true # lewati verifikasi identitas server (lihat catatan di bawah)Rincian konfigurasi:
scheme: https— Prometheus mengirim permintaan scrape melalui HTTPS, yang diperlukan untuk mTLS.tlsConfig— Mengarah ke file sertifikat, sertifikat CA, dan kunci yang ditulis oleh proxy sidecar ke volume bersama.insecureSkipVerify: true— Prometheus tidak mendukung skema penamaan identitas Istio (SPIFFE), sehingga verifikasi sertifikat server harus dilewati. Proses jabat tangan TLS tetap menyediakan otentikasi timbal balik melalui validasi sertifikat klien.
Terapkan ServiceMonitor:
kubectl apply -f service-monitor.yaml
Langkah 4: Verifikasi pengumpulan metrik
Siapkan penerusan port ke layanan Prometheus:
kubectl port-forward svc/prometheus-operated 9090Buka
http://localhost:9090di browser.
Klik Status > Target di bilah navigasi atas. Pastikan State dari target yang dipantau adalah Up, yang menunjukkan bahwa Prometheus berhasil mengambil metrik melalui mTLS.
CatatanJika status menampilkan Unavailable, kemungkinan otentikasi mTLS belum dikonfigurasi dengan benar. Verifikasi bahwa path sertifikat dalam ServiceMonitor sesuai dengan path pemasangan volume dan bahwa proxy sidecar telah disuntikkan ke Pod Prometheus.

Klik Graph di bilah navigasi atas. Masukkan
python_gc_objects_collected_totaldi kotak kueri lalu klik Execute. Hasil kueri menampilkan metrik yang telah dikumpulkan:
Ringkasan konfigurasi
Tabel berikut merangkum poin konfigurasi utama di seluruh komponen:
| Komponen | Konfigurasi | Tujuan |
|---|---|---|
| Volume Pod | emptyDir bernama istio-certs | Penyimpanan bersama untuk sertifikat |
| Anotasi sidecar | OUTPUT_CERTS + userVolumeMount | Sidecar menulis sertifikat ke volume bersama |
| Pemasangan volume Prometheus | /etc/prom-certs/ | Prometheus membaca sertifikat dari volume bersama |
| ServiceMonitor | scheme: https + tlsConfig | Prometheus menggunakan sertifikat tersebut untuk permintaan scrape mTLS |