巧用 Prometheus 监控 Kubernetes 集群所有组件的证书

KubeSphere 虽然提供了运维友好的向导式操作界面,简化了 Kubernetes 的运维操作,但它还是建立在底层 Kubernetes 之上的,Kubernetes 默认的证书有效期都是一年,即使使用 KubeKey [1] 这样的集群安装利器也不能改变这个结果。如果不想办法对 Kubernetes 各个组件的证书有效期进行监控,说不定哪天就会掉进坑里。

有部分读者可能听说过 ssl-exporter [2] 这个项目,它能提供多种针对 SSL 的检测手段,包括:HTTPS 证书、文件证书、Kubernetes Secret、Kubeconfig 文件。从功能上来看,它基本可以满足上述需求,但它的指标还不够丰富,本文将介绍一个更为强大的 Prometheus Exporter: x509-certificate-exporter [3] 。

与 ssl-exporter 不同,x509-certificate-exporter 只专注于监控 Kubernetes 集群相关的证书,包括各个组件的文件证书、Kubernetes TLS Secret、Kubeconfig 文件,而且指标更加丰富。我们来看看在 KubeSphere 中如何部署 x509-certificate-exporter 以监控集群的所有证书。

准备 KubeSphere 应用模板

KubeSphere [4] 集成了 OpenPitrix [5] 来提供应用程序全生命周期管理,OpenPitrix 是一个多云应用管理平台,KubeSphere 利用它实现了应用商店和应用模板,以可视化的方式部署并管理应用。对于应用商店中不存在的应用,用户可以将 Helm Chart 交付至 KubeSphere 的公共仓库,或者导入私有应用仓库来提供应用模板。

本教程将使用 KubeSphere 的应用模板来部署 x509-certificate-exporter。

要想从应用模板部署应用,需要创建一个企业空间、一个项目和两个用户帐户( ws-admin 和 project-regular )。 ws-admin 必须被授予企业空间中的 workspace-admin 角色, project-regular 必须被授予项目中的 operator 角色。有关更多信息,请参考 创建企业空间、项目、帐户和角色 [6] 。

创建项目

在此步骤中,您需要使用在上一步骤中创建的帐户 ws-admin 来创建项目。KubeSphere 中的项目与 Kubernetes 中的命名空间相同,为资源提供了虚拟隔离。有关更多信息,请参见 命名空间 [7] 。

  1. 以 ws-admin 身份登录 KubeSphere,在 项目管理 中,点击 创建 。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第1张图片

  2. 输入项目名称(例如 exporter ),然后点击 确定 完成,您还可以为项目添加别名和描述。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第2张图片

  3. 在 项目管理 中,点击刚创建的项目查看其详细信息。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第3张图片

  4. 邀请 project-regular 至该项目,并授予该用户 operator 角色。请参考下图以了解具体步骤。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第4张图片

    具有 operator 角色的用户是项目维护者,可以管理项目中除用户和角色以外的资源。

添加应用仓库

  1. 以 ws-admin 用户登录 KubeSphere 的 Web 控制台。在您的企业空间中,进入 应用管理 下的 应用仓库 页面,并点击 添加仓库 。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第5张图片

  2. 在弹出的对话框中,将应用仓库名称设置为 enix ,将应用仓库的 URL 设置为 https://charts.enix.io ,点击 验证 对 URL 进行验证,再点击 确定 进入下一步。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第6张图片

  3. 应用仓库导入成功后会显示在如下图所示的列表中。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第7张图片

部署 x509-certificate-exporter

导入 x509-certificate-exporter 的应用仓库后,就可以通过应用模板来部署 x509-certificate-exporter 了。

改完后的效果如图所示。

巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第8张图片

  1. 登出 KubeSphere 并以 project-regular 用户重新登录。在您的项目中,进入 应用负载 下的 应用 页面,再点击 部署新应用 。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第9张图片

  2. 在弹出的对话框中选择 来自应用模板 。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第10张图片

  3. 在弹出的对话框中选择 来自应用模板 。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第11张图片

    来自应用商店:选择内置的应用和以 Helm Chart 形式单独上传的应用。

    来自应用模板:从私有应用仓库和企业空间应用池选择应用。

  4. 从下拉列表中选择之前添加的私有应用仓库 enix 。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第12张图片

  5. 选择 x509-certificate-exporter 进行部署。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第13张图片

  6. 您可以查看应用信息和配置文件,在 版本 下拉列表中选择版本,然后点击部署。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第14张图片

  7. 设置应用名称,确认应用版本和部署位置,点击下一步。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第15张图片

  8. 接下来进入应用配置页面。

    巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第16张图片

  9. 这里需要手动编辑配置清单,指定证书文件的路径。

      daemonSets:
        master:
          nodeSelector:
            node-role.kubernetes.io/master: ''
          tolerations:
            - effect: NoSchedule
              key: node-role.kubernetes.io/master
              operator: Exists
          watchFiles:
            - /var/lib/kubelet/pki/kubelet-client-current.pem
            - /etc/kubernetes/pki/apiserver.crt
            - /etc/kubernetes/pki/apiserver-kubelet-client.crt
            - /etc/kubernetes/pki/ca.crt
            - /etc/kubernetes/pki/front-proxy-ca.crt
            - /etc/kubernetes/pki/front-proxy-client.crt
          watchKubeconfFiles:
            - /etc/kubernetes/admin.conf
            - /etc/kubernetes/controller-manager.conf
            - /etc/kubernetes/scheduler.conf
        nodes:
          tolerations:
            - effect: NoSchedule
              key: node-role.kubernetes.io/ingress
              operator: Exists
          watchFiles:
            - /var/lib/kubelet/pki/kubelet-client-current.pem
            - /etc/kubernetes/pki/ca.crt
    

    该配置会创建两个 DaemonSet ,master 运行在控制节点,nodes 运行在计算节点。

    $ kubectl -n exporter get ds
    
    NAME                                    DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                     AGE
    x509-x509-certificate-exporter-master   1         1         1       1            1           node-role.kubernetes.io/master=   3d14h
    x509-x509-certificate-exporter-nodes    3         3         3       3            3                                       3d14h
    

    参数解释:

    • watchFiles: 证书文件所在的路径。

    • watchKubeconfFiles: Kubeconfig 文件所在的路径。

  10. 点击部署,等待应用创建完成并开始运行。

巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第17张图片

接入监控系统

通过应用模板部署完成后,除了会创建两个 DaemonSet 之外,还会创建一个 ServiceMonitor 。

$ kubectl -n exporter get servicemonitor
NAME                             AGE
x509-x509-certificate-exporter   3d15h

打开 Prometheus 的 Web UI,可以看到相应的 Targets 已经在线。

巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第18张图片

x509-certificate-exporter 官方提供了一个 Grafana Dashboard [8] ,导入 Grafana 后的效果如图:

巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第19张图片

各项指标一目了然,一般我们只需要关注已经过期的证书和即将过期的证书即可。假设我想查看证书还有多久失效,可以使用表达式 (x509_cert_not_after{filepath!=""} - time()) / 3600 / 24 。

巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第20张图片

可以创建相应的告警规则,以便在证书即将过期时通知运维人员尽快更新证书。例如:

进入 监控告警 下的 告警策略 页面,点击 创建 。

巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第21张图片

填写告警名称,设置告警级别,点击下一步。

巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第22张图片

选择自定义规则,告警规则填入 (x509_cert_not_after{filepath!=""} - time()) / 3600 / 24 < 30 。

巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第23张图片

 

点击下一步,填写标题和消息。

巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第24张图片

点击创建,告警规则就创建完成了。

巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第25张图片

结语

事实上 KubeSphere 从 3.1 版本开始就内置了证书过期的告警策略,可以在 告警策略 页面的 内置策略 中输入 expir 进行搜索。

巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第26张图片

点进去可以看到具体的告警规则表达式。

巧用 Prometheus 监控 Kubernetes 集群所有组件的证书_第27张图片

告警规则表达式里面的指标是 API Server 组件自身暴露的指标,并没有兼顾到整个集群所有组件的证书。想要全面监控所有组件的证书,建议结合 x509-certificate-exporter 在 KubeSphere 中添加自定义告警策略,从此不再为证书过期而烦恼。

脚注

[1]

KubeKey: https://github.com/kubesphere/kubekey

[2]

ssl-exporter: https://github.com/ribbybibby/ssl_exporter

[3]

x509-certificate-exporter: https://github.com/enix/x509-certificate-exporter

[4]

KubeSphere: https://kubesphere.com.cn

[5]

OpenPitrix: https://github.com/openpitrix/openpitrix

[6]

创建企业空间、项目、帐户和角色: https://kubesphere.io/zh/docs/quick-start/create-workspace-and-project/

[7]

命名空间: https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/namespaces/

[8]

Grafana Dashboard: https://grafana.com/grafana/dashboards/13922

你可能感兴趣的:(云原生生态项目,prometheus,kubernetes,ca证书)