全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Kumpulkan metrik aplikasi melalui mTLS dengan Prometheus

更新时间:Mar 11, 2026

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.

Penting

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:

  1. Volume emptyDir (istio-certs) yang didukung oleh memori ditambahkan ke Pod Prometheus.

  2. Anotasi Pod menginstruksikan proxy sidecar untuk menulis sertifikat dan kuncinya ke volume bersama ini.

  3. Kontainer Prometheus memasang volume yang sama dan membaca sertifikat dari volume tersebut.

  4. 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.

  • kubectl yang telah dikonfigurasi dengan file kubeconfig dari kluster target

Langkah 1: Instal Prometheus Operator

  1. Klon repositori Prometheus Operator:

       git clone https://github.com/prometheus-operator/prometheus-operator.git
  2. Instal Prometheus Operator:

       cd prometheus-operator/
       kubectl create -f bundle.yaml
  3. Verifikasi instalasi:

       kubectl get pods

    Output 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.

Catatan

CR dalam panduan ini hanya untuk tujuan demonstrasi. Sesuaikan dengan kebutuhan produksi Anda.

  1. 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: example

    Penjelasan anotasi utama:

    AnotasiTujuan
    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/config dengan OUTPUT_CERTSMemberi tahu proxy sidecar untuk menulis sertifikat dan kunci ke /etc/istio-output-certs
    sidecar.istio.io/userVolumeMountMemasang volume istio-certs di /etc/istio-output-certs di dalam kontainer sidecar

    Bagian volumeMounts memasang volume istio-certs yang sama di /etc/prom-certs/ di dalam kontainer Prometheus. Karena kedua kontainer berbagi volume yang sama, Prometheus dapat membaca sertifikat yang ditulis oleh sidecar.

  2. Terapkan konfigurasi:

       kubectl apply -f prometheus.yaml
  3. Verifikasi bahwa Pod Prometheus sedang berjalan:

       kubectl get pods

    Output 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.

Catatan

CR dalam panduan ini hanya untuk tujuan demonstrasi. Sesuaikan dengan kebutuhan produksi Anda.

  1. 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.

  2. Terapkan ServiceMonitor:

       kubectl apply -f service-monitor.yaml

Langkah 4: Verifikasi pengumpulan metrik

  1. Siapkan penerusan port ke layanan Prometheus:

       kubectl port-forward svc/prometheus-operated 9090
  2. Buka http://localhost:9090 di browser.

    Prometheus web UI

  3. Klik Status > Target di bilah navigasi atas. Pastikan State dari target yang dipantau adalah Up, yang menunjukkan bahwa Prometheus berhasil mengambil metrik melalui mTLS.

    Catatan

    Jika 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.

    Target status showing Up

  4. Klik Graph di bilah navigasi atas. Masukkan python_gc_objects_collected_total di kotak kueri lalu klik Execute. Hasil kueri menampilkan metrik yang telah dikumpulkan:

    Reported metrics graph

Ringkasan konfigurasi

Tabel berikut merangkum poin konfigurasi utama di seluruh komponen:

KomponenKonfigurasiTujuan
Volume PodemptyDir bernama istio-certsPenyimpanan bersama untuk sertifikat
Anotasi sidecarOUTPUT_CERTS + userVolumeMountSidecar menulis sertifikat ke volume bersama
Pemasangan volume Prometheus/etc/prom-certs/Prometheus membaca sertifikat dari volume bersama
ServiceMonitorscheme: https + tlsConfigPrometheus menggunakan sertifikat tersebut untuk permintaan scrape mTLS