一、前言
Kubernetes 中的角色基于访问控制(Role-Based Access Control,RBAC)是一种权限管理机制,用于控制用户和应用程序对 Kubernetes 资源的访问。RBAC 通过定义一组角色(Roles)和角色绑定(RoleBindings)来实现对资源的精细访问控制
二、组件
角色(Role)和集群角色(ClusterRole)
Role:在命名空间范围内定义一组权限。每个 Role 包含可以对资源执行的操作列表
ClusterRole:在集群范围内定义一组权限,适用于所有命名空间或集群范围的资源
role示例
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default #指定命名空间
name: pod-reader
rules:
- apiGroups: [""] # 空字符串表示核心 API 组
resources: ["pods"] #限定资源,这里限定pod
verbs: ["get", "list", "watch"] #配置拥有的权限,这里只拥有只读权限
ClusterRole示例
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-admin
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
角色绑定(RoleBinding)和集群角色绑定(ClusterRoleBinding)
RoleBinding:将 Role 绑定到用户或组,使其在特定命名空间内具有该 Role 定义的权限
ClusterRoleBinding:将 ClusterRole 绑定到用户或组,使其在整个集群范围内具有该 ClusterRole 定义的权限
RoleBinding示例
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects: #定义用户信息
- kind: User
name: jane
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
ClusterRoleBinding示例
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-binding
subjects:
- kind: User
name: admin
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
三·、RBAC 工作原理
RBAC 通过 Role
和 ClusterRole
定义权限,通过 RoleBinding
和 ClusterRoleBinding
将这些权限分配给用户、组或服务账户
1.当用户或服务账户尝试执行某个操作时,Kubernetes API 服务器会检查与该用户相关的 RoleBindings 和 ClusterRoleBindings,以确定是否允许执行该操作
2.RoleBindings 和 ClusterRoleBindings 指定了 Role 或 ClusterRole,并将其与一个或多个主体(subjects)关联