Consul启用ACL时Prometheus服务发现的工作机制与配置方案
开启ACL的Consul与Prometheus服务发现对接配置
Prometheus的Consul服务发现机制原生支持ACL鉴权逻辑,不需要额外编写自定义适配脚本,按照下面的方式配置即可完成对接:
具体配置方式
- 2.x系列较新版本的Prometheus,可直接在
consul_sd_config段使用内置的token字段传入ACL令牌,Prometheus会自动在调用Consul Catalog API时携带X-Consul-Token请求头完成鉴权,配置示例如下:scrape_configs: - job_name: 'consul_monitored_services' consul_sd_configs: - server: 'Consul集群访问地址:8500' scheme: 'http' # 填入拥有catalog读取权限的专用ACL令牌 token: '你的Consul服务发现专用ACL Token' # 以下参数和无ACL场景的配置逻辑完全一致,可按需填写 services: [] datacenter: '指定需要发现的Consul数据中心,不填默认跟随集群配置' - 无内置
token字段的低版本Prometheus,可通过http_config自定义请求头的方式实现鉴权,和内置字段的效果完全等价:scrape_configs: - job_name: 'consul_monitored_services' consul_sd_configs: - server: 'Consul集群访问地址:8500' http_config: headers: X-Consul-Token: - '你的Consul服务发现专用ACL Token'
实操注意事项
- 不要将高权限的全局管理令牌直接给Prometheus使用,需单独创建仅绑定
catalog:read、对应服务实例读取权限的最小权限专用策略,生成对应ACL令牌,降低令牌泄露带来的安全风险 - 采用配置文件硬编码令牌的方式时,需将Prometheus配置文件的本地权限收紧为仅运行Prometheus服务的用户可读,避免令牌被无关用户获取
- 配置完成后可先通过curl携带对应令牌调用Consul的服务列表接口,确认接口返回正常后再启动Prometheus,快速定位是令牌权限问题还是配置格式问题
- 如果Consul集群启用了HTTPS访问,TLS相关的证书配置逻辑和无ACL场景完全一致,不会因为增加鉴权步骤产生额外的配置复杂度
内容的提问来源于stack exchange,提问作者Ajay Sabarish
相关产品推荐
相关产品推荐

