Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Proxy 使用RBAC令牌访问kubernetes仪表板所需的用户权限_Proxy_Kubernetes_Token_Dashboard_Kubectl - Fatal编程技术网

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

Proxy 使用RBAC令牌访问kubernetes仪表板所需的用户权限,proxy,kubernetes,token,dashboard,kubectl,Proxy,Kubernetes,Token,Dashboard,Kubectl,在kubernetes 1.8.4上,我试图让kubernetes用户访问我们的仪表板 使用管理上下文代理时,所有令牌在登录到仪表板时都起作用。但是我的用户没有管理上下文,只有我有,所以他们使用自己的上下文来代理。在这些情况下,他们会出错 步骤: 为用户创建服务帐户,将令牌放入~/.kube/config 通过rolebinding将命名空间A的权限授予该服务帐户 切换到该用户的上下文 进行部署,获取pod概览等,验证其是否有效。到目前为止一切正常 启动kubectlproxy,仍然在该用户的上

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

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

步骤:

  • 为用户创建服务帐户,将令牌放入
    ~/.kube/config
  • 通过rolebinding将命名空间A的权限授予该服务帐户
  • 切换到该用户的上下文
  • 进行部署,获取pod概览等,验证其是否有效。到目前为止一切正常
  • 启动
    kubectl
    proxy,仍然在该用户的上下文中
  • 打开浏览器,转到
  • 请在浏览器中查看以下内容:

    {
      "kind": "Status",
      "apiVersion": "v1",
      "metadata": {},
      "status": "Failure",
      "message": "
          forbidden: User \"system:serviceaccount:default:<username>\"
              cannot get path \"/ui\"",
      "reason": "Forbidden",
      "details": {},
      "code": 403
    }
    
    {
      "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
    }
    
    {
    “种类”:“状态”,
    “apiVersion”:“v1”,
    “元数据”:{},
    “状态”:“失败”,
    “消息”:
    禁止:用户\“系统:服务帐户:默认值:\”
    无法获取路径\“/ui\”,
    “理由”:“禁止”,
    “详情”:{},
    “代码”:403
    }
    
  • 试一试

  • 请在浏览器中查看以下内容:

    {
      "kind": "Status",
      "apiVersion": "v1",
      "metadata": {},
      "status": "Failure",
      "message": "
          forbidden: User \"system:serviceaccount:default:<username>\"
              cannot get path \"/ui\"",
      "reason": "Forbidden",
      "details": {},
      "code": 403
    }
    
    {
      "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
    }
    
    {
    “种类”:“状态”,
    “apiVersion”:“v1”,
    “元数据”:{},
    “状态”:“失败”,
    “消息”:
    服务\“https:kubernetes仪表板:\”被禁止:
    用户\“系统:服务帐户:默认值:\”无法获取命名空间\“kube系统\”中的服务/代理,
    “理由”:“禁止”,
    “详情”:{
    “名称”:“https:kubernetes仪表板:”,
    “种类”:“服务”
    },
    “代码”:403
    }
    
  • 显然是许可问题。不过,我不确定用户需要哪种权限才能访问仪表板。我很犹豫是否给他们进入kube系统名称空间的权限

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


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

    除了提供对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: ""
    
    种类:角色
    apiVersion:rbac.authorization.k8s.io/v1beta1
    元数据:
    名称空间:kube系统
    名称:用户角色仪表板
    规则:
    -apiGroups:[“”]
    资源:
    -服务
    动词:[“获取”、“列表”、“监视”]
    -apiGroups:[“”]
    资源:
    -服务/代理
    动词:[“获取”、“列出”、“监视”、“创建”]
    ---
    种类:RoleBinding
    apiVersion:rbac.authorization.k8s.io/v1beta1
    元数据:
    名称空间:kube系统
    名称:用户绑定仪表板
    学科:
    -种类:用户
    名称:系统:serviceaccount::
    每组:“
    roleRef:
    种类:角色
    名称:用户角色仪表板
    每组:“
    

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

    我也有同样的情况,我在这篇文章中找到了答案:。它工作得很好


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

    /ui
    不推荐使用,请参阅。。改为使用完整的url:你知道是吗?@fishi使用正确的url得到了类似的结果,我已经用这些信息更新了问题,谢谢。@MichaelHausenblas是的,我知道如何编写RBAC策略并应用它们,但在这种特殊情况下,除了提供完全的管理员访问权限外,我不知道需要设置哪种策略才能使其生效。我相信我不是第一个,也不是唯一一个想给服务帐户授予访问仪表板所需的最低权限的人,所以可能已经有人发现了这一点。