这篇文章主要是为了庆祝 Node Exporter 终于迎来了 v1.0.0 版本。
Prometheus ( https://prometheus.io/ ) 是最早由 SoundCloud 开源的监控告警解决方案。并已经成长为继 Kubernetes 之后,第二个从 CNCF 毕业的项目。伴随着云原生理念的普及和 Kubernetes 等技术的发展, Prometheus 在监控领域也有了长足的发展。
其主要组件包括 Prometheus,Alertmanager,Node Exporter,Blackbox Exporter 和 Pushgateway 等。
本文主要是为了庆祝 Node Exporter 终于迎来了 v1.0.0 版本, 所以重点主要放在一直被人诟病的安全性相关上,具体而言就是利用 TLS 和 Basic Auth 提升其安全性。
1
背景
Node Exporter 是 Prometheus 官方发布的,用于采集节点的系统信息,比如 CPU,内存,磁盘和网络等信息。通常情况下,如果我们在使用 Prometheus 作为监控方案,那 Node Exporter 基本都会用到的。
在 Promethues 的监控体系中,社区中一直存在的一个观点是,Metrics 不包含过于私密的信息。所以你可以看到,大多数的 /metrics 接口都是直接暴露出来的,没什么特别的安全措施。
但随着 Prometheus 在生产中的大量应用,安全问题变得更加重要。
大家最先想到的解决办法就是,为 Prometheus 与监控目标之间的连接启用 TLS。但由于各类 exporter 并不原生支持 TLS 连接,所以通常情况下我们会选择配合反向代理 ( https://prometheus.io/docs/guides/tls-encryption/ )来完成。
这种方式能满足需求,但未免复杂了些。近期 Prometheus 对其安全模型做了修改 , 从 Node Exporter 开始到后续其他的组件,都将支持 TLS 和 basic auth, 同时也列出了最新的安全基准(默认情况下都支持 TLS v1.2 及以上)
2
使用 TLS
这里我们直接实践下看看如何启用 TLS 。
2.1
准备证书
(MoeLove) ➜ ~ mkdir -p prometheus-tls
(MoeLove) ➜ ~ cd prometheus-tls
(MoeLove) ➜ prometheus-tls openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout node_exporter.key -out node_exporter.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=Moelove.info/CN=localhost"
Generating a RSA private key
...........................................+++++
..+++++
writing new private key to 'node_exporter.key'
-----
(MoeLove) ➜ prometheus-tls ls
node_exporter.crt node_exporter.key
通过上面的步骤,我们得到了 node_exporter.crt 和node_exporter.key 这两个文件。
2.2