k8s基于角色的访问控制(RBAC)

发布于:2025-05-01 ⋅ 阅读:(30) ⋅ 点赞:(0)

Kubernetes(k8s)权限管理主要是基于角色的访问控制(RBAC),以下是其核心内容:
核心概念
Role 和 ClusterRole

Role :定义特定命名空间内的权限规则,用于在某个命名空间内设置访问权限。
ClusterRole :定义集群范围内的权限规则,适用于集群级别的资源或跨命名空间的访问权限。
RoleBinding 和 ClusterRoleBinding
RoleBinding :将 Role 或 ClusterRole 与特定用户或服务账户绑定,使其在指定命名空间中拥有对应的权限。
ClusterRoleBinding :将 ClusterRole 与用户、服务账户或用户组绑定,使其在整个集群范围内拥有对应的权限。

权限管理操作
定义 Role 和 ClusterRole
创建 Role 时,需指定所属命名空间,定义在该命名空间内的资源访问权限。
创建 ClusterRole 时,定义的权限适用于集群范围内的资源。
绑定 Role 和 ClusterRole
通过 RoleBinding 或 ClusterRoleBinding,将定义好的角色绑定到特定的用户或服务账户,实现权限分配。

默认角色和角色绑定
默认 ClusterRole

cluster-admin :允许超级用户在平台上的任何资源上执行所有操作,可授权对集群中以及所有命名空间中的全部资源进行完全控制。
admin :允许管理员在名字空间内执行授权,可授予对名字空间中的大多数资源的读 / 写权限,但不允许对资源配额或者名字空间本身进行写操作。
edit :允许对名字空间的大多数对象进行读 / 写操作,但不允许查看或者修改角色或者角色绑定等。
view :允许查看名字空间中的大多数对象,但不允许查看 Secret 等敏感信息。

默认 RoleBinding 和 ClusterRoleBinding
system:masters 组与 cluster-admin ClusterRole 绑定,通常用于集群管理员账号。

权限管理工具
kubectl auth can-i:用于查看某个用户、服务账户或角色是否有某项操作权限。
kubectl get:查看所有 Role 和 RoleBinding。

1.创建Role或ClusterRole
定义一个Role,用于指定在某个命名空间内的权限规则:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

metadata.namespace:指定命名空间。
rules:定义允许的操作,apiGroups指资源所属的API组,resources指资源类型,verbs指允许的操作。
定义一个ClusterRole,用于指定集群范围内的权限规则:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-admin
rules:
- apiGroups: [""]
  resources: ["pods", "services", "secrets"]
  verbs: ["*"]

rules:定义允许的操作,verbs: [“*”]表示允许所有操作。

2.创建RoleBinding或ClusterRoleBinding
将Role或ClusterRole绑定到特定的用户或服务账户:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: alice
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

metadata.namespace:指定绑定的命名空间。
subjects:定义授权的对象,可以是User、Group或ServiceAccount。
roleRef:引用要绑定的Role或ClusterRole。

将ClusterRole绑定到用户:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-binding
subjects:
- kind: User
  name: alice
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

subjects:定义授权的对象。
roleRef:引用要绑定的ClusterRole。

3.应用配置
使用kubectl apply -f .yaml命令应用上述配置文件。
4.验证权限
使用kubectl auth can-i命令验证用户权限:

kubectl auth can-i get pods --as=alice

get pods:要验证的操作。
–as=alice:指定用户。


网站公告

今日签到

点亮在社区的每一天
去签到