はじめに
Openshiftではopenshift-monitoring
というnamespaceにデフォルトでnode-exporterが存在し
$ oc get ds -n openshift-monitoring NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE node-exporter 3 3 3 3 3 kubernetes.io/os=linux ...
ノードのメトリクスをPrometheusが収集しています。
本記事ではそのメトリクス収集の動きを調査した結果について記載しました。
環境情報
$ oc get clusterversion NAME VERSION AVAILABLE PROGRESSING SINCE STATUS version 4.6.X True False 45h Cluster version is 4.6.X
Prometheus.yamlの中身
node-exporterに対する設定は以下のようになっていて
- job_name: openshift-monitoring/node-exporter/0 ... - role: endpoints namespaces: names: - openshift-monitoring scrape_interval: 15s scheme: https tls_config: insecure_skip_verify: false ca_file: /etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt server_name: node-exporter.openshift-monitoring.svc bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
接続にルート証明書とAuthorizationのToken情報が記載されています。
よって同情報を参考にcurlで打鍵していきます。
ca_fileとtoken_fileを指定した疎通確認
/etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt
ファイルの実体をopensslコマンドで確認すると
$ openssl x509 -text -noout -in service-ca.crt Certificate: ... Issuer: CN = openshift-service-serving-signer@XX ...
ルート証明書になっています。
実際に同サービスにcurlコマンドを投げると確かにIssuerが一致していることが分かります。
$ curl https://node-exporter.openshift-monitoring.svc:9100 -v ... * Server certificate: * subject: CN=node-exporter.openshift-monitoring.svc ... * issuer: CN=openshift-service-serving-signer@XX ...
そして同ファイルを指定して接続をしかけたとしてもHTTP/1.1 401 Unauthorized
となるので
$ curl https://node-exporter.openshift-monitoring.svc:9100 --cacert service-ca.crt Unauthorized
TokenをAuthorization: Bearer
にて指定することで
$ curl https://node-exporter.openshift-monitoring.svc:9100 -H "Authorization: Bearer $(cat /var/run/secrets/kuberne tes.io/serviceaccount/token)" --cacert service-ca.crt <html> <head><title>Node Exporter</title></head> <body> <h1>Node Exporter</h1> <p><a href="/metrics">Metrics</a></p> </body> </html>
確かにNodeExporterに接続ができました。
終わりに
Exporterは自作する場合はHTTPで特に認証不要で情報を取れますが
OpenshiftのようにデフォルトでTLS/Token認証が入っている場合はこのあたりの情報を入れないと401エラーで接続に失敗するので注意が必要です。
本記事がそのあたりの環境理解の一助になれば幸いです。