使用RBAC的kubernetes仪表板所需的用户权限



在kubernetes上1.8.4我试图让kubernetes用户访问我们的仪表板。

使用管理员上下文来代理时,所有令牌登录到仪表板时都可以使用。但是我的用户没有管理员上下文,只有我这样做,因此他们使用自己的上下文来代理。在这些情况下,它们会出错。

步骤:

  1. 为用户创建一个服务帐户,将令牌放在~/.kube/config
  2. 通过角色签名授予该服务帐户名称空间的权限
  3. 切换到该用户的上下文
  4. 做部署,获取POD概述等,验证其有效。到目前为止一切都很好
  5. 启动kubectl代理,仍在该用户的上下文中
  6. 打开浏览器,转到http://localhost:8001/ui
  7. 在浏览器中请参见此信息:

    {
      "kind": "Status",
      "apiVersion": "v1",
      "metadata": {},
      "status": "Failure",
      "message": "
          forbidden: User "system:serviceaccount:default:<username>"
              cannot get path "/ui"",
      "reason": "Forbidden",
      "details": {},
      "code": 403
    }
    
  8. 尝试http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/proxy/

  9. 在浏览器中请参见此信息:

    {
      "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不会授予任何访问权限。使用携带者令牌作为正常的登录,仪表板权限受用户令牌的限制。

最新更新