Role

RBAC 的 RoleClusterRole 中包含一组代表相关权限的规则。 这些权限是纯粹累加的(不存在拒绝某操作的规则)。
Role 总是用来在某个名字空间 内设置访问权限;在你创建 Role 时,你必须指定该 Role 所属的名字空间

  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: Role
  3. metadata:
  4. namespace: default
  5. name: pod-reader
  6. rules:
  7. - apiGroups: [""] # "" 标明 core API 组
  8. resources: ["pods"]
  9. 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”]
  1. **RoleBinding**<br />**Rolebinding表示用于将Role 用户绑定**
  2. ```yaml
  3. apiVersion: rbac.authorization.k8s.io/v1
  4. # 此角色绑定允许 "jane" 读取 "default" 名字空间中的 Pods
  5. kind: RoleBinding
  6. metadata:
  7. name: read-pods
  8. namespace: default
  9. subjects:
  10. # 你可以指定不止一个“subject(主体)”
  11. - kind: User
  12. name: jane # "name" 是区分大小写的
  13. apiGroup: rbac.authorization.k8s.io
  14. roleRef:
  15. # "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系
  16. kind: Role # 此字段必须是 Role 或 ClusterRole
  17. name: pod-reader # 此字段必须与你要绑定的 Role 或 ClusterRole 的名称匹配
  18. apiGroup: rbac.authorization.k8s.io

ClusterRoleBinding

  1. apiVersion: rbac.authorization.k8s.io/v1
  2. # 此集群角色绑定允许 “manager” 组中的任何人访问任何名字空间中的 secrets
  3. kind: ClusterRoleBinding
  4. metadata:
  5. name: read-secrets-global
  6. subjects:
  7. - kind: Group
  8. name: manager # 'name' 是区分大小写的
  9. apiGroup: rbac.authorization.k8s.io
  10. roleRef:
  11. kind: ClusterRole
  12. name: secret-reader
  13. apiGroup: rbac.authorization.k8s.io