learning/k8s-advanced/sec/rbac/auth-namespace.md
本文描述了如何授予用户/用户组访问 Kubernetes 的一个名称空间。
v3.1.1.0Kuboard v3 中,采用两阶段授权的方式控制用户/用户组在 Kuboard / Kubernetes 中的权限。
第一阶段授权,控制当前用户:
第二阶段授权,控制用户:
本文描述了如何在 Kuboard 界面中为用户组 mygroup 授权,允许该用户组中的用户以 admin 角色访问集群 k8s-21 中的 default 名称空间。使用该用户组下 test 用户登录 Kuboard 后,首页界面如下所示:
假设用户
test以及用户组mygroup已经实现创建好
test 用户所查询到的集群列表结果为空;使用管理员账号登录 Kuboard 首页,并导航到 用户与权限 -> 角色 -> sso-user,如下图所示:
sso-user 为安装 Kuboard 时默认创建的第一阶段授权的角色,该角色具备 KubernetesCluster.act-as-impersonate-user 的 GET 权限,允许与此角色关联的用户/用户组以 使用 ServiceAccount kuboard-admin 扮演 的身份操作 Kubernetes 集群。
切换到 关联用户/用户组(集群级别) 标签页,并点击 创建角色绑定(集群级别)
填写表单,如下图所示:
| 字段名 | 填写内容 | 备注 |
|---|---|---|
| 主体类型 | 用户组 | |
| 用户组 | mygroup | |
| Kubernetes 集群 | k8s-21 | 选择已经激活的集群 |
此时,用 test 账号登录 Kuboard 首页,此时用户已经可以在 Kubernetes 集群列表中查看到被授权的 k8s-21 这个集群,如下图所示:
点击该集群,弹出对话框中:
使用 ServiceAccount kuboard-admin 扮演 test 这个选项以管理员用户登录到 Kuboard 首页,点击集群列表中的集群 k8s-21,进入集群页面,并切换到 访问控制 -> 第一阶段授权 页面,如下图所示:
在此页面中,可以查看到该集群已经授权给 mygroup 用户组(操作步骤参考前文)。
切换到 访问控制 -> 第二阶段授权 -> 用户组,如下图所示:
点击图中 为新 Group 授权 按钮,并填入 mygroup 作为被授权的用户组名称,然后点击确定按钮,如下图所示:
在 Group 详情页面,切换到 default 名称空间,并点击 RoleBinding 后面的 添加 按钮,如下图所示:
在弹出对话框中,关联的 ClusterRole/Role 字段选择 ClusterRole 、admin,并点击保存按钮,如下图所示:
点击保存后,可以看到该用户组在 default 名称空间中的权限,如下图所示:
完成前述 第一阶段授权、第二阶段 两个步骤后,以 test 用户登录 Kuboard 界面,并点击首页的 k8s-21 集群,在弹出框中可以看到 default 名称空间已经变成了已授权的状态,点击 default 可以进入该名称空间,如下图所示:
Kuboard 客户端需要调用 Kubernetes 的 /apis/authorization.k8s.io/v1/selfsubjectrulesreviews 接口用于确定界面上哪些菜单显示,哪些菜单不显示。极少部分情况下,您的集群可能没有授予 system:authenticated 用户组该权限,例如阿里云托管的 K8S 集群。
在这种情况下,Kuboard (v3.1.1.8及以上版本)将在界面上做出如下提示:
解决此问题的办法是,将 system:basic-user、system:discover、system:public-info-viewer 这三个 ClusterRole 绑定到您的用户或者用户组,步骤如下:
点击右上角的用户名,确认当前用户所属的用户组,如下图所示:
图中,用户属于 administrators 用户组。如果您的界面上显示,当前用户属于多个用户组,您只需要挑选其中一个用户组与 system:basic-user、system:discover、system:public-info-viewer 这三个 ClusterRole 绑定。
使用 Serviceaccount kuboard-admin 的身份切换到菜单 访问控控制 --> 用户组,如下图所示:
在上图中,点击 为新 Group 授权 并填写 Group Name administrators,然后点击确定,将跳转到如下界面:
点击上图中 ClusterRoleBinding 后面的 添加 按钮,如下图所示:
在关联的 ClusterRole 里选择名称为 system:basic-user 的 ClusterRole,并点击 保存 按钮,此步骤将创建一个 ClusterRoleBinding,将用户组 administrators 与 ClusterRole system:basic-user 关联到一起。
重复上述步骤,再创建两个 ClusterRoleBinding,并将 administrators 与 system:discover 以及 system:public-info-viewer 关联起来。
完成上述步骤后,您在使用被授权用户访问 Kuboard 界面就可以正常了。