Proxy 使用RBAC令牌访问kubernetes仪表板所需的用户权限
在kubernetes 1.8.4上,我试图让kubernetes用户访问我们的仪表板 使用管理上下文代理时,所有令牌在登录到仪表板时都起作用。但是我的用户没有管理上下文,只有我有,所以他们使用自己的上下文来代理。在这些情况下,他们会出错 步骤:Proxy 使用RBAC令牌访问kubernetes仪表板所需的用户权限,proxy,kubernetes,token,dashboard,kubectl,Proxy,Kubernetes,Token,Dashboard,Kubectl,在kubernetes 1.8.4上,我试图让kubernetes用户访问我们的仪表板 使用管理上下文代理时,所有令牌在登录到仪表板时都起作用。但是我的用户没有管理上下文,只有我有,所以他们使用自己的上下文来代理。在这些情况下,他们会出错 步骤: 为用户创建服务帐户,将令牌放入~/.kube/config 通过rolebinding将命名空间A的权限授予该服务帐户 切换到该用户的上下文 进行部署,获取pod概览等,验证其是否有效。到目前为止一切正常 启动kubectlproxy,仍然在该用户的上
~/.kube/config
kubectl
proxy,仍然在该用户的上下文中{
"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
}
{
“种类”:“状态”,
“apiVersion”:“v1”,
“元数据”:{},
“状态”:“失败”,
“消息”:
禁止:用户\“系统:服务帐户:默认值:\”
无法获取路径\“/ui\”,
“理由”:“禁止”,
“详情”:{},
“代码”:403
}
{
"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
}
{
“种类”:“状态”,
“apiVersion”:“v1”,
“元数据”:{},
“状态”:“失败”,
“消息”:
服务\“https:kubernetes仪表板:\”被禁止:
用户\“系统:服务帐户:默认值:\”无法获取命名空间\“kube系统\”中的服务/代理,
“理由”:“禁止”,
“详情”:{
“名称”:“https:kubernetes仪表板:”,
“种类”:“服务”
},
“代码”:403
}
当使用用户的上下文时,我需要做什么才能获得相同的结果?除了提供对kube系统的访问之外,我找不到其他方法,所以我使用了以下角色和绑定:
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: ""
种类:角色
apiVersion:rbac.authorization.k8s.io/v1beta1
元数据:
名称空间:kube系统
名称:用户角色仪表板
规则:
-apiGroups:[“”]
资源:
-服务
动词:[“获取”、“列表”、“监视”]
-apiGroups:[“”]
资源:
-服务/代理
动词:[“获取”、“列出”、“监视”、“创建”]
---
种类:RoleBinding
apiVersion:rbac.authorization.k8s.io/v1beta1
元数据:
名称空间:kube系统
名称:用户绑定仪表板
学科:
-种类:用户
名称:系统:serviceaccount::
每组:“
roleRef:
种类:角色
名称:用户角色仪表板
每组:“
我仍然想知道是否有更好的方法,但是,欢迎您的想法和建议 我也有同样的情况,我在这篇文章中找到了答案:。它工作得很好
其想法是从kubernetes管理员用户的证书和密钥创建一个PKCS#12文件。将其导入浏览器,然后通过API服务器访问仪表板(我没有使用代理)。请注意,SKIP不会授予任何访问权限。正常情况下使用承载令牌登录,仪表板权限受用户令牌的限制。
/ui
不推荐使用,请参阅。。改为使用完整的url:你知道是吗?@fishi使用正确的url得到了类似的结果,我已经用这些信息更新了问题,谢谢。@MichaelHausenblas是的,我知道如何编写RBAC策略并应用它们,但在这种特殊情况下,除了提供完全的管理员访问权限外,我不知道需要设置哪种策略才能使其生效。我相信我不是第一个,也不是唯一一个想给服务帐户授予访问仪表板所需的最低权限的人,所以可能已经有人发现了这一点。