Rancher-2.4.8-ent企业版监控unauthorized解决方法
问题现象
Rancher-v2.4.8-ent企业版启用监控(0.1.2000版本)后,只能通过Rancher-URL去访问,通过service暴露nodeport去访问,会报unauthorized
错误。
问题原因
默认情况下,社区版本的监控将认证步骤做在了Prometheus-proxy容器中,所以我们可以直接通过pod IP/service IP就能访问Prometheus UI页面。
企业版0.1.2000监控版本,取消了项目监控的开关,只保留了集群监控,并取消了社区版在prometheus-proxy中进行认证的方式,将认证统一设置在Rancher-api-proxy中,这样设计是为了控制不同用户,根据其角色权限访问不同的资源。所以企业版默认只能通过rancher-api-proxy去访问prometheus UI界面。
前提
软件 | 版本 |
---|---|
Rancher | 2.4.8-ent |
monitoring | 0.1.2000 |
解决方法
有两种解决方法,一种是通过ingress在header中传递token认证信息,另一种方法就是修改chart,将认证方式改成在Prometheus-proxy容器中认证。但是不管是在ingress中传递token,还是修改chart,都存在一定的权限泄露问题。
方法一:通过ingress进行认证
1、首先获取cluster-monitoring的token
1 | kubectl -n cattle-prometheus -o template get sa cluster-monitoring --template='{{range .secrets}} {{.name}} {{end}}' | xargs kubectl -n cattle-prometheus get secrets -o template --template='{{.data.token}}' |base64 -d |
2、创建ingress,并添加token至header中
通过Rancher UI创建Ingress,在cattle-prometheus命名空间下,选择目前后端为 access-prometheus
添加annotations注释:将其中
1 | nginx.ingress.kubernetes.io/configuration-snippet: proxy_set_header Authorization "Bearer <TOKEN>"; |
创建完成yaml配置文件如下:
3、通过ingress访问Prometheus UI界面
4、小结
通过ingress可以实现访问Prometheus UI页面,但是由于token明文展示在了ingress的注释中,用户仅需有查看system项目的就可以获取到token,存在一定权限泄露问题。
方法二:修改chart
此方法适用于有本地git仓库
1、同步 system-charts
同步https://github.com/cnrancher/system-charts 到本地git仓库
1 | git clone https://github.com/cnrancher/system-charts |
2、切换release-v2.4-ent分支
查看当前分支
1 | cd system-charts/ |
默认是release-v2.4-ent分支,如果不是,则用这个命令切换
1 | git checkout release-v2.4-ent |
3、修改proxy配置
进入到Prometheus目录
1 | cd charts/rancher-monitoring/v0.1.2000/charts/prometheus/templates/ |
编辑nginx-configmap.yaml
文件
3.1、找到这一行
1 | sed "s/REPLACE_PARAM_IP/${POD_IP}/g" $srcpath > $dstpath |
将这一行删除,然后替换成
1 | token=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) |
3.2、在server下,添加proxy_set_header
1 | proxy_set_header Authorization "REPLACE_PARAM_AUTHORIZATION"; |
如图所示
4、上传到本地git仓库
5、设置system-charts地址
在 全局-> 工具 -> 商店设置 中,找到 system-library,编辑这个应用商店,修改URL地址为本地git仓库地址,并刷新一下
6、重启监控
禁用监控,等所有组件删除完毕后,再开启监控
7、通过nodeport service访问Prometheus UI页面
克隆access-prometheus service,并设置service类型为nodeport类型
8、小结
使用修改chart方式也可以实现通过service IP访问Prometheus UI页面,可能会放大prometheus权限。grafana经测试可以对用户进行隔离。
Grafana 访问
问题描述
由于企业版监控架构调整,基于用户权限控制,使不同用户登录Grafana查看到对应的图表监控信息,导致默认的admin用户没有权限查看到监控图表。
解决方法
可以通过ingress携带对应token去访问Grafana UI界面
1、获取Rancher admin用户ID
例如这里获取到的ID为:user-87tkg
2、创建ingress,并添加user ID至header中
通过Rancher UI创建Ingress,在cattle-prometheus命名空间下,选择目前后端为 access-grafana
添加annotations注释:将其中
1 | nginx.ingress.kubernetes.io/configuration-snippet: proxy_set_header X-RANCHER-USER "<USER_ID>"; |
3、通过ingress访问Grafana UI界面
查看左下角用户是否处于登录状态
尝试访问监控图表