(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Openshift/Prometheus】自前で用意したServiceMonitorでエンドポイントとの通信をTLSにする

スポンサーリンク

やりたいこと

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

以上、ご参考になれば幸いです。