介紹一個小工具:SSL-exporter

Kubeadm 安裝時的證書有效期設置爲 1 年,雖說有 sealos 這樣的不知名安裝器以及各種方案來更新證書,但是對於像我一樣經常跟不知來源的 Kubernetes 集羣打交道的人來說,這個有效期就是達摩什麼的利劍,不一定什麼時候會砍到脖子上。如果能用 Prometheus 對證書有效期進行監控或者告警,就能更好地保護好自己的脖子了,ssl-exporter 就是這麼個有趣的項目。

ssl-exporter 是個 Prometheus Exporter,能提供多種針對 SSL 的檢測手段,包括:https 證書生效/失效時間、文件證書生效/失效時間,OCSP 等相關指標。下面用 API Server 證書檢測來驗證這一功能:

首先進行部署:

apiVersion: v1
kind: Service
metadata:
labels:
name: ssl-exporter
name: ssl-exporter
spec:
ports:
- name: ssl-exporter
protocol: TCP
port: 9219
targetPort: 9219
selector:
app: ssl-exporter
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: ssl-exporter
spec:
replicas: 1
selector:
matchLabels:
app: ssl-exporter
template:
metadata:
name: ssl-exporter
labels:
app: ssl-exporter
spec:
initContainers:
# Install kube ca cert as a root CA
- name: ca
image: alpine
command:
- sh
- -c
- |
set -e
apk add --update ca-certificates
cp /var/run/secrets/kubernetes.io/serviceaccount/ca.crt /usr/local/share/ca-certificates/kube-ca.crt
update-ca-certificates
cp /etc/ssl/certs/* /ssl-certs
volumeMounts:
- name: ssl-certs
mountPath: /ssl-certs
containers:
- name: ssl-exporter
image: ribbybibby/ssl-exporter:v0.6.0
ports:
- name: tcp
containerPort: 9219
volumeMounts:
- name: ssl-certs
mountPath: /etc/ssl/certs
volumes:
- name: ssl-certs
emptyDir: {}

上面的 YAML 部署了一個 Deployment 和 Service,在 9219 端口上提供 Exporter 服務。

接下來在 Prometheus 中配置一下抓取 Kubernetes 服務的內容:

- job_name: ssl-exporter
metrics_path: /probe
static_configs:
- targets:
- kubernetes.default.svc:443
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: ssl-exporter:9219

接下來就可以進行查詢了,查詢語句:(ssl_cert_not_after-time())/3600/24,這個表達式查詢各個目標的過期時間和當前時間的差。執行查詢獲取到過期天數,查詢結果是 349 天。同樣的表達式,複製到 Alertmanager 中,就可以及時的獲取到證書的過期時間了。

相關鏈接

  • ssl-exporter:

    https://github.com/ribbybibby/ssl_exporter

  • ssl-exporter 示例部署和配置:

    https://github.com/ribbybibby/ssl_exporter/issues/12#issuecomment-562966945

  • sealos:

    https://github.com/fanux/sealos

本文分享自微信公衆號 - 雲原生實驗室(cloud_native_yang)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章