在 kubernetes 1.8.4 上,我试图让 kubernetes 用户访问我们的仪表板。
使用管理上下文进行代理时,所有 token 在登录仪表板时都会起作用。但是我的用户没有管理员上下文,只有我有,所以他们使用自己的上下文进行代理。在这些情况下,他们会出错。
步骤:
~/.kube/config
kubectl
代理,仍在该用户的上下文中 {
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "
forbidden: User \"system:serviceaccount:default:<username>\"
cannot get path \"/ui\"",
"reason": "Forbidden",
"details": {},
"code": 403
}
{
"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,我得到仪表板登录页面。
使用用户的上下文时,我需要做什么才能获得相同的结果?
最佳答案
除了提供对 kube-system 的访问之外,我找不到其他方法,所以我确实使用了以下角色和绑定(bind):
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
namespace: kube-system
name: user-role-dashboard
rules:
- apiGroups: [""]
resources:
- services
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources:
- services/proxy
verbs: ["get", "list", "watch", "create"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
namespace: kube-system
name: user-binding-dashboard
subjects:
- kind: User
name: system:serviceaccount:<namespace>:<username>
apiGroup: ""
roleRef:
kind: Role
name: user-role-dashboard
apiGroup: ""
仍然想知道是否有更好的方法,欢迎您的想法和建议!
关于proxy - 使用 RBAC 访问 kubernetes 仪表板所需的用户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47777373/