【问题标题】:user permissions needed for token access to kubernetes dashboard with RBAC使用 RBAC 令牌访问 kubernetes 仪表板所需的用户权限
【发布时间】:2018-05-26 10:03:30
【问题描述】:

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

当使用管理上下文进行代理时,所有令牌在登录仪表板时都会起作用。但是我的用户没有管理员上下文,只有我有,所以他们使用自己的上下文进行代理。在这些情况下,它们会出错。

步骤:

  1. 为用户创建服务账号,将token放入~/.kube/config
  2. 通过角色绑定将命名空间 A 的权限授予该服务帐户
  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/

  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,我得到仪表板登录页面。

在使用用户的上下文时,我需要做什么才能获得相同的结果?

【问题讨论】:

标签: proxy kubernetes token dashboard kubectl


【解决方案1】:

除了提供对 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: ""

仍然想知道是否有更好的方法,欢迎您的想法和建议!

【讨论】:

    【解决方案2】:

    我有同样的情况,并在这篇文章中找到了我的答案:Kubernetes Dashboard Installation Deep Dive。效果很好。

    这个想法是从 kubernetes-admin 用户的证书和密钥创建一个 PKCS #12 文件。将其导入浏览器,然后通过 API 服务器访问仪表板(我没有使用代理)。请注意,SKIP 不会授予任何访问权限。正常使用不记名令牌登录,仪表盘权限受用户令牌限制。

    【讨论】:

      猜你喜欢
      • 2019-04-07
      • 2020-03-19
      • 2019-04-07
      • 2018-06-12
      • 2020-03-02
      • 2019-01-10
      • 2019-05-08
      • 2019-06-06
      • 2022-07-20
      相关资源
      最近更新 更多