介绍
K8S(Kubernetes)的RBAC(Role-Based Access Control,基于角色的访问控制)是一种权限控制机制,它允许管理员通过定义角色来限制用户对集群资源的访问权限。RBAC是Kubernetes中一个核心的授权策略,通过它,管理员可以实施精细化的权限管理,确保只有经过授权的用户或用户组才能执行特定的操作。
RBAC在Kubernetes中主要由四个关键组件构成:Role、ClusterRole、RoleBinding和ClusterRoleBinding。
- Role:用于定义对命名空间内资源的访问权限。Role只能用于授予对某个特定命名空间中资源的访问权限。
- ClusterRole:与Role类似,但用于定义对集群范围内资源的访问权限。ClusterRole可以授予对集群中所有命名空间的资源或非资源端点的访问权限。
- RoleBinding:用于将Role绑定到一个或多个用户、服务账户或用户组,从而控制这些实体对命名空间内资源的访问。
- ClusterRoleBinding:用于将ClusterRole绑定到一个或多个用户、服务账户或用户组,控制这些实体对集群范围内资源的访问。
使用RBAC时,管理员可以定义角色,并为这些角色分配适当的权限。然后,通过RoleBinding或ClusterRoleBinding将角色绑定到特定的用户或用户组。这样,用户只能执行其角色所允许的操作,而无法访问或修改未授权的资源。
Role 和 ClusterRole
Role 举例
下面是一个位于 “default” 名字空间的 Role 的示例,可用来授予对 Pod 的读访问权限:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] # "" 标明 core API 组
resources: ["pods"]
verbs: ["get", "watch", "list"]
字段解释
- apiVersion 指定了 Kubernetes API 的版本,这里是 rbac.authorization.k8s.io/v1,表示使用了 Kubernetes 的 RBAC API 版本
- kind 指定了 Kubernetes 资源的类型,这里是 Role,表示定义了一个角色。
- rules 指定了角色的权限规则。
- apiGroups 指定了 API 组,这里是 [“”],表示核心 API 组。
- resources 指定了资源类型,这里是 [“pods”],表示 Pods 资源。
- verbs 指定了允许的操作,这里是 [“get”, “watch”, “list”],表示允许执行 get、watch 和 list 操作。
apiGroups 介绍
核心 API 组:
- pods: Pod 是 Kubernetes 中最小的可部署对象,代表集群中的一个运行中的应用程序实例。
- services: Service 定义了一组Pod的逻辑集合以及访问这些Pod的策略,通常用于创建应用程序的网络端点。
- nodes: Node 是 Kubernetes 集群中的一个工作节点,可以是虚拟机或物理机器。
- namespaces: Namespace 是 Kubernetes 中用于多租户的虚拟集群的一种方式。它允许将 Kubernetes 集群划分为多个虚拟集群,以便在同一集群中运行多个团队或用户的应用程序。
- persistentvolumes: PersistentVolume(PV)是 Kubernetes 中的一种 API 对象,它抽象了存储系统,为用户提供了一种将存储挂载到 Pod 中的方式。
- persistentvolumeclaims: PersistentVolumeClaim(PVC)是 Kubernetes 中的一种 API 对象,它是 Pod 中对存储资源的一种请求。
describe 查看
[root@master01 yaml]# kubectl describe role pod-reader
Name: pod-reader
Labels: <none>
Annotations: <none>
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
pods [] [] [get watch list]
apiGroups 组查看
kubectl api-resources --verbs list
列举几种用法
在 RBAC 角色表达子资源时,使用斜线(/)来分隔资源和子资源。 要允许某主体读取 pods 同时访问这些 Pod 的 log 子资源,可以这样写:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-and-pod-logs-reader
rules:

最低0.47元/天 解锁文章
942

被折叠的 条评论
为什么被折叠?



