RBAC(Role-Based Access Control,基于角色的访问控制)系统在Kubernetes中的应用及其工作原理,并通过一个实例进行解释。 Kubernetes RBAC 简介 在Kubernetes中,RBAC是一种用于管理集群内资源访问权限的机制。它允许管理员精细地控制哪些用户、组或服务账户可以对哪些API资源执行何种操作。通过定义和分配不同的角色以及将这些角色绑定到用户身份上,可以实现细粒度的授权管理。 RBAC核心组件 示例 假设我们有一个Kubernetes集群,并且有以下需求: 创建角色 首先,我们为Alice创建一个名为 dev-viewer 的角色: apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: development name: dev-viewer rules:

  • apiGroups: [""] # "" 表示 core API group resources:
  • deployments
  • configmaps verbs:
  • get
  • list
  • watch
  • update

接着,为 myapp-sa 在生产环境创建一个名为 prod-pod-manager 的集群角色(因为涉及Pod管理,这通常属于集群级别的权限): apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prod-pod-manager rules:

  • apiGroups: [""] # 对于 Pod 资源,依然使用 core API group resources:
  • pods verbs:
  • create
  • update
  • delete
  • patch

创建角色绑定 然后,我们将角色绑定到对应的用户和服务账户:

绑定Role到用户Alice

apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: dev-alice-binding namespace: development subjects:

  • kind: User name: alice # Alice的实际用户名,需替换为实际值 roleRef: kind: Role name: dev-viewer apiGroup: rbac.authorization.k8s.io

绑定ClusterRole到服务账户myapp-sa

apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: prod-myapp-sa-binding namespace: production subjects:

  • kind: ServiceAccount name: myapp-sa namespace: production # 注意这里的服务账户位于生产命名空间内 roleRef: kind: ClusterRole name: prod-pod-manager apiGroup: rbac.authorization.k8s.io

以上设置完成后,Alice用户将在 development 命名空间内拥有查看和更新Deployment及ConfigMap的权限,而服务账户 myapp-sa 则可以在 production 命名空间内创建和管理Pod资源。