proxy - 使用 RBAC 访问 kubernetes 仪表板所需的用户权限

标签 proxy kubernetes token dashboard kubectl

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

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

步骤:

  • 为用户创建服务账号,将token放入~/.kube/config
  • 通过角色绑定(bind)
  • 将命名空间 A 的权限授予该服务帐户
  • 切换到该用户的上下文
  • 进行部署,获取 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/
  • 在浏览器中看到这个:
    {
      "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/

    相关文章:

    docker - 播放来自容器化网站的音频-源音频将位于何处?

    kubernetes - 如何连接 Gitlab 和本地 Kubernetes 集群

    java - ANTLR - 连接 token 以输出

    c - 我怎样才能与 C 预处理器连接两次并扩展一个宏,如 "arg ## _ ## MACRO"?

    kubernetes - 可以在kubernetes中将configmap与hostPath一起使用吗?

    solr - 如何在 SOLR 中实现复杂的 token 匹配算法

    proxy - 通过Apache代理连接到ssh主机时不允许使用方法

    proxy - 使用 grunt-connect-proxy 的最小示例

    proxy - 如何让两个 Telethon 客户端分别使用不同的 IP

    c# - 使用 StructureMap.DependencyInjection 在 C# dotnet core 2.0 中简单代理类依赖注入(inject)