Prometheus 指标
为了帮助进行操作并深入了解 cert-manager 的活动,cert-manager 以 Prometheus 格式从控制器、Webhook 和 cainjector 组件公开指标。这些指标可在每个组件 Pod 的标准 /metrics
端点(端口 9402
)上获取。
抓取指标
如何抓取指标取决于您如何操作 Prometheus 服务器。这些示例假设使用 Prometheus Operator 运行 Prometheus,并配置 Pod 或 Service Monitor CRD。
Helm
如果使用 Helm 部署 cert-manager,可以配置 PodMonitor
资源。此配置应启用指标抓取,并且可以根据 Helm 配置文档 中的描述进一步调整配置。
prometheus:enabled: truepodmonitor:enabled: true
常规清单
如果不使用 Helm 部署 cert-manager,而是使用提供的常规 YAML 清单,则此示例 PodMonitor
应该是开始摄取 cert-manager 指标所需的一切。
apiVersion: monitoring.coreos.com/v1kind: PodMonitormetadata:name: cert-managernamespace: cert-managerlabels:app: cert-managerapp.kubernetes.io/name: cert-managerapp.kubernetes.io/instance: cert-managerspec:jobLabel: app.kubernetes.io/nameselector:matchExpressions:- key: app.kubernetes.io/nameoperator: Invalues:- cainjector- cert-manager- webhook- key: app.kubernetes.io/instanceoperator: Invalues:- release-name- key: app.kubernetes.io/componentoperator: Invalues:- cainjector- controller- webhookpodMetricsEndpoints:- port: http-metrics
TLS
可以在指标端点上启用 TLS 以实现端到端加密。这可以通过使用预签名静态证书或使用内部动态证书签名来实现。
静态证书
可以向 cert-manager 提供静态证书,以便在侦听指标端点时使用。如果证书文件发生更改,则 cert-manager 将重新加载证书以实现零停机时间轮换。
可以使用标志 --metrics-tls-cert-file
和 --metrics-tls-private-key-file
或相应的配置文件参数 metricsTLSConfig.filesystem.certFile
和 metricsTLSConfig.filesystem.keyFile
指定静态证书。
证书和私钥必须装载到控制器 Pod 中才能正常工作。如果使用 Helm 部署 cert-manager,则 .volumes[]
和 .mounts[]
属性可以帮助实现此功能。
Helm 值文件示例:
# values.yamlprometheus:enabled: trueconfig:metricsTLSConfig:filesystem:certFile: "/path/to/cert.pem"keyFile: "/path/to/key.pem"webhook:config:metricsTLSConfig:filesystem:certFile: "/path/to/cert.pem"keyFile: "/path/to/key.pem"cainjector:config:metricsTLSConfig:filesystem:certFile: "/path/to/cert.pem"keyFile: "/path/to/key.pem"
动态证书
在此模式下,cert-manager 将在命名 Secret 中创建 CA,然后使用此 CA 签署指标端点证书。此模式还将负责轮换,并在需要时自动轮换证书。
可以使用标志 --metrics-dynamic-serving-ca-secret-namespace
、--metrics-dynamic-serving-ca-secret-name
和 --metrics-dynamic-serving-dns-names
或相应的配置文件参数 metricsTLSConfig.dynamic.secretNamespace
、metricsTLSConfig.dynamic.secretName
和 metricsTLSConfig.dynamic.dnsNames
指定动态证书。
Helm 值文件示例:
# values.yamlprometheus:enabled: truepodmonitor:enabled: trueendpointAdditionalProperties:scheme: httpstlsConfig:serverName: cert-manager-metricsca:secret:name: cert-manager-metrics-cakey: "tls.crt"config:metricsTLSConfig:dynamic:secretNamespace: "cert-manager"secretName: "cert-manager-metrics-ca"dnsNames:- cert-manager-metricswebhook:config:metricsTLSConfig:dynamic:secretNamespace: "cert-manager"secretName: "cert-manager-metrics-ca"dnsNames:- cert-manager-metricscainjector:config:metricsTLSConfig:dynamic:secretNamespace: "cert-manager"secretName: "cert-manager-metrics-ca"dnsNames:- cert-manager-metrics
ℹ️ 此配置将导致创建一个新的 Secret
cert-manager/cert-manager-metrics-ca
,其中包含 CA。第一个controller
、webook
或cainjector
Pod 将创建 CA Secret,其他 Pod 随后将使用它。所有控制器、Webhook 和 cainjector Pod 都将生成自己的唯一指标服务证书,并使用 CA 私钥对其进行签名。
PodMonitor
被配置为从 CA Secret 读取公钥证书,Prometheus 将在连接到每个匹配 Pod 的指标服务器时使用该 CA。所有服务证书共享相同的 DNS 名称。必须将相同的名称添加到
PodMonitor
,Prometheus 将在连接到每个匹配 Pod 的指标服务器时使用该主机名。
故障排除
检查控制器、Webhook 和 cainjector 日志以查看创建和更新的 CA 证书和服务证书。
kubectl -n cert-manager logs -l app.kubernetes.io/instance=cert-manager --prefix
I0719 15:21:28.113411 1 dynamic_source.go:172] "Detected root CA rotation - regenerating serving certificates" logger="cert-manager"I0719 15:21:28.115018 1 dynamic_source.go:290] "Updated cert-manager TLS certificate" logger="cert-manager" DNSNames=["cert-manager-metrics"]
使用 kubectl port-forward
和 curl
检查指标端点的连接。
kubectl port-forward -n cert-manager deployment/cert-manager-webhook 9402curl --insecure -v https://localhost:9402/metrics
检查 Prometheus 状态页面上 cert-manager 抓取目标的运行状况。
监控 Mixin
监控 Mixin 是一种使用 Jsonnet 数据模板语言以可配置且可扩展的方式将应用程序的常用警报、规则和仪表盘捆绑在一起的方式。cert-manager 监控 Mixin 可在此处找到 https://gitlab.com/uneeq-oss/cert-manager-mixin。有关用法的文档可在 cert-manager-mixin
项目中找到。