やりたいこと
Openshiftにデフォルトで導入されているPrometheusに対して固有アプリのServiceMonitorからポーリングする際のデータをTLSで暗号化したい。
環境情報
$ oc get prometheus --all-namespaces NAMESPACE NAME VERSION REPLICAS AGE openshift-monitoring k8s v2.20.0 2 x openshift-user-workload-monitoring user-workload v2.20.0 2 x
やり方
サービスが公開するメトリクスを使用するために用意したServiceMonitorにて以下の設定項目を付与する。
$ oc explain servicemonitor.spec.endpoints.tlsConfig KIND: ServiceMonitor VERSION: monitoring.coreos.com/v1 RESOURCE: tlsConfig <Object> DESCRIPTION: TLS configuration to use when scraping the endpoint
例えば既存のServiceMonitorに以下のようにtlsConfigプロパティを記載すると
spec: endpoints: - interval: 30s port: metrics scrapeTimeout: 10s tlsConfig: caFile: /etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt serverName: svc1.ns1.svc
TLSで暗号化した状態でPrometheus側から同メトリクスが認識される。
以下、補足です。
補足
OpenShift Container Platform 4.6 ではtlsConfigを使用してメトリクス収集時の設定が行え、例えば既存のDNSOperatorのServiceMonitorは以下となっていました。
spec: endpoints: - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token interval: 30s port: metrics scheme: https tlsConfig: caFile: /etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt serverName: metrics.openshift-dns-operator.svc ...
ちなみに同caFileを指定した場合に想定しない設定の場合はprometheus-operatorコンテナの標準出力に警告が出ます。
$ oc logs -n openshift-user-workload-monitoring prometheus-operator-xx-c prometheus-operator ... level=warn ts=xx caller=operator.go:1636 component=prometheusoperator msg="skipping servicemonitor" error="it accesses file system via tls config which Prometheus specification prohibits" servicemonitor=... namespace=openshift-user-workload-monitoring prometheus=user-workload
以上、ご参考になれば幸いです。