Prometheus 監控 PostgreSQL server 實作 part.2 - 利用k8s secret管理PostgreSQL連線密碼
前言
最近應觀眾(客戶)要求,原本的postgres_exporter是使用export datasource設置環境變數方式,有名馬明碼被看光光的疑慮。
所以我們要讓postgres_exporter跑在k8s cluster上,利用k8s secret resource來粉飾太平處理明碼問題。
記錄一下設定的步驟,避免我的金魚腦馬上就忘光了。
原本的postgres_exporter監控可以先參考另一位同事的力作:
Prometheus 監控 PostgreSQL server 實作
環境說明
Version | |
kubernetes cluster | v1.15.0 |
helm | 2.14.2 |
postgres-exporter | 0.4.7 |
實作
因為我們有使用helm來管理k8s的package,所以當然先搜一下helm chart有沒有方便好用即成的囉!
[root@caai1 k8s-monitoring]# helm search postgres-exporter
NAME CHART VERSION APP VERSION DESCRIPTION
stable/prometheus-postgres-exporter 0.6.2 0.4.7 A Helm chart for prometheus postgres-exporter
非常好!果然有,那我們就直接下載回來使用吧。
[root@caai1 k8s-monitoring]# helm fetch stable/prometheus-postgres-exporter --untar
[root@caai1 k8s-monitoring]# cd prometheus-postgres-exporter/
先看一下目錄裡有什麼
[root@caai1 prometheus-postgres-exporter]# ls -al
total 36
drwx------ 3 root root 4096 Jul 17 11:56 .
drwxr-xr-x 10 root root 4096 Jul 17 17:41 ..
-rwxr-xr-x 1 root root 360 Jul 3 17:49 Chart.yaml
-rwxr-xr-x 1 root root 333 Jul 3 17:49 .helmignore
-rwxr-xr-x 1 root root 4490 Jul 3 17:49 README.md
drwx------ 2 root root 4096 Jul 17 11:58 templates
-rwxr-xr-x 1 root root 7526 Jul 17 11:53 values.yaml
要調整的地方不多,先修改values.yaml
[root@caai1 prometheus-postgres-exporter]# vi values.yaml
有二個區塊要調整的,首先是看到service這部分。
這邊先將type修改為NodePort,另外增加一行參數nodePort: 31987,指定要將服務port開在31987。
接下來往下找到config區塊。這邊填入要監控的PostgreSQL資訊。
咦!但這邊的密碼依舊是明碼的呀?這不是在唬客人嗎!?
這邊很貼心的有提供了二種方式:password or passwordSecret,二個擇一填即可。
如果客官您不熟怎麼先建立一個k8s secret resource來放密碼的話,這邊先使用password這個欄位。
在helm install時會判斷並建立一個新的secret來存放編碼過的密碼。
接下來我們要對templates/service.yaml動一點小手腳。
找到spec.ports這一段,在底下加上這段:
{{- if eq .Values.service.type "NodePort" }}
nodePort: {{ .Values.service.nodePort }}
{{- end }}
說明一下這邊為什麼需要將service.type改為NodePort:
因為我們的prometheus是單獨跑在k8s cluster外的另一台機器,若維持原本的ClusterIP方式。
只有k8s cluster裡才能連的到postgres-exporter。
因此需調整讓postgres-exporter service,能夠被k8s cluster以外的機器也連的到。
改完存檔離開,接下來要安裝囉。
[root@caai1 prometheus-postgres-exporter]# helm install -n postgres-exporter . --namespace monitoring
檢查一下安裝狀態,看起來pod有正常在running了。
[root@caai1 prometheus-postgres-exporter]# helm ls postgres-exporter
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
postgres-exporter 1 Wed Jul 17 11:58:52 2019 DEPLOYED prometheus-postgres-exporter-0.6.2 0.4.7 monitoring
[root@caai1 prometheus-postgres-exporter]#
[root@caai1 prometheus-postgres-exporter]#
[root@caai1 prometheus-postgres-exporter]# kubectl -n monitoring get pod -l release=postgres-exporter
NAME READY STATUS RESTARTS AGE
postgres-exporter-prometheus-postgres-exporter-7c5c5fd6c5-75f7h 1/1 Running 0 2d5h
接著就去修改prometheus server上的prometheus.yaml,
將postgres-exporter的scrap_config修改成新啟動的這組。
[tpuser@caai4 ~]$ sudo vim /etc/prometheus/prometheus.yml
大功告成!登入Grafana,就能看到已經是由新的這組postgres-exporter提供metric資料囉。
補充知識
還記得在前面我們有提到密碼會存放在k8s secret裡嗎,但是實際的密碼依舊是好端端的明碼設定在values.yaml裡呀~
那怎麼辦!?
這時候我們就可以在初次安裝後,改用passwordSecret這項設定。(或是在安裝前就已經有建立了secret也可以依照這樣的設定法)
先查出要使用的secret名稱
編輯values.yaml。
1.將password的值拿掉
2.將passwordSecret後面的大括號{}刪除
3.設定上圖查出來的name與key
其實postgres-exporter chart裡已經有考慮到種種情況,
因此即使第一次安裝完成後,就將password密碼清空;且沒設定passwordSecret,helm upgrade時也會抓首次安裝建立出來的secret。
這種事應該要早點講啊!( ´_ゝ`)
太讚了 .... 但圖不給看啦 orz