All Products
Search
Document Center

Alibaba Cloud Service Mesh:Kumpulkan metrik untuk aplikasi mesh melalui mTLS

Last Updated:Jun 21, 2026

Saat Anda mengaktifkan mutual TLS (mTLS) di Service Mesh (ASM), proxy sidecar mengintersepsi seluruh lalu lintas masuk ke aplikasi Anda. Akibatnya, port yang mengekspos metrik aplikasi juga harus diakses melalui mTLS. Untuk layanan kritis, mengamankan pengumpulan metrik sama pentingnya dengan mengenkripsi komunikasi antar layanan. Topik ini menggunakan instans Service Mesh (ASM) yang diterapkan dengan Prometheus Operator untuk menunjukkan cara mengumpulkan metrik dari aplikasi dalam service mesh melalui mTLS.

Penting

Jika Anda menggunakan Application Real-Time Monitoring Service (ARMS) Alibaba Cloud untuk mengumpulkan metrik, versi agen harus 1.1.20 atau lebih baru. Masuk ke Konsol ARMS. Di panel navigasi sebelah kiri, klik Integration Management. Temukan kluster Anda dalam daftar, lalu di kolom Actions, klik Configure Agent untuk melihat versi agen Prometheus dan lakukan peningkatan jika diperlukan.

Prasyarat

Aplikasi contoh Bookinfo telah diterapkan. Untuk informasi lebih lanjut, lihat Terapkan aplikasi di kluster yang terkait dengan instans ASM Anda.

Konfigurasikan Prometheus untuk mengambil metrik melalui TLS

Agar lolos otentikasi TLS yang diberlakukan oleh proxy sidecar, Prometheus harus menggunakan sertifikat yang dikeluarkan oleh sertifikat root instans ASM. Anda dapat mencapai hal ini dengan memanfaatkan kemampuan pemasangan sertifikat proxy sidecar. Dengan mendefinisikan anotasi tertentu pada Pod Prometheus, Anda mengonfigurasi proxy sidecar agar memasang sertifikat yang dikeluarkan oleh lapisan kontrol ASM ke volume bersama. Kontainer Prometheus kemudian dapat mengakses sertifikat dan kunci tersebut dengan memasang volume bersama ini. Langkah-langkah berikut menjelaskan proses tersebut:

  1. Tambahkan volume istio-certs ke Pod Prometheus.

    volumes:
    - emptyDir:
        medium: Memory
      name: istio-certs
  2. Tambahkan dua anotasi berikut ke Pod Prometheus.

    annotations:
      proxy.istio.io/config: |
        proxyMetadata:
          OUTPUT_CERTS: /etc/istio-output-certs
      sidecar.istio.io/userVolumeMount: '[{"name": "istio-certs", "mountPath": "/etc/istio-output-certs"}]'
    • proxy.istio.io/config: Menentukan konfigurasi proxy, di mana proxyMetadata.OUTPUT_CERTS menyimpan sertifikat dan kunci di path /etc/istio-output-certs.

    • sidecar.istio.io/userVolumeMount: Memasang volume ke path /etc/istio-output-certs di kontainer proxy sidecar.

  3. Pasang volume istio-certs ke path /etc/prom-certs/ di kontainer Prometheus agar Prometheus dapat memperoleh sertifikat dan kunci yang ditulis oleh proxy sidecar ke path tersebut.

    volumeMounts:
    - mountPath: /etc/prom-certs/
      name: istio-certs
  4. Dalam konfigurasi pengambilan (scraping), tentukan workload mana yang menggunakan TLS untuk memulai permintaan pengambilan metrik dan berikan path sertifikatnya. Hanya workload dengan proxy sidecar yang disuntikkan yang memerlukan konfigurasi ini.

    Topik ini menggunakan lingkungan Prometheus Operator sebagai contoh.

    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
        tlsConfig:
          caFile: /etc/prom-certs/root-cert.pem
          certFile: /etc/prom-certs/cert-chain.pem
          keyFile: /etc/prom-certs/key.pem
          insecureSkipVerify: true

    Pada YAML di atas, bidang labels menentukan pengumpulan metrik untuk aplikasi productpage serta mendefinisikan titik akhir pengambilannya. Dalam definisi titik akhir tersebut, konfigurasi terkait TLS adalah sebagai berikut:

    • scheme: https: Menentukan bahwa permintaan dikirim melalui HTTPS.

    • tlsConfig: Menentukan path file untuk sertifikat, sertifikat CA, dan kunci.

    • insecureSkipVerify: true: Mengizinkan akses tanpa verifikasi otentikasi karena Prometheus tidak mendukung skema penamaan identitas Istio.

Konfigurasi di atas memungkinkan Prometheus memasang sertifikat dan kunci yang disediakan oleh proxy sidecar serta menggunakannya untuk memulai permintaan TLS.

Prosedur

Langkah 1: Instal Prometheus Operator

  1. Jalankan perintah berikut untuk mengkloning repositori sumber Prometheus Operator dari GitHub ke mesin lokal Anda.

    git clone https://github.com/prometheus-operator/prometheus-operator.git
  2. Jalankan perintah berikut untuk menginstal Prometheus Operator.

    cd prometheus-operator/
    kubectl create -f bundle.yaml
  3. Jalankan perintah berikut untuk memeriksa status pod.

    kubectl get pods

    Output yang diharapkan:

    NAME                                     READY   STATUS        RESTARTS   
    prometheus-operator-58dd988c9c-qhrrp     2/2     Running       0      

    Output ini menunjukkan bahwa Prometheus Operator berhasil diinstal.

Langkah 2: Terapkan Prometheus menggunakan CR

  1. Simpan YAML berikut ke file lokal bernama prometheus.yaml.

    YAML ini mencakup deklarasi instans Prometheus serta ServiceAccount, ClusterRole, dan ClusterRoleBinding yang diperlukan. Konfigurasi Deployment berisi pengaturan pemasangan volume sertifikat yang dijelaskan dalam Konfigurasikan Prometheus untuk mengambil metrik melalui TLS.

    Catatan

    Resource kustom (CR) terkait Prometheus yang disediakan dalam topik ini hanya untuk tujuan demonstrasi. Sesuaikan berdasarkan lingkungan produksi Anda.

    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: ""
          traffic.sidecar.istio.io/includeOutboundIPRanges: ""
          proxy.istio.io/config: |  # konfigurasikan variabel env `OUTPUT_CERTS` untuk menulis sertifikat ke folder yang ditentukan
            proxyMetadata:
              OUTPUT_CERTS: /etc/istio-output-certs
          sidecar.istio.io/userVolumeMount: '[{"name": "istio-certs", "mountPath": "/etc/istio-output-certs"}]'
      volumes:
      - emptyDir:
          medium: Memory
        name: istio-certs
      volumeMounts:
      - mountPath: /etc/prom-certs/
        name: istio-certs
      replicas: 2
      version: v2.26.0
      serviceAccountName: prometheus-full-access
      serviceMonitorSelector:
        matchLabels:
          team: bookinfo
      ruleSelector:
        matchLabels:
          role: alert-rules
          prometheus: example
  2. Jalankan perintah berikut untuk menerapkan file prometheus.yaml ke kluster.

    kubectl apply -f prometheus.yaml
  3. Jalankan perintah berikut untuk memeriksa apakah instans Prometheus telah berjalan dengan benar.

    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  

    Output ini menunjukkan bahwa pod prometheus-default-0 dan prometheus-default-1 sedang berjalan.

Langkah 3: Definisikan aturan pengambilan menggunakan ServiceMonitor

  1. Simpan YAML berikut ke file lokal bernama service-monitor.yaml.

    File YAML ini berisi deklarasi API ServiceMonitor, yang menjelaskan cara mengumpulkan metrik dari workload. File YAML ini menunjukkan path sertifikat dan pengaturan scheme yang disebutkan dalam Konfigurasikan instans Prometheus untuk mengumpulkan metrik TLS.

    Catatan

    CR terkait Prometheus yang disediakan dalam topik ini hanya untuk tujuan demonstrasi. Sesuaikan berdasarkan lingkungan produksi Anda.

    iVersion: 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
        tlsConfig:
          caFile: /etc/prom-certs/root-cert.pem
          certFile: /etc/prom-certs/cert-chain.pem
          keyFile: /etc/prom-certs/key.pem
          insecureSkipVerify: true
  2. Jalankan perintah berikut untuk menerapkan file service-monitor.yaml ke kluster.

    kubectl apply -f service-monitor.yaml

Langkah 4: Akses UI Prometheus dan verifikasi metrik

  1. Jalankan perintah berikut untuk mengatur penerusan port dari port lokal 9090 ke port 9090 layanan prometheus-operated.

    kubectl port-forward svc/prometheus-operated 9090
  2. Masukkan localhost:9090 di browser untuk membuka UI web Prometheus.

    Antarmuka kueri Prometheus terbuka. Anda dapat memasukkan ekspresi kueri di kotak input Expression, klik Execute untuk menjalankan kueri, dan melihat hasilnya di tab Table atau Graph.

  3. Di bilah menu atas, pilih Status > Target untuk melihat status target pemantauan.

    Catatan

    Jika suatu target diambil melalui TLS, status awalnya mungkin menunjukkan "Unavailable". Hal ini dapat terjadi jika TLS telah dikonfigurasi tetapi pengaturan otentikasinya salah.

    Pastikan State untuk target tersebut adalah Up, yang menunjukkan bahwa metrik berhasil diambil.

  4. Di bilah menu atas, klik Graph, masukkan python_gc_objects_collected_total di kotak teks kueri, lalu klik Execute di sebelah kanan.

    Setelah kueri selesai, data metrik yang dilaporkan akan ditampilkan.

    Hasil kueri ditampilkan dalam tampilan Table, dikelompokkan berdasarkan tag generation menjadi tiga catatan (generation 0, 1, dan 2). Catatan-catatan ini sesuai dengan jumlah total objek yang dikumpulkan oleh masing-masing dari tiga generasi Pengumpulan sampah (GC) Python.