Prometheus メトリクス
cert-managerの動作とインサイトを把握するために、cert-managerはコントローラー、webhook、cainjectorコンポーネントからPrometheus形式でメトリクスを公開します。これらは、各コンポーネントPodのポート9402
の標準/metrics
エンドポイントで利用可能です。
メトリクスのスクレイピング
メトリクスをどのようにスクレイピングするかは、Prometheusサーバーをどのように運用しているかによって異なります。これらの例では、Prometheusの実行とPodまたはService Monitor CRDの設定にPrometheus Operatorが使用されていることを前提としています。
Helm
Helmを使用してcert-managerをデプロイする場合、PodMonitor
リソースを設定できます。この構成によりメトリクスのスクレイピングが有効になり、Helm構成ドキュメントに記載されているように、構成をさらに調整できます。
prometheus:enabled: truepodmonitor:enabled: true
通常のマニフェスト
Helmを使用せずに、提供された通常のYAMLマニフェストを使用してcert-managerをデプロイする場合は、この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
を使用して指定できます。
証明書と秘密鍵は、これが機能するためにコントローラーポッドにマウントする必要があります。cert-managerがhelmを使用してデプロイされている場合は、.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は名前付きシークレットに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
ℹ️ この構成により、単一の新しいシークレット
cert-manager/cert-manager-metrics-ca
が作成され、CAが含まれます。最初のcontroller
、webook
、またはcainjector
PodがCAシークレットを作成し、他のポッドはそれを使用します。コントローラー、webhook、およびcainjector Podはすべて、独自のメトリクスサービス証明書を生成し、CA秘密鍵で署名します。
PodMonitor
は、CAシークレットから公開証明書を読み取るように構成されており、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
プロジェクトで確認できます。