最新消息:在TwitterMastodon獲取專案更新

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: true
podmonitor:
enabled: true

常規 Manifests

如果您未使用 helm 部署 cert-manager,而是使用提供的常規 YAML manifests,則此範例 PodMonitor 應該是開始擷取 cert-manager 指標所需的全部內容。

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: cert-manager
namespace: cert-manager
labels:
app: cert-manager
app.kubernetes.io/name: cert-manager
app.kubernetes.io/instance: cert-manager
spec:
jobLabel: app.kubernetes.io/name
selector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- cainjector
- cert-manager
- webhook
- key: app.kubernetes.io/instance
operator: In
values:
- release-name
- key: app.kubernetes.io/component
operator: In
values:
- cainjector
- controller
- webhook
podMetricsEndpoints:
- port: http-metrics

TLS

可以在指標端點上啟用 TLS 以進行端對端加密。這可以使用預先簽署的靜態憑證,或使用內部動態憑證簽署來實現。

靜態憑證

可以將靜態憑證提供給 cert-manager,以便在監聽指標端點時使用。如果憑證檔案已變更,則 cert-manager 會重新載入憑證以進行零停機輪換。

可以使用標誌 --metrics-tls-cert-file--metrics-tls-private-key-file,或對應的設定檔參數 metricsTLSConfig.filesystem.certFilemetricsTLSConfig.filesystem.keyFile 來指定靜態憑證。

憑證和私密金鑰必須掛載到控制器 Pod 中才能運作。如果使用 helm 部署 cert-manager,則 .volumes[].mounts[] 屬性可以協助實現此目的。

Helm values 檔案範例如下

# values.yaml
prometheus:
enabled: true
config:
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.secretNamespacemetricsTLSConfig.dynamic.secretNamemetricsTLSConfig.dynamic.dnsNames 來指定動態憑證。

Helm values 檔案範例如下

# values.yaml
prometheus:
enabled: true
podmonitor:
enabled: true
endpointAdditionalProperties:
scheme: https
tlsConfig:
serverName: cert-manager-metrics
ca:
secret:
name: cert-manager-metrics-ca
key: "tls.crt"
config:
metricsTLSConfig:
dynamic:
secretNamespace: "cert-manager"
secretName: "cert-manager-metrics-ca"
dnsNames:
- cert-manager-metrics
webhook:
config:
metricsTLSConfig:
dynamic:
secretNamespace: "cert-manager"
secretName: "cert-manager-metrics-ca"
dnsNames:
- cert-manager-metrics
cainjector:
config:
metricsTLSConfig:
dynamic:
secretNamespace: "cert-manager"
secretName: "cert-manager-metrics-ca"
dnsNames:
- cert-manager-metrics

ℹ️ 此設定將產生一個新的 Secret cert-manager/cert-manager-metrics-ca,其中包含 CA。第一個 controllerwebookcainjector 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-forwardcurl 檢查與指標端點的連線

kubectl port-forward -n cert-manager deployment/cert-manager-webhook 9402
curl --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 專案中找到。