MST

星途 面试题库

面试题:容器化Kubernetes中如何通过RBAC实现Namespace的精细权限控制

假设你在一个多租户的Kubernetes容器化集群中工作,需要为不同租户的用户在各自Namespace内配置不同的权限,如某些用户只能查看Pod,某些用户能创建和删除Deployment。请描述如何通过基于角色的访问控制(RBAC)来实现这些精细的权限控制,包括涉及的主要资源对象和配置步骤。
38.6万 热度难度
后端开发容器化

知识考点

AI 面试

面试题答案

一键面试

主要资源对象

  1. Role:定义在特定Namespace内的一组权限。例如,定义一个只能查看Pod的Role,权限为对Pod资源的getlistwatch操作;再定义一个能创建和删除Deployment的Role,权限包含对Deployment资源的createdelete操作。
  2. ClusterRole:与Role类似,但作用于整个集群范围,而不是特定Namespace。如果有跨Namespace的权限需求,可使用ClusterRole。
  3. RoleBinding:将Role绑定到特定的用户、组或服务账号,使它们获得相应的权限。在特定Namespace内将Role与用户等主体关联。
  4. ClusterRoleBinding:将ClusterRole绑定到用户、组或服务账号,适用于集群范围的权限分配。

配置步骤

  1. 定义Role
    • 创建一个YAML文件,例如view - pod - role.yaml,内容如下:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: view - pod - role
  namespace: <目标Namespace>
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]
- 创建另一个YAML文件,如`manage - deployment - role.yaml`,用于创建和删除Deployment:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: manage - deployment - role
  namespace: <目标Namespace>
rules:
- apiGroups: ["apps"]
  resources: ["deployments"]
  verbs: ["create", "delete"]
- 使用`kubectl apply - f view - pod - role.yaml`和`kubectl apply - f manage - deployment - role.yaml`分别创建这两个Role。

2. 定义RoleBinding: - 创建view - pod - role - binding.yaml文件,将view - pod - role绑定到特定用户:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: view - pod - role - binding
  namespace: <目标Namespace>
subjects:
- kind: User
  name: <用户名>
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: view - pod - role
  apiGroup: rbac.authorization.k8s.io
- 创建`manage - deployment - role - binding.yaml`文件,将`manage - deployment - role`绑定到特定用户:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: manage - deployment - role - binding
  namespace: <目标Namespace>
subjects:
- kind: User
  name: <用户名>
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: manage - deployment - role
  apiGroup: rbac.authorization.k8s.io
- 使用`kubectl apply - f view - pod - role - binding.yaml`和`kubectl apply - f manage - deployment - role - binding.yaml`分别创建RoleBinding。

如果需要集群范围的权限控制:

  1. 定义ClusterRole:类似定义Role,只是范围是集群级别。
  2. 定义ClusterRoleBinding:将ClusterRole绑定到用户、组或服务账号,同样类似RoleBinding的定义,只是使用ClusterRoleBinding资源类型。