0
点赞
收藏
分享

微信扫一扫

K8S入门学习(七):集群编排工具之 Kuboard V3 版本(二)

一、用户、组、角色相关

1.1、角色绑定涉及的概念

Kuboard V3 里面的角色绑定,涉及以下几个概念:

  • 用 户:Kuboard 定义的单创建的账号,为绑定具体角色之前与任何K8S集群无关
  • 用户组:Kuboard 定义的用来关联用户账号的 (非必须的),通常以用户组去进行角色绑定
  • 角 色:分为两种 --- 全局集群角色 和 集群级别角色
    • 全局集群角色:Kuboard 默认全局集群角色五个里面只给到三种 --- administrator、viewer 、sso-user ,权限依次是 由大到小
    • 集群级别角色:用户或用户组在绑定到指定的K8S集群时拥有的角色,也是上面三种,即以何种身份去访问和操作指定的某个K8S集群

1.2、集群角色的联系与区别

  • 全局集群角色绑定:
    • 影响相关用户在登录 Kuboard 管理平台后,使用平台上自带的有关的功能
    • 进行 administrator、viewer 角色绑定后,集群级别的角色绑定没有任何意义
    • 如果不使用第二阶段授权的方案,全局集群只进行 sso-user 角色绑定就失去了意义,因为没有任何操作权限
    • 进行二阶段授权的时候,要使用全局集群的 sso-user 角色,但不直接进行全局集群的任何角色绑定
  • 集群级别角色绑定:
    • 集群角色绑定 administrator、viewer 两角色时,全局级别角色绑定失去意义
    • 没有导入K8S集群时,无法进行集群级别角色的绑定,此时的全局集群角色绑定,没有任何意义
    • 第二阶段授权方案的实现,必须依赖于全局集群角色中的 sso-user 角色,将集群基本角色绑定为 sso-user 角色

   

二、集群的角色相关

2.1、全局集群角色有哪些

  • administrator: 管理员

  • viewer: 只读角色

  • sso-user: SSO 用户

  • authentiated: 已认证用户

  • anonymous: 匿名用户

2.2、集群级别角色相关:

  • 面向用户角色的 UserAccount 是给 kubernetes 集群给外部用户使用的,是全局性的,在集群所有名称空间中,名称具有唯一性。
  • UserAccount 账号通过角色绑定,在名称空间范围内被授予权限,使用 RoleBindings 的方法,在指定名字空间中授予的相应角色 。
  • 主要角色有三种:
    • admin: 允许管理员访问权限,旨在使用 RoleBinding 在名字空间内执行授权。可授予对名字空间中的大多数资源的读/写权限, 包括创建角色和角色绑定的能力。 此角色不允许对资源配额或者名字空间本身进行写操作。
    • edit: 允许对名字空间的大多数对象进行读/写操作。此角色不允许查看或者修改角色或者角色绑定。 此角色可以访问 Secret,以名字空间中任何 ServiceAccount 的身份运行 Pod, 所以可以用来了解名字空间内所有服务账户的 API 访问级别。
    • view: 允许对名字空间的大多数对象有只读权限。 它不允许查看角色或角色绑定。不允许查看 Secret 。

   

三、不同角色绑定相关

3.1、角色绑定之后的作用体现

  • 用户或者用户组单独绑定了全局集群角色中 administrator 角色后,对指定的集群可以使用 kuboard-admin 或者 kuboard-viewer 的身份进行访问,拥有相当集群级别的 admin 的权限
  • 用户或者用户组单独绑定了全局集群角色中 viewer 角色后 ,对指定的集群可以使用 kuboard-viewer 的身份,对指定的集群有相当集群级别的 view 的权限
  • 用户或者用户组单独绑定了全局集群角色中 sso-user 角色后 ,对指定的集群没有任何权限
  • 用户或者用户组单独绑定了集群级别角色中 administrator 角色后,对指定的集群可以使用 kuboard-admin 或者 kuboard-viewer 的身份进行访问,拥有相当集群级别的 admin 的权限,此时全局集群角色中有关本集群的绑定失去意义,涉及其它集群的部分任然有效
  • 用户或者用户组单独绑定了集群级别角色中 viewer 角色后 ,对指定的集群可以使用 kuboard-viewer 的身份,对指定的集群有相当集群级别的 view 的权限,此时全局集群角色中有关本集群的绑定失去意义,涉及其它集群的部分任然有效
  • 用户或者用户组单独绑定了集群级别角色中 sso-user 角色后 ,对于指定的集群没有任何权限
  • 用户或者用户组,不与全局集群角色绑定同时也不与集群级别角色绑定,对于指定的集群没有任何权限,导入的集群都查看不到

总结:

1、除非使用二阶段授权的机制,不然同时进行全局集群角色的绑定和集群级别角色绑定,没有任何意义

2、如果单独使用的话,建议使用集群级别角色绑定就可以了

3.2、有哪些方式的角色绑定

在第一节里面提到过,相关的绑定涉及 用户、用户组、全局集群角色、集群级别角色,对如不同的使用场景和公司的实际情况,具体实现方式有如下:

  • 用户和全局集群角色进行绑定

  • 用户和集群级别角色进行绑定

  • 用户关联到用户组,用户组和全局集群角色进行绑定

  • 用户关联到用户组,用户组和集群级别角色进行绑定

四、用户角色绑定

4.1、用户只绑定全局集群角色

全局集群角色的三个集群角色:administrator 、viewer 、sso-user , 权限依次是从大到小 。如下图: V3200.png

定义三个用户,分别是:laoliu 、laowang 、xiaojiejie 。进行全局角色绑定,将用户关联到全局集群角色下面的具体角色。

  • 账号 laoliu 绑定的全局角色为 viewer
  • 账号 laowang 绑定的全局角色为 sso-user
  • 账号 xiaojiejie 绑定的全局角色为 administrator

绑定完成后如下图所示: V3202.png

  在不同的浏览器用三个账号登录 Kuboard 平台,不难发现其不同点:

1、下面是在 Kuboard 平台上体现出来的不同之处:左边操作按钮栏对应的数量多少不同 V3201.png

2、虽然没有进行具体的集群角色绑定,但是还是可以对导入的具体集群有相关的访问权限

  • 全局集群角色绑定了 administrator 角色的 xiaojiejie 账号使用 kuboard-admin 的身份、对导入的集群有 admin 的权限 (此处未截图展示)
  • 全局集群角色绑定了 viewer 角色的 laoliu 账号使用 kuboard-viewer 的身份、对导入的集群拥有集群级别的 view 的权限
  • 全局集群角色绑定了 sso-user 角色的 laowang 账号 ,对导入的集群没有任何权限 V3203.png V3204.png

4.2、用户只绑定集群级别角色

再定义一个用户账号 test01,对于导入两个集群,只进行集群级别的角色绑定,分别如下:

  • 集群 K8S-50 绑定的集群级别角色为 sso-user
  • 集群 K8S-100 绑定的集群级别角色为 viewer V3101000.png

在浏览器使用 test01 账号登录 Kuboard 平台查看

  • 集群级别绑定 administrator 角色无需测试,自然是使用的是 kuboard-admin 的身份、对集群有 admin 的权限
  • 集群 K8S-50 绑定用户 test01 为 sso-user 角色时,对集群没有任何权限
  • 集群 K8S-100 绑定用户 test01 为 viewer 角色时,对集群拥有 view 的权限
    V3101001.png V3101002.png

4.3、用户同时绑定全局集群角色和集群级别角色

1、账号名为 xiaojiejie 的全局集群角色为 administrator,再进行集群级别的具体角色绑定

  • 集群 K8S-50 绑定的集群级别角色为 sso-user
  • 集群 K8S-100 绑定的集群级别角色为 viewer V3205.png V3206.png V3101003.png

经过测试发现: 即 全局角色 为 administrator 时 ,集群级别角色指定为 viewer 、sso-user 也不受影响, 对集群的权限保持着全局角色权限 ,即 可以理解为 角色权限降级无效

2、账号名为 laowang 的全局集群角色为 sso-user,再进行集群级别的具体角色绑定

  • 集群 K8S-50 绑定的集群级别角色为 viewer
  • 集群 K8S-100 绑定的集群级别角色为 administrator V3207.png V3208.png V3209.png

经过测试发现:即 全局角色 为 sso-user 时 ,集群级别角色指定为 administrator 、 viewer 后, 对导入的集群的操作权限权限果然有提升,以集群级别的角色权限为主 ,即 可以理解为 角色提升时有效

3、第三种情况,全局集群角色为 viewer 时 ,进行集群角色绑定时分别定义为 administrator 、sso-user 角色

其实不用做实验了,参考上面的两种情况,很容易得出结论:

集群级别角色绑定大于全局集群角色时,以集群级别角色为主,反正则以 全局集群角色为主

4.4、单独用户角色绑定总结

  • 如果涉及的账号太多的话,后面要进行绑定角色修改,操作起来很麻烦
  • 单独使用用户进行集群角色绑定,涉及到的有两个角色,权限容易混淆或起冲突
  • 单独的进行用户角色的绑定,不能够颗粒化到指定的集群里面的具体的名称空间

   

五、用户用户组角色绑定

5.1、定义用户与用户组

为了解决上面的第一问题,引入了用户组的概念

提示:

  1. 再次实验,要删除所有用户绑定的全局角色、集群角色,创建组,用户关联到组,组去绑定集群设定相关的角色
  2. 后面除非是涉及二阶段授权相关,不然不会进行全局集群角色的绑定,上面诸多实验证明了其没有意义
  • 重新定义四个用户,分别是:laoliu 、laowang 、xiaojiejie、xiaoxianrou 。
  • 在定义三个用户组,分别是:group01 、group02 、group03 。
  • group01 关联用户 xiaojiejie 。
  • group02 关联用户 xiaoxianrou 。
  • group03 关联用户 laoliu 、laowang 。

用户、用户组关联完成后如下图所示: V392801.png V31010004.png

5.2、用户组进行角色绑定

  • group01 用户组进行绑定集群为 K8S-50 , 其集群级别绑定的角色为 administrator
  • group02 用户组进行绑定集群为 K8S-100 , 其集群级别绑定的角色为 viewer
  • group03 用户组进行绑定集群为 K8S-50 和 K8S-100 , 其集群级别绑定的角色为 sso-user V392802.png V392805.png V392808.png

分别使用用户组关联的用户进行登录

group01 组关联的 xiaojiejie 用户,登录 Kuboard 后,只能看到导入的 K8S-50 集群,使用的是 kuboard-admin 的身份、对集群有集群级别的 admin 的权限 V392803.png V392804.png

group02 组关联的 xiaoxianrou 用户,登录 Kuboard 后,只能看到导入的 K8S-100 集群,使用 kuboard-viewer 的身份、对集群拥有集群级别的 view 的权限 V392806.png V392807.png

group03 组关联的 laoliu 、laowang 用户,登录 Kuboard 后,只能看到导入的 K8S-50 和 K8S-100 集群,但是没有任何访问权限 V31010005.png V31010006.png

5.3、用户组角色绑定总结

  • 用户组进行绑定集群级别的角色为 administrator 或 viewer 时,在所对应的集群中拥有的就是相对角色和权限
  • 用户组进行绑定集群级别的角色为 sso-user 时,对于所有绑定的集群,没有任何访问权限

   

六、关于二阶段授权

  • 第一阶段授权,定义当前用户或者用户组

    • 可以访问操作哪个集群:授权对象可以是单独的用户,也可以是用户组,一般都是结合用户组来进行授权操作
    • 以何种角色操作该集群:sso-user 是安装 Kuboard 时默认创建的第一阶段授权的角色,Kuboard 定义了名为 ct-as-impersonate-user 的一种资源类型,as-impersonate 翻译为 冒充 之意,允许与此角色关联的用户/用户组以 使用 ServiceAccount kuboard-admin 扮演 的身份操作 Kubernetes 集群。
  • 第二阶段授权,定义当前用户或者用户组

    • 在具体指定的集群内有何种权限:主要是以名称空间为维度,来进行权限的定义和操作的

   

七、具体二阶段授权操作

再次强调一下:进行二阶段授权操作,要使用到全局集群里面的 sso-user 角色,但是不需要进行任何全局集群角色的绑定操作

7.1、第一阶段授权

将用户组关联相关用户,然后将用户组进行 集群级别的角色绑定,绑定到指定的集群角色为 全局集群角色里面的 sso-user 角色

  • 重新定义用户组 group03 ,关联用户 laoliu 、laowang
  • group03 进行集群级别的绑定,绑定具体集群 K8S-50 , 其绑定集群级别绑定的角色为 sso-user
  • group03 进行集群级别的绑定,绑定具体集群 K8S-100 , 其绑定集群级别绑定的角色为 sso-user

具体见下图: V31011001.png

可能有点好奇,第一阶段授权,不是应该在具体对应的集群里面,找到 “访问控制” --- “第一阶段授权” ,这里里面去操作的吗?

下面我们就依照这个流程去操作一下: V31011200.png V31011201.png V31011202.png

关于第一阶段授权的小结:

  • 经过上面的操作会发现,其实第一阶段授权,就是 将用户关联到用户组,用户组再绑定指定的集群级别角色,这里的角色是全局集群角色里面的 sso-user 角色
  • 在上面的第四节、第五节里面,就已经说明过,用户或者用户组,在全局集群的界面里面,也能够进行集群级别角色和全局集群的角色角色的绑定操作的,两个是没有操作的结果是没有区别的,方式不同而已

第一阶段授权后,访问绑定的集群看看是什么情况 --- 在绑定的集群里面没有任何访问权限 V3101130.png V3101131.png

7.2、第二阶段授权

  • 选择导入的集群 “K8S-50” , 左边栏里面选择 “访问控制” --- “第二阶段授权” --- “用户组” --- “为新Group授权” ,选择用户组 “group03” V392811.png V392812.png

  • 当前的名称空间选项,选择名称空间 “web” ,在下面的 “RoleBinding” 选项点击 “添加”

  • 新的弹出框里面再一次选项 “web” 名称空间,在后面 “关联 ClusterRole / Role” 栏里面 “name” 进行选择

  • 选择的 “ClusterRole” ,三个选项 “admin”、 “edit” 、 “view” 均可,建议选择权限最小的 “view” V392813.png V31011002.png

同样的方法,集群 “K8S-50” 关联 “group03“ 全局集群角色为 sso-user ,对应绑定的集群级别空间为 ”web2“ V392815.png V31011003.png

同样的方法,集群 “K8S-100” 关联 “group03“ 全局集群角色为 sso-user ,对应绑定的集群级别空间为 ”default“ V31011004.png V31011005.png V392817.png V31011006.png

7.3、访问集群进行验证

V392819.png V392820.png

八、集群角色绑定信息查看

8.1、全局集群角色绑定相关


[root@node200 ~]# docker ps | grep kuboard
ff706038dab8        eipwork/kuboard:v3.3.0.0   "/entrypoint.sh"    47 hours ago        Up 47 hours         443/tcp, 0.0.0.0:10081->10081/tcp, 0.0.0.0:8000->80/tcp   kuboardv3

[root@node200 ~]# docker exec -it ff70 /bin/bash

root@ff706038dab8:/# etcdctl get --prefix "" --keys-only | grep group
/kind/KuboardAuthClusterRoleBinding/cluster/K8S-100/group.group02.viewer
/kind/KuboardAuthClusterRoleBinding/cluster/K8S-100/group.group03.sso-user
/kind/KuboardAuthClusterRoleBinding/cluster/K8S-50/group.group01.administrator
/kind/KuboardAuthClusterRoleBinding/cluster/K8S-50/group.group03.sso-user
/kind/KuboardAuthGlobalRoleBinding/cluster/GLOBAL/group.administrators.administrator
/kind/KuboardAuthGroup/cluster/GLOBAL/group01
/kind/KuboardAuthGroup/cluster/GLOBAL/group02
/kind/KuboardAuthGroup/cluster/GLOBAL/group03
/kind/KuboardAuthUserInGroup/cluster/GLOBAL/laoliu.group03
/kind/KuboardAuthUserInGroup/cluster/GLOBAL/laowang.group03
/kind/KuboardAuthUserInGroup/cluster/GLOBAL/xiaojiejie.group01
/kind/KuboardAuthUserInGroup/cluster/GLOBAL/xiaoxianrou.group02

8.2、集群级别角色绑定查看

在 Kuboard 的 UI 界面查看绑定的信息 V31011101.png V31011102.png

进行相关集群里面查看绑定相关的信息


[root@node50 ~]# kubectl get rolebinding -A | grep web
web               group03-rolebinding-yiznx        ClusterRole/admin                   13m
web2              group03-rolebinding-yyhnk        ClusterRole/edit                    11m


[root@node100 ~]# kubectl get rolebinding -A | grep default
default       group03-rolebinding-bpnw8             ClusterRole/admin                  14m

8.3、Etcd 数据库信息查看

在宿主机上查看数据文件大小


[root@node200 snap]# cd /data/kuboard-data/
[root@node200 kuboard-data]# ll
total 4
drwx------ 3 root root 20 Sep 26 10:06 etcd-data
-rw-r--r-- 1 root root 33 Sep 26 10:06 kuboard_agent_key
drwxr-xr-x 6 root root 53 Sep 26 10:06 questdb-data

[root@node200 kuboard-data]# cd etcd-data/member/snap/
[root@node200 snap]# ll
-rw------- 1 root root 8458240 Sep 28 09:31 db

[root@node200 snap]# ls -lrth
total 4.3M
-rw------- 1 root root 8.1M Sep 28 09:32 db

进入到数据库里面查看数据大小



root@ff706038dab8:/# ETCDCTL_API=3 etcdctl --endpoints="http://127.0.0.1:2379" --write-out=table endpoint status
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|       ENDPOINT        |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| http://127.0.0.1:2379 | 59a9c584ea2c3f35 |  3.4.14 |  4.3 MB |      true |      false |         2 |      11540 |              11540 |        |
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

举报

相关推荐

0 条评论