1. 跳过证书校验无法获取监控
如果指标抓取时,能跳过 TLS 认证是最便捷的。其 Prometheus 的 ConfigMap 配置如下:
1
2
3
4
5
6
7
8
9
| - job_name: etcd
metrics_path: /metrics
scheme: https
tls_config:
insecure_skip_verify: true
static_configs:
- targets: [ '1.1.1.1:2379' ]
- targets: [ '2.2.2.2:2379' ]
- targets: [ '3.3.3.3:2379' ]
|
但 Prometheus Targets 报错 Get "https://3.3.3.3:2379/metrics": remote error: tls: bad certificate
在 targets 页面的报错如下图:
2. curl 验证抓取请求
1
2
3
| curl https://1.1.1.1:2379/metrics -k
curl: (35) error:1401E412:SSL routines:CONNECT_CR_FINISHED:sslv3 alert bad certificate
|
这个报错没找到解法,于是直接换成了需要 TLS 的方式。
1
| curl https://1.1.1.1:2379/metrics --cacert /etc/ssl/etcd/ssl/ca.pem --cert /etc/ssl/etcd/ssl/node-node1.pem --key /etc/ssl/etcd/ssl/node-node1-key.pem
|
成功返回 Metrics 数据。
这里的 node-node1.pem
证书应该包含全部 Etcd 节点 IP 的域。可以通过 openssl x509 -noout -text -in /etc/ssl/etcd/ssl/node-node1.pem
查看证书相关信息。
3. 给集群 Prometheus 新增 Etcd TLS 抓取
1
| kubectl -n monitor create secret generic etcd-certs --from-file=/etc/ssl/etcd/ssl/ca.pem --from-file=/etc/ssl/etcd/ssl/node-node1.pem --from-file /etc/ssl/etcd/ssl/node-node1-key.pem
|
这里的证书就是上面 curl 验证过的证书。
1
| kubectl -n monitor edit deployments.apps prometheus-server
|
新增如下两部分内容:
1
2
3
| volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/k8s-certs/etcd/
name: k8s-certs
|
1
2
3
4
| volumes:
- name: k8s-certs
secret:
secretName: etcd-certs
|
- 在 ConfigMap 中添加抓取 Etcd 指标的 Job
1
| kubectl -n monitor edit cm prometheus-server
|
1
2
3
4
5
6
7
8
9
10
11
| - job_name: etcd
metrics_path: /metrics
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/ca.pem
cert_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/node-node1.pem
key_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/node-node1-key.pem
static_configs:
- targets: [ '1.1.1.1:2379' ]
- targets: [ '2.2.2.2:2379' ]
- targets: [ '3.3.3.3:2379' ]
|
此时,在 Prometheus 中,应该可以看到抓取 Etcd 监控数据的 Job 状态为 Up,如下图:
4. 导入 Grafana 面板查看监控数据
在 Grafana 中导入面板 3070,即 https://grafana.com/grafana/dashboards/3070-etcd/ ,就可以看到如下监控视图: