Prometheus不直接支持与Prometheus实例(即表达式浏览器或HTTP API)连接的传输层安全性(TLS)加密。 如果您想为这些连接强制执行TLS,我们建议将Prometheus与反向代理结合使用,并在代理层应用TLS。 您可以使用Prometheus的任何反向代理,但在本指南中我们将提供一个nginx示例。
假设您想要在example.co
m域(您拥有)的nginx服务器后面运行Prometheus实例,并且可以通过/prometheus
端点获得所有Prometheus端点。 因此,Prometheus'/metrics
端点的完整URL将是:
https://example.com/prometheus/metrics
我们还假设你使用OpenSSL或类似工具生成了以下内容:
/root/certs/example.com/example.com.crt
上的SSL证书/root/certs/example.com/example.com.key
上的SSL密钥
您可以使用以下命令生成自签名证书和私钥:
mkdir -p /root/certs/example.com && cd /root/certs/example.com
openssl req \
-x509 \
-newkey rsa:4096 \
-nodes \
-keyout example.com.key \
-out example.com.crt
根据提示填写相应的信息,并确保在Common Name
提示符下输入example.com
。
下面是一个示例nginx.conf
配置文件。 使用此配置,nginx将:
- 使用您提供的证书和密钥强制执行TLS加密
- 将与
/prometheus
端点的所有连接代理到在同一主机上运行的Prometheus服务器(同时从URL中删除/prometheus
)
http {
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /root/certs/example.com/example.com.crt;
ssl_certificate_key /root/certs/example.com/example.com.key;
location /prometheus {
proxy_pass http://localhost:9090/;
}
}
}
events {}
以root身份启动nginx(因为nginx需要绑定到端口443):
sudo nginx -c /usr/local/etc/nginx/nginx.conf
在nginx代理后面运行Prometheus时,您需要将外部URL设置为http://example.com/prometheus
,并将路由前缀设置为/
:
prometheus \
--config.file=/path/to/prometheus.yml \
--web.external-url=http://example.com/prometheus \
--web.route-prefix="/"
如果您想使用example.com
域在本地测试nginx代理,可以在/etc/hosts
文件中添加一个条目,将example.com
重新路由到localhost
:
127.0.0.1 example.com
然后,您可以使用cURL与本地nginx / Prometheus设置进行交互:
curl --cacert /root/certs/example.com/example.com.crt \
https://example.com/prometheus/api/v1/label/job/values
您可以使用--insecure
或-k
标志连接到nginx服务器而不指定证书:
curl -k https://example.com/prometheus/api/v1/label/job/values