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.
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:
Tambahkan volume
istio-certske Pod Prometheus.volumes: - emptyDir: medium: Memory name: istio-certsTambahkan dua
anotasiberikut 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 manaproxyMetadata.OUTPUT_CERTSmenyimpan sertifikat dan kunci di path/etc/istio-output-certs.sidecar.istio.io/userVolumeMount: Memasang volume ke path/etc/istio-output-certsdi kontainer proxy sidecar.
Pasang volume
istio-certske 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-certsDalam 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: truePada YAML di atas, bidang
labelsmenentukan 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
Jalankan perintah berikut untuk mengkloning repositori sumber Prometheus Operator dari GitHub ke mesin lokal Anda.
git clone https://github.com/prometheus-operator/prometheus-operator.gitJalankan perintah berikut untuk menginstal Prometheus Operator.
cd prometheus-operator/ kubectl create -f bundle.yamlJalankan perintah berikut untuk memeriksa status pod.
kubectl get podsOutput yang diharapkan:
NAME READY STATUS RESTARTS prometheus-operator-58dd988c9c-qhrrp 2/2 Running 0Output ini menunjukkan bahwa Prometheus Operator berhasil diinstal.
Langkah 2: Terapkan Prometheus menggunakan CR
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.
CatatanResource kustom (CR) terkait Prometheus yang disediakan dalam topik ini hanya untuk tujuan demonstrasi. Sesuaikan berdasarkan lingkungan produksi Anda.
Jalankan perintah berikut untuk menerapkan file prometheus.yaml ke kluster.
kubectl apply -f prometheus.yamlJalankan perintah berikut untuk memeriksa apakah instans Prometheus telah berjalan dengan benar.
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 0Output ini menunjukkan bahwa pod prometheus-default-0 dan prometheus-default-1 sedang berjalan.
Langkah 3: Definisikan aturan pengambilan menggunakan ServiceMonitor
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
schemeyang disebutkan dalam Konfigurasikan instans Prometheus untuk mengumpulkan metrik TLS.CatatanCR 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: trueJalankan perintah berikut untuk menerapkan file service-monitor.yaml ke kluster.
kubectl apply -f service-monitor.yaml
Langkah 4: Akses UI Prometheus dan verifikasi metrik
Jalankan perintah berikut untuk mengatur penerusan port dari port lokal 9090 ke port 9090 layanan
prometheus-operated.kubectl port-forward svc/prometheus-operated 9090Masukkan
localhost:9090di 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.
Di bilah menu atas, pilih untuk melihat status target pemantauan.
CatatanJika 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.
Di bilah menu atas, klik Graph, masukkan
python_gc_objects_collected_totaldi 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
generationmenjadi 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.