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