介绍一个小工具: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