k8s基于角色的访问控制(RBAC)
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: defaultname: 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-podsnamespace: default
subjects:
- kind: Username: aliceapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: pod-readerapiGroup: 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: Username: aliceapiGroup: rbac.authorization.k8s.io
roleRef:kind: ClusterRolename: cluster-adminapiGroup: 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:指定用户。