Prometheus 指標
為了協助 cert-manager 活動的運作和深入了解,cert-manager 會從 controller、webhook 和 cainjector 元件中以 Prometheus 格式公開指標。這些指標在每個元件 Pod 的 /metrics
標準端點的 9402
埠提供。
抓取指標
如何抓取指標將取決於您如何操作 Prometheus 伺服器。這些範例假設使用 Prometheus Operator 來執行 Prometheus,並設定 Pod 或 Service Monitor CRD。
Helm
如果您使用 helm 部署 cert-manager,則可以設定 PodMonitor
資源。此設定應啟用指標抓取,並且可以按照 Helm 設定文件中所述進一步調整設定。
prometheus:enabled: truepodmonitor:enabled: true
常規 Manifests
如果您未使用 helm 部署 cert-manager,而是使用提供的常規 YAML manifests,則此範例 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 檔案範例如下
# 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 檔案範例如下
# 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 將使用它。所有 controller、webhook 和 cainjector Pod 都會產生自己唯一的指標服務憑證,並使用 CA 私密金鑰簽署這些憑證。
PodMonitor
設定為從 CA Secret 讀取公用憑證,並且 Prometheus 在連線到每個相符 Pod 的指標伺服器時將使用該 CA。所有服務憑證都共用相同的 DNS 名稱。必須將相同的名稱新增至
PodMonitor
,並且 Prometheus 在連線到每個相符 Pod 的指標伺服器時將使用該主機名稱。
疑難排解
檢查 controller、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
專案中找到。