【问题标题】:Is there a way to monitor tls certificates in kubernetes using prometheus?有没有办法使用 prometheus 监控 kubernetes 中的 tls 证书?
【发布时间】:2020-08-01 17:20:43
【问题描述】:

我想使用 Prometheus 在 Kubernetes 中监控我的 tls 证书,并在 grafana 中获取仪表板。我想监控它们的到期时间,并希望在证书将在 30 天内到期时收到警报。我做了很多研究,终于找到了https://github.com/enix/x509-exporter。我该如何使用它?有没有其他有效的方法来监控证书的到期情况?

【问题讨论】:

    标签: ssl kubernetes prometheus grafana tls1.2


    【解决方案1】:

    免责声明:我没有尝试过这个x509-exporter。只是根据我的理解提出建议。

    自述文件似乎有点不对劲。您需要做的第一件事是创建一个 github 问题,不用担心我提出了一个 here

    我正在根据我的理解列出步骤并参考usage section

    • 使用他们的official docker image 并将其部署为 k8s 上的部署。
    • 检查示例 k8s yaml 文件以创建部署。另请注意,部署 yaml 应挂载存储所有 k8s 证书的主机目录。
    • 根据documentation,证书通常位于/etc/kubernetes/pki
    • 部署 yaml 应包含 command,您可以在其中将导出器指向证书所在的目录以及其他必要的选项。像这样
    command: ["x509-exporter"]
    args: ["-d", "/etc/kubernetes/pki", "-p", "8091", "--debug"]
    

    注意:这里我在 8091 端口上以调试模式运行导出器,记得公开这个端口。

    • 在 prometheus 配置中,添加 x509-exporter 端点作为目标,以抓取指标并通过在 Grafana 仪表板中创建图表来绘制这些指标。

    【讨论】:

    • 那是一个非常详细的答案。是的,使用它我可以监控位于文件夹中的证书。让我们假设我的机器中没有证书,并且我想监控多个 tls 机密。我怎么做?有没有办法做到这一点?仅供参考,我正在使用普罗米修斯运算符
    • 对于这个出口商,你必须有证书来监控它。如果证书分布在不同的机器上,则要么运行多个导出器,要么将所有证书合并到特定的单个位置,然后对其进行监控。
    • 我尝试过制作一个 grafana 仪表板,它给了我很多不必要的信息。我需要的信息是它即将过期的 no_of_days、文件的名称和证书的 CN。我是编写查询的新手。你能帮帮我吗?
    • 您需要创建自己的 grafana 仪表板,其中的查询引用了 no_of_days 等所需的指标。对于初学者来说,请查看prometheus.io/docs/visualization/grafana/…
    【解决方案2】:

    另一种方法是使用 helm chart 安装 x509-exporter:https://hub.helm.sh/charts/enix/x509-exporter

    在此处查看文档https://github.com/enix/helm-charts/tree/master/charts/x509-exporter

    您可能还会发现以下 prometheus 警报规则很有用(基于 x509-exporter 指标):

    检查 kubernetes-certificate.rules.yml :

    groups:
    - name: check-kubernetes-certificate-expiration.rules
      rules:
      - alert: KubernetesCertificateExpiration
        expr: floor((x509_cert_not_after - time()) / 86400) < 90
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: 'Certificate expiration on `{{ $labels.nb_cluster }}`'
          description: 'Certificate `{{ $labels.subject_CN }}` will expire in {{ $value }} days on `{{ $labels.nb_cluster }}`'
    
      - alert: KubernetesCertificateExpirationCritical
        expr: floor((x509_cert_not_after - time()) / 86400) < 10
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: 'Certificate expiration on `{{ $labels.nb_cluster }}`'
          description: 'Certificate `{{ $labels.subject_CN }}` will expire in {{ $value }} days on `{{ $labels.nb_cluster }}`'
    
      - alert: KubeletCertificateEmbedded
        expr: x509_cert_not_after{filename="kubelet.conf", embedded_kind="user"}
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: '{{ $labels.instance }}: Embedded certificate in {{ $labels.filename }}'
          description: '{{ $labels.nb_cluster }} has kubelet {{ $labels.subject_CN }} running with an embedded certificate in {{ $labels.filepath }}'
    

    【讨论】:

    【解决方案3】:

    官方prometheus/blackbox_exporter 已经有 ssl 证书到期信息。

     Name: "probe_ssl_earliest_cert_expiry",
     Help: "Returns earliest SSL cert expiry date",
    

    所以你只需要:

    1. 为您要监控的域设置 blackbox_exporter 和探测规则。
      您可以查看我的项目kehao95/helm-prometheus-exporter 以通过 helm chart 安装 blackbox_exporter。
    2. 配置规则来监控证书过期。

    您可以像这样配置您的prometheusRule:(假设您使用的是 prometheus-operator)

    rules: 
      - alert: TLS certificate expiring
        expr: (probe_ssl_earliest_cert_expiry - time())/86400 < 45
        labels:
          severity: warning
      - alert: TLS certificate expiring
        expr: (probe_ssl_earliest_cert_expiry - time())/86400 < 30
        labels:
          severity: critical
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多