【发布时间】:2018-05-26 10:03:30
【问题描述】:
在 kubernetes 1.8.4 上,我正在尝试让 kubernetes 用户访问我们的仪表板。
当使用管理上下文进行代理时,所有令牌在登录仪表板时都会起作用。但是我的用户没有管理员上下文,只有我有,所以他们使用自己的上下文进行代理。在这些情况下,它们会出错。
步骤:
- 为用户创建服务账号,将token放入
~/.kube/config - 通过角色绑定将命名空间 A 的权限授予该服务帐户
- 切换到该用户的上下文
- 进行部署,获取 pod 概览等,验证它是否有效。到目前为止一切都很好
- 启动
kubectl代理,仍在该用户的上下文中 - 打开浏览器,转到http://localhost:8001/ui
-
在浏览器中查看:
{ "kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Failure", "message": " forbidden: User \"system:serviceaccount:default:<username>\" cannot get path \"/ui\"", "reason": "Forbidden", "details": {}, "code": 403 } 试试http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
-
在浏览器中查看:
{ "kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Failure", "message": " services \"https:kubernetes-dashboard:\" is forbidden: User \"system:serviceaccount:default:<username>\" cannot get services/proxy in the namespace \"kube-system\"", "reason": "Forbidden", "details": { "name": "https:kubernetes-dashboard:", "kind": "services" }, "code": 403 }
显然是权限问题。我不确定用户需要哪些权限才能使他们能够访问仪表板。我非常犹豫是否授予他们进入 kube-system 命名空间的权限。
当我停止 kubectl 代理然后切换到管理上下文,启动代理并重试相同的 url,我得到仪表板登录页面。
在使用用户的上下文时,我需要做什么才能获得相同的结果?
【问题讨论】:
-
@fishi 类似的结果与正确的 url,我已经用该信息更新了问题,谢谢。
-
@MichaelHausenblas 是的,我知道如何编写 RBAC 策略并应用它们,但在这种特殊情况下,除了授予完全管理员访问权限外,我不知道我需要设置哪个策略才能完成这项工作.我相信我不是第一个也不是唯一一个希望只为服务帐户提供访问仪表板所需的最少权限的人,所以有人可能已经想到了这一点。
标签: proxy kubernetes token dashboard kubectl