使用 TLS 加密保护 Prometheus API 和 UI 端点
Prometheus 支持传输层安全 (TLS) 加密到 Prometheus 实例的连接(例如,到表达式浏览器或HTTP API)。如果您想强制使用 TLS 进行这些连接,则需要创建一个特定的 Web 配置文件。
注意本指南介绍了到 Prometheus 实例的 TLS 连接。Prometheus 也支持从 Prometheus 实例到抓取目标的连接。
先决条件
假设您已经有一个正在运行的 Prometheus 实例,并且您想对其进行调整。本指南不涵盖初始的 Prometheus 设置。
假设您想运行一个通过 TLS 提供的 Prometheus 实例,该实例可用于您拥有的 example.com 域名。
还假设您已经使用 OpenSSL 或类似的工具生成了以下内容:
- SSL 证书位于
/home/prometheus/certs/example.com/example.com.crt - SSL 密钥位于
/home/prometheus/certs/example.com/example.com.key
您可以使用此命令生成自签名证书和私钥
mkdir -p /home/prometheus/certs/example.com && cd /home/prometheus/certs/certs/example.com
openssl req \
-x509 \
-newkey rsa:4096 \
-nodes \
-keyout example.com.key \
-out example.com.crt
在提示时填写适当的信息,并确保在 通用名称 (Common Name) 提示符下输入 example.com。
Prometheus 配置
以下是一个示例 web-config.yml 配置文件。使用此配置,Prometheus 将在其所有端点上启用 TLS。
tls_server_config:
cert_file: /home/prometheus/certs/example.com/example.com.crt
key_file: /home/prometheus/certs/example.com/example.com.key
要让 Prometheus 使用此配置,您需要使用 --web.config.file 标志来调用它。
prometheus \
--config.file=/path/to/prometheus.yml \
--web.config.file=/path/to/web-config.yml \
--web.external-url=https://example.com/
--web.external-url= 标志在此处是可选的。
测试
如果您想使用 example.com 域名在本地测试 TLS,您可以在 /etc/hosts 文件中添加一个条目,将 example.com 重定向到 localhost。
127.0.0.1 example.com
然后您可以使用 cURL 与您的本地 Prometheus 设置进行交互
curl --cacert /home/prometheus/certs/example.com/example.com.crt \
https://example.com/api/v1/label/job/values
您可以在不指定证书的情况下使用 --insecure 或 -k 标志连接到 Prometheus 服务器
curl -k https://example.com/api/v1/label/job/values