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

Prometheus 支持传输层安全性协议 (TLS) 加密与 Prometheus 实例的连接(即与表达式浏览器或 HTTP API 的连接)。如果你想为这些连接强制启用 TLS,你需要创建一个特定的 Web 配置文件。

注意本指南是关于连接*到* Prometheus 实例的 TLS。对于*从* Prometheus 实例到采集目标的连接,也支持 TLS。

前提条件

假设你已经有一个正在运行的 Prometheus 实例,并且想要对其进行调整。本指南将不涵盖 Prometheus 的初始设置。

假设你希望在 `example.com` 域名(你拥有该域名)上运行一个使用 TLS 服务的 Prometheus 实例。

再假设你已经使用 OpenSSL 或类似工具生成了以下文件:

  • 一个位于 /home/prometheus/certs/example.com/example.com.crt 的 SSL 证书
  • 一个位于 /home/prometheus/certs/example.com/example.com.key 的 SSL 密钥

你可以使用此命令生成一个自签名证书和私钥:

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

本页内容