Role
RBAC 的 Role 或 ClusterRole 中包含一组代表相关权限的规则。 这些权限是纯粹累加的(不存在拒绝某操作的规则)。
Role 总是用来在某个名字空间 内设置访问权限;在你创建 Role 时,你必须指定该 Role 所属的名字空间
apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata:namespace: defaultname: pod-readerrules:- apiGroups: [""] # "" 标明 core API 组resources: ["pods"]verbs: ["get", "watch", "list"]
Cluster Role
ClusterRole 可以和 Role 相同完成授权。 因为 ClusterRole 属于集群范围,所以它也可以为以下资源授予访问权限:
- 集群范围资源(比如 节点(Node))
- 非资源端点(比如 /healthz)
- 跨名字空间访问的名字空间作用域的资源(如 Pods)比如,你可以使用 ClusterRole 来允许某特定用户执行 kubectl get pods —all-namespaces
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
“namespace” 被忽略,因为 ClusterRoles 不受名字空间限制
name: secret-reader rules: - apiGroups: [“”]
在 HTTP 层面,用来访问 Secret 对象的资源的名称为 “secrets”
resources: [“secrets”] verbs: [“get”, “watch”, “list”]
**RoleBinding**<br />**Rolebinding表示用于将Role和 用户绑定**```yamlapiVersion: rbac.authorization.k8s.io/v1# 此角色绑定允许 "jane" 读取 "default" 名字空间中的 Podskind: RoleBindingmetadata:name: read-podsnamespace: defaultsubjects:# 你可以指定不止一个“subject(主体)”- kind: Username: jane # "name" 是区分大小写的apiGroup: rbac.authorization.k8s.ioroleRef:# "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系kind: Role # 此字段必须是 Role 或 ClusterRolename: pod-reader # 此字段必须与你要绑定的 Role 或 ClusterRole 的名称匹配apiGroup: rbac.authorization.k8s.io
ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1# 此集群角色绑定允许 “manager” 组中的任何人访问任何名字空间中的 secretskind: ClusterRoleBindingmetadata:name: read-secrets-globalsubjects:- kind: Groupname: manager # 'name' 是区分大小写的apiGroup: rbac.authorization.k8s.ioroleRef:kind: ClusterRolename: secret-readerapiGroup: rbac.authorization.k8s.io
