Skip to content

Latest commit

 

History

History
executable file
·
76 lines (66 loc) · 3.17 KB

TLS_encryption.md

File metadata and controls

executable file
·
76 lines (66 loc) · 3.17 KB

使用TLS加密保护PROMETHEUS API和UI端点


Prometheus不直接支持与Prometheus实例(即表达式浏览器或HTTP API)连接的传输层安全性(TLS)加密。 如果您想为这些连接强制执行TLS,我们建议将Prometheus与反向代理结合使用,并在代理层应用TLS。 您可以使用Prometheus的任何反向代理,但在本指南中我们将提供一个nginx示例

nginx例子

假设您想要在example.com域(您拥有)的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配置

下面是一个示例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

Prometheus配置

在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