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

打印 上一主题 下一主题

主题 874|帖子 874|积分 2626

前言

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

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

  • 重启 blackbox exporter: kubectl rollout restart deploy ...
  • 增加对 Kubernetes APIServer 内部端点https://kubernetes.default.svc.cluster.local/readyz的监控.

    • 如果你没有使用 Prometheus Operator, 使用的是原生的 Prometheus, 则需要修改 Prometheus 配置文件的 configmap 或 secret, 添加 scrape config, 示例如下:

    • 如果在使用 Prometheus Operator, 则可以增加如下 Probe CRD, Prometheus Operator 会自动将其转换并 merge 到 Prometheus 中.

  1. apiVersion: monitoring.coreos.com/v1
  2. kind: Probe
  3. metadata:
  4.   name: kubernetes-apiserver
  5. spec:
  6.   interval: 60s
  7.   module: http_2xx
  8.   prober:
  9.     path: /probe
  10.     url: monitor-prometheus-blackbox-exporter.default.svc.cluster.local:9115
  11.   targets:
  12.     staticConfig:
  13.       static:
  14.       - https://kubernetes.default.svc.cluster.local/readyz
复制代码
最后, 可以增加 Prometheus 告警 Rule, 这里就直接用 Prometheus Operator 创建 PrometheusRule CRD 做示例了, 示例如下:
[code]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()

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表