Node Exporter 开启 TLS认证

生成证书

从 GO 1.15 开始,X509 不能用了 ,需要用到 SAN 证书

生成 CA 根证书

openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 3650 -key ca.key -out ca.pem

用 openssl 生成 ca 和双方 SAN 证书

准备默认 OpenSSL 配置文件于当前目录

  • linux系统在 : /etc/pki/tls/openssl.cnf
  • Mac系统在: /System/Library/OpenSSL/openssl.cnf

1、cp 目录到项目目录进行修改设置
mkdir cert && cp /etc/pki/tls/openssl.cnf .

2、找到 [ CA_default ], 取消 copy_extensions = copy 注释

3、找到[ req ], 取消 req_extensions = v3_req # The extensions to add to a certificate request 注释

4、找到[ v3_req ],添加 subjectAltName = @alt_names

5、添加新的标签 [ alt_names ] , 和标签字段

[ alt_names ]
IP.1 = 127.0.0.1

这里填入需要加入到 Subject Alternative Names 段落中的域名名称或 IP 地址,可以写入多个。

生成服务端证书

openssl genpkey -algorithm RSA -out server.key

openssl req -new -nodes -key server.key -out server.csr -subj "/C=cn/OU=custer/O=custer/CN=localhost" -config ./openssl.cnf -extensions v3_req

openssl x509 -req -days 3650 -in server.csr -out server.pem -CA ca.pem -CAkey ca.key -CAcreateserial -extfile ./openssl.cnf -extensions v3_req

其中:
server.key 为 key 文件,私钥文件
server.pem 为 证书文件,Prometheus 中需要携带的证书文件

将 server.pem 拷贝到 Prometheus 服务器的配置文件平级目录

生成客户端证书(需要双向认证的情况)

openssl genpkey -algorithm RSA -out client.key

openssl req -new -nodes -key client.key -out client.csr -days 3650 -subj "/C=cn/OU=custer/O=custer/CN=localhost" -config ./openssl.cnf -extensions v3_req

openssl x509 -req -days 3650 -in client.csr -out client.pem -CA ca.pem -CAkey ca.key -CAcreateserial -extfile ./openssl.cnf -extensions v3_req

配置 node exporter

添加配置文件
vim /usr/local/node_exporter/config.yml

添加如下内容

tls_server_config:
  cert_file: server.pem
  key_file: server.key

修改 node_exporter.service 服务文件,载入配置文件

[Unit]
Description=Prometheus Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/node_exporter/node_exporter --web.config=/usr/local/node_exporter/config.yml

[Install]
WantedBy=multi-user.target

重启服务

systemctl daemon-reload
systemctl restart node_exporter.service

配置 Prometheus

vim /etc/prometheus/prometheus.yml

- job_name: '10.0.8.6'
    scheme: https
    tls_config:
      ca_file: server.pem
    static_configs:
    - targets: ['IP:9100']

注意:server.pem 文件与 prometheus.yml 文件在同一级目录

重启服务

systemctl daemon-reload
systemctl restart prometheus.service