K8S学习之基础三十:k8s中RBAC 的核心概念
Kubernetes (k8s) 中的 RBAC(Role-Based Access Control,基于角色的访问控制)是一种用于管理用户和服务账户对集群资源访问权限的机制。RBAC 允许管理员通过定义角色(Role)和角色绑定(RoleBinding)来精确控制谁可以在哪些资源上执行哪些操作。
RBAC 的核心概念
-
Role:
-
定义了一组权限,指定了可以对哪些资源执行哪些操作。
-
Role 是命名空间(Namespace)级别的,即它只适用于特定的命名空间。
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader rules: - apiGroups: [""] # "" 表示核心 API 组 resources: ["pods"] verbs: ["get", "watch", "list"]
这个 Role 允许用户在
default
命名空间中获取、查看和列出 Pod。
-
-
ClusterRole:
-
类似于 Role,但它是集群级别的,适用于整个集群,而不仅仅是某个命名空间。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: cluster-admin rules: - apiGroups: [""] resources: ["*"] verbs: ["*"]
这个 ClusterRole 允许用户对所有资源执行所有操作。
-
-
RoleBinding:
-
将 Role 或 ClusterRole 绑定到用户、组或服务账户(ServiceAccount)。
-
RoleBinding 是命名空间级别的,即它只适用于特定的命名空间。
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
这个 RoleBinding 将
pod-reader
Role 绑定到用户alice
,允许她在default
命名空间中读取 Pod。
-
-
ClusterRoleBinding:
-
类似于 RoleBinding,但它是集群级别的,适用于整个集群。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: cluster-admin-binding subjects: - kind: User name: admin apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
这个 ClusterRoleBinding 将
cluster-admin
ClusterRole 绑定到用户admin
,允许她对整个集群中的所有资源执行所有操作。
-
RBAC 的常见操作
-
创建 Role 和 RoleBinding:
-
使用
kubectl create role
和kubectl create rolebinding
命令可以快速创建 Role 和 RoleBinding。kubectl create role pod-reader --verb=get,list,watch --resource=pods kubectl create rolebinding read-pods --role=pod-reader --user=alice
-
-
查看 Role 和 RoleBinding:
-
使用
kubectl get role
和kubectl get rolebinding
命令可以查看现有的 Role 和 RoleBinding。kubectl get role -n default kubectl get rolebinding -n default
-
-
删除 Role 和 RoleBinding:
-
使用
kubectl delete role
和kubectl delete rolebinding
命令可以删除 Role 和 RoleBinding。kubectl delete role pod-reader -n default kubectl delete rolebinding read-pods -n default
-
RBAC 的最佳实践
- 最小权限原则:
- 只授予用户或服务账户完成其任务所需的最小权限。
- 避免使用过于宽泛的权限,如
cluster-admin
,除非确实需要。
- 使用命名空间隔离:
- 将不同的应用或团队分配到不同的命名空间,并使用 Role 和 RoleBinding 来控制权限。
- 定期审计权限:
- 定期检查 Role 和 RoleBinding,确保没有不必要的权限被授予。
- 使用 ServiceAccount:
- 为每个应用或服务创建专用的 ServiceAccount,并为其分配适当的权限,而不是使用默认的 ServiceAccount。
总结
RBAC 是 Kubernetes 中管理访问控制的重要机制,通过定义 Role、ClusterRole、RoleBinding 和 ClusterRoleBinding,管理员可以精确控制用户和服务账户对集群资源的访问权限。遵循最小权限原则和最佳实践,可以有效地提高集群的安全性。