NEW: プロジェクトの最新情報をTwitterMastodonで入手してください。

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

通常のマニフェスト

Helmを使用せずに、提供された通常のYAMLマニフェストを使用してcert-managerをデプロイする場合は、この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.certFileおよびmetricsTLSConfig.filesystem.keyFileを使用して指定できます。

証明書と秘密鍵は、これが機能するためにコントローラーポッドにマウントする必要があります。cert-managerがhelmを使用してデプロイされている場合は、.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は名前付きシークレットにCAを作成し、このCAを使用してメトリクスエンドポイント証明書に署名します。このモードでは、ローテーション、必要に応じた証明書の自動ローテーションも処理します。

動的証明書は、フラグ--metrics-dynamic-serving-ca-secret-namespace--metrics-dynamic-serving-ca-secret-name、および--metrics-dynamic-serving-dns-names、または対応する構成ファイルパラメータmetricsTLSConfig.dynamic.secretNamespacemetricsTLSConfig.dynamic.secretName、およびmetricsTLSConfig.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

ℹ️ この構成により、単一の新しいシークレットcert-manager/cert-manager-metrics-caが作成され、CAが含まれます。最初のcontrollerwebook、またはcainjectorPodが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-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プロジェクトで確認できます。