RBAC模式
kubernetes中的权限控制使用的是RBAC模式,其基本概念如下:
- Role:角色,它其实是一组规则,定义了一组对 Kubernetes API 对象的操作权限。
- Subject:被作用者,既可以是“人”,也可以是“机器”,也可以使你在 Kubernetes 里定义的“用户”。
- RoleBinding:定义了“被作用者”和“角色”的绑定关系。
ROLE对象
1 |
|
这里比较重要的是namespace属性,指定了Role的作用范围,另一个是rules属性,通过resources指定了可作用的资源的范围,verbs属性指定了资源上具体可支持的操作。
这里verbs支持的所有操作如下
verbs: [“get”, “list”, “watch”, “create”, “update”, “patch”, “delete”]
RoleBinding对象
1 |
|
RoleBinding中需要指定作用对象subjects和赋予的权限role。
关联ServiceAccount对象
1 | apiVersion: v1 |
除了User以外,RoleBinding还可以绑定ServiceAccount,定义方式如上所示。通常情况下,一个namespace创建时系统会自动生成一个default的ServiceAccount,当创建pod没有指定ServiceAccount时,默认就会将default赋予给该pod。
用户组
1 |
|
RoleBinding其实还可以绑定用户组,如上所示即为绑定mynamespace下的所有ServiceAccount,这里顺带提一下ServiceAccount的完全表示形式为
system:serviceaccount:<ServiceAccount名字>
ClusterRole 和 ClusterRoleBinding
由于ROLE和RoleBinding都是作用在指定namespace上的,当我们要跨namespace授权时就显得无能为力了,这时候就需要使用ClusterRole 和 ClusterRoleBinding,事例如下:
1 |
|
1 |
|
可以看到两者的使用和ROLE、RoleBinding基本一样,仅仅是不用设置namespace字段。
另外,系统初始化时已经内置了许多的ClusterRole,具体可以通过以下命令查询
kubectl get clusterrole
其中最值得注意的是cluster-admin这个角色,它代表了k8s中的最高权限,需要小心使用。