东湖之滨 发表于 2022-12-14 19:19:39

监控Kubernetes集群证书过期时间的三种方案

前言

Kubernetes 中大量用到了证书, 比如 ca证书、以及 kubelet、apiserver、proxy、etcd等组件,还有 kubeconfig 文件。
如果证书过期,轻则无法登录 Kubernetes 集群,重则整个集群异常。
为了解决证书过期的问题,一般有以下几种方式:

[*]大幅延长证书有效期,短则 10年,长则 100 年;
[*]证书快过期是自动轮换,如 Rancher 的 K3s,RKE2 就采用这种方式;
[*]增加证书过期的监控,便于提早发现证书过期问题并人工介入
本次主要介绍关于 Kubernetes 集群证书过期的监控,这里提供 3 种监控方案:

[*]使用 Blackbox Exporter 通过 Probe 监控 Kubernetes apiserver 证书过期时间;
[*]使用 kube-prometheus-stack 通过 apiserver 和 kubelet 组件监控获取相关证书过期时间;
[*]使用 enix 的 x509-certificate-exporter监控集群所有node的 /etc/kubernetes/pki 和 /var/lib/kubelet 下的证书以及 kubeconfig 文件
方案一: Blackbox Exporter 监控 Kubernetes apiserver 证书过期时间

Blackbox Exporter 用于探测 HTTPS、HTTP、TCP、DNS、ICMP 和 grpc 等 Endpoint。在你定义 Endpoint 后,Blackbox Exporter 会生成指标,可以使用 Grafana 等工具进行可视化。Blackbox Exporter 最重要的功能之一是测量 Endpoint 的可用性。
当然, Blackbox Exporter 探测 HTTPS 后就可以获取到证书的相关信息, 就是利用这种方式实现对 Kubernetes apiserver 证书过期时间的监控.
配置步骤


[*]调整 Blackbox Exporter 的配置, 增加 insecure_tls_verify: true, 如下:
https://img2023.cnblogs.com/other/3034537/202212/3034537-20221208104340630-1578950483.jpg
[*]重启 blackbox exporter: kubectl rollout restart deploy ...
[*]增加对 Kubernetes APIServer 内部端点https://kubernetes.default.svc.cluster.local/readyz的监控.

[*]如果你没有使用 Prometheus Operator, 使用的是原生的 Prometheus, 则需要修改 Prometheus 配置文件的 configmap 或 secret, 添加 scrape config, 示例如下:
https://img2023.cnblogs.com/other/3034537/202212/3034537-20221208104341371-532035668.png
[*]如果在使用 Prometheus Operator, 则可以增加如下 Probe CRD, Prometheus Operator 会自动将其转换并 merge 到 Prometheus 中.

apiVersion: monitoring.coreos.com/v1
kind: Probe
metadata:
name: kubernetes-apiserver
spec:
interval: 60s
module: http_2xx
prober:
    path: /probe
    url: monitor-prometheus-blackbox-exporter.default.svc.cluster.local:9115
targets:
    staticConfig:
      static:
      - https://kubernetes.default.svc.cluster.local/readyz最后, 可以增加 Prometheus 告警 Rule, 这里就直接用 Prometheus Operator 创建 PrometheusRule CRD 做示例了, 示例如下:
apiVersion: monitoring.coreos.com/v1kind: PrometheusRulemetadata:name: prometheus-blackbox-exporterspec:groups:- name: prometheus-blackbox-exporter    rules:    - alert: BlackboxSslCertificateWillExpireSoon      expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 30      for: 0m      labels:      severity: warning    - alert: BlackboxSslCertificateWillExpireSoon      expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 14      for: 0m      labels:      severity: critical    - alert: BlackboxSslCertificateExpired      annotations:      description: |-          SSL certificate has expired already            VALUE = {{ $value }}            LABELS = {{ $labels }}      summary: SSL certificate expired (instance {{ $labels.instance }})      expr: probe_ssl_earliest_cert_expiry - time()
页: [1]
查看完整版本: 监控Kubernetes集群证书过期时间的三种方案