十二 K8S细粒度权限控制

如题所述

第1个回答  2022-06-17

一个K8S集群并不只有管理员在使用,如果是一个开发或者一个测试,就不能有太高的权限,预防出错。 此时就要通过K8S一个机制RBAC对权限经行细粒度划分,例如张三,可设置只能在namespaceA进行操作,不能在其他命名空间操作。
官网: https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/

ClusterRole:可以配置一些权限,允许对整个集群做你想做的
ClusterRoleBinding:可以把ClusterRole配置的权限,授权给指定的“人”,让他可以对整个集群做他想做的
Role:只能允许对该Namespace做你想做的
RoleBinding:只能让指定的“人”对该Namespace做他想做的
Role和ClusterRole

RoleBinding和ClusterRoleBinding

Role示例:允许读取在API 组下的 “Pods”:

允许读/写在 “extensions” 和 “apps” API 组中的 Deployment(在 HTTP 层面,对应 URL 中资源部分为 “deployments”):

允许读取核心 API 组中的 “pods” 和读/写 “batch” 或 “extensions” API 组中的 “jobs”:

对于名称为 [email protected] 的用户:

对于名称为 frontend-admins 的用户组:

RoleBinding示例:对于名称为 [email protected] 的用户:

对于任何名称空间中的 “qa” 组中所有的服务账户:

对于所有已经过认证的用户:

对于所有用户:

默认 ClusterRole和默认 ClusterRoleBinding 一些默认的 ClusterRole 不是以前缀 system: 开头的。这些是面向用户的角色。 它们包括超级用户(Super-User)角色(cluster-admin)、 使用 ClusterRoleBinding 在集群范围内完成授权的角色(cluster-status)、 以及使用 RoleBinding 在特定名字空间中授予的角色(admin、edit、view)。 面向用户的 ClusterRole 使用 ClusterRole 聚合以允许管理员在 这些 ClusterRole 上添加用于定制资源的规则。如果想要添加规则到 admin、edit 或者 view, 可以创建带有以下一个或多个标签的 ClusterRole:

假设有2个ClusterRole,ClusterRoleA和ClusterRoleB,ClusterRoleA设置了rule并打上了标签,ClusterRoleB就可以引用A的标签,ClusterRoleB就会自动补上ClusterRoleA的rule.

示例:

验证:创建sa,并查看sa创建的secret,获得token

创建一个名称叫test-aggregation的clusterrolebinding,把clusterrole:test-aggregation授权给SA:default命名空间下 的test-aggregation

登录测试,发现并没有权限,只能登录

创建b-ClusterRole,使其聚合a-ClusterRole

再次验证,发现可以查看命名空间和svc等监控

问题:
1.创建一个名为deployment-clusterrole的clusterrole
a)该clusterrole只允许创建Deployment、Daemonset、Statefulset的create操作
2.在名字为app-team1的namespace下创建一个名为cicd-token的serviceAccount,并且将上一步创建clusterrole的权限绑定到该serviceAccount
实操:
创建namespace和serviceAccount

创建名为deployment-clusterrole的clusterrole

绑定权限并查看

编辑一份deployment模板

验证:通过sa创建的secret的token登录dashboard,选择右上+,选择app-team1参试创建yaml,发下最终有权限创建。

通过token登录dashboard

最后查看deployment,已创建

企业中的权限划分:

2.根据需求先创建2个用户dotbalo,dukuan(sa,通过Sa创建的secret的token管理节点)

3.根据需求总共有4中权限分别是只读命名空间,删除日志,执行pod命名,查看日志,然后创建4种权限的ClusterRole

4.绑定全局命名空间查看权限(clusterrolebinding)

5.绑定用户dotbalo两个命名空间default、kube-system的查看pod日志的权限(rolebinding)

6.绑定用户dukuan在deefault中执行pod命令权限和删除Pod权限

1.Kubernetes多集群图形化管理工具Ratel介绍&使用

2.图形化管理Kubernetes多租户权限