在kubernetes上1.8.4我试图让kubernetes用户访问我们的仪表板。
使用管理员上下文来代理时,所有令牌登录到仪表板时都可以使用。但是我的用户没有管理员上下文,只有我这样做,因此他们使用自己的上下文来代理。在这些情况下,它们会出错。
步骤:
- 为用户创建一个服务帐户,将令牌放在
~/.kube/config
中 - 通过角色签名授予该服务帐户名称空间的权限
- 切换到该用户的上下文
- 做部署,获取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/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,我将获得仪表板登录页面。
使用用户上下文时,我需要做什么才能获得相同的结果?
除了提供对Kube-System的访问之外,我找不到其他方式,因此我确实使用了以下角色并绑定:
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: ""
仍然想知道是否有更好的方法,欢迎您的想法和建议!
我的情况相同,并在这篇文章中找到了答案:kubernetes仪表板安装深水。它运作完美。
这个想法是从Kubernetes-Admin用户的证书和密钥中创建一个PKCS#12文件。将其导入您的浏览器,然后通过API服务器访问仪表板(我没有使用代理)。请注意,Skip不会授予任何访问权限。使用携带者令牌作为正常的登录,仪表板权限受用户令牌的限制。