1、需求
在 rancher 应用商店添加集群监控,会安装 prometheus、grafana;需要从 prometheus 的 api 中收集 pod 的一些信息。
查看grafana 配置的数据源为:http://prometheus-operated:9090
遂用 curl 请求如下:
curl http://prometheus-operated:9090/api/v1/query?query=container_cpu_usage_seconds_total unauthorized
提示没有授权。
2、查找原因
查看官网介绍了 basic auth 方式,采用 nginx 作为代理,配置了验证信息。遂想着 rancher 是不是也配置了代理;查看rancher 信息:
应用商店添加集群监控 prometheus,会创建如下信息:
命名空间: cattle-prometheus,
工作负载:prometheus-cluster-monitoring,
工作负载中包含如下5个容器:
prometheus #监听9090端口
prometheus-config-reloader
rules-configmap-reloader
prometheus-proxy #监听8080端口
prometheus-agent
查看到 prometheus-proxy 代理了9090 端口,并监听8080端口,其中还配置了 Authorization
proxy_set_header Authorization "Bearer eyJhbGciOiJSL3j-89LHMtCQCzHrmk12uUP4SI425bxKJEg........"; proxy_pass_header Authorization;
这样我们只需要请求 prometheus-cluster-monitoring 的 8080 端口即可,不用配置 Authorization 就可以访问数据了。
3、解决
配置服务发现,暴露出 prometheus-cluster-monitoring 的 8080 端口
名称:http-api
命名空间: cattle-prometheus
解析到:Pod
标签:
app=prometheus
chart=prometheus-0.0.1
release=cluster-monitoring
类型:Headless Service
端口映射:
端口名称:8080
服务端口:8080
协议:tcp
目标端口:8080
然后请求 http-api
curl http://http-api:8080/api/v1/query?query=container_cpu_usage_seconds_total
可以看到返回了数据。
4、外部访问
要想外部也想要访问该服务,还需要配置负载均衡
1)域名 api-prometheus-operated.wmq.com 指向 http-api 服务的 8080 端口;
2)配置域名解析到 ingress;
3)获取数据
curl http://api-prometheus-operated.wmq.com/api/v1/query?query=container_cpu_usage_seconds_total
{
"status": "success",
"data": {
"resultType": "vector",
"result": [
{
"metric": {
"__name__": "container_cpu_usage_seconds_total",
"container": "POD",
"endpoint": "https-metrics",
"instance": "172.16.5.74:10250",
"job": "expose-kubelets-metrics",
"namespace": "cattle-prometheus",
"node": "dev-k8s-master-server-01",
"pod": "exporter-node-cluster-monitoring-h8ph2",
"service": "expose-kubelets-metrics"
},
"value": [
1573700778.551,
"0.026998712"
]
}
}
}
参考:官网介绍http api:https://prometheus.io/docs/prometheus/latest/querying/api/