当前位置: 首页 > 知识库问答 >
问题:

使用RBAC令牌访问kubernetes仪表板所需的用户权限

柳涵意
2023-03-14

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

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

步骤:

>

  • 为用户创建服务帐户,将令牌放入~/。kube/config
  • 通过rolebinding向该服务帐户授予命名空间A的权限
  • 切换到该用户的上下文
  • 进行部署、获取pod概览等,验证其是否有效。目前一切正常
  • 启动kubectlproxy,仍然在该用户的上下文中
  • 打开浏览器,转到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:/代理/

    请在浏览器中查看:

    {
      "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
    }
    

    显然是权限问题。不过,我不确定用户需要哪个权限才能访问仪表板。我非常犹豫是否给他们库贝系统命名空间的权限。

    当我停止kubectl代理,然后切换到管理上下文,启动代理并重试相同的网址,我得到仪表板登录页面。

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

  • 共有2个答案

    黄弘深
    2023-03-14

    我也有同样的情况,在这篇文章中找到了我的答案:库伯内特斯仪表板安装深度潜水。它工作得很完美。

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

    丌官和泰
    2023-03-14

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

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

     类似资料:
    • 我有一个Kubernetes集群,各种资源运行良好。我试图让仪表板工作,但在启动仪表板并输入服务帐户令牌时出现以下错误。 persistentvolumeclaims被禁止:用户“system:serviceaccount:kube system:kubernetes dashboard”无法在命名空间“default”中的API组“”中列出资源“persistentvolumeclaims” 它

    • > Kubectl apply-f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recomended.yaml kubectl代理--address=“192.168.56.12”-p 8001-accept-hosts='^*$' [root@k8s-master~]#kubectl

    • 当我执行时 kubectl代理 它为我提供了o/p:开始在虚拟机上的127.0.0.1:8001上提供服务 我想在主机上看到仪表板,这给我带来了问题。 192 168 113 8001 api命名空间库贝系统服务https kubernetes仪表板代理 有什么问题,我没明白。我是库伯内特斯的新手。谢谢

    • 我正在尝试在twitter上创建一个应用程序。当我登录时,它会给我以下错误- 错误-是否授权“”使用您的帐户? 我得到以下错误在访问请求令牌(https://api.twitter.com/oauth/request_token)- 错误-无法验证oauth签名和令牌。 我正在做的是重定向用户到: https://twitter.com/oauth/authenticate?oauth_token

    • 我目前正在尝试使用ADFS 2016认证angular 7应用程序(使用angular-oauth2-oidc)。到目前为止,它工作得很好。当我访问应用程序时,我被重定向到ADFS登录页面,在那里输入我的凭据并获得令牌。 现在,当应用程序调用web API时,它在请求头中发送访问令牌。ADFS返回的访问令牌如下所示: 问题是web API必须知道进行调用的用户的ID(因为在应用程序级别定义了一些权