一、前言
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)关联