Kubernetes RBAC 权限管理指南

1. 概述

RBAC(Role-Based Access Control,基于角色的访问控制)是 Kubernetes 用于管理权限的机制。它允许管理员基于用户角色定义权限,从而控制不同用户对 Kubernetes 资源的访问。

2. RBAC 关键组件

RBAC 主要由以下四个核心 API 资源组成:

  • Role:定义命名空间级别的访问权限。
  • ClusterRole:定义整个集群范围的访问权限。
  • RoleBinding:将 Role 绑定到用户、组或服务账户,使其在特定命名空间内生效。
  • ClusterRoleBinding:将 ClusterRole 绑定到用户、组或服务账户,使其在整个集群范围内生效。

3. 可授权的资源和操作

3.1 可授权的资源(Resources)

资源类型 说明
pods Pod 资源(创建、删除、列表等)
services Service 资源(暴露、管理流量等)
deployments Deployment 资源(管理副本、更新等)
namespaces 命名空间管理
nodes 节点资源(适用于 ClusterRole)
configmaps 配置存储
secrets 密钥管理
roles 命名空间级别角色
clusterroles 集群级别角色
rolebindings 命名空间级别的角色绑定
clusterrolebindings 集群级别的角色绑定
persistentvolumeclaims (pvc) 持久化存储请求
persistentvolumes (pv) 持久化存储
cronjobs 定时任务
jobs 一次性任务
daemonsets 守护进程集
statefulsets 有状态应用
replicasets 副本集

3.2 可授权的操作(Verbs)

动作(Verb) 说明
get 获取单个资源(查看详情)
list 获取资源列表
watch 监听资源的变化
create 创建资源
update 更新资源
patch 局部更新资源
delete 删除资源
deletecollection 删除多个资源

4. RBAC 角色权限示例

4.1 示例 1:开发人员权限(developer-role)

目标

  • 允许 dev-user 管理 dev-namespace 下的 Pods、Deployments 和 Services
  • 限制权限:只能查看 ConfigMaps,不能修改或删除

(1) 创建 Role

apiVersion: rbac.authorization.k8s.io/v1
kind: Role  # 定义一个命名空间级别的角色
metadata:
  namespace: dev-namespace  # 角色作用的命名空间
  name: developer-role  # 角色名称
rules:
- apiGroups: [""]  # "" 代表核心 API 组
  resources: ["pods", "services"]  # 允许操作的资源类型
  verbs: ["get", "list", "create", "update", "delete"]  # 允许的操作
- apiGroups: ["apps"]  # apps API 组(管理 Deployments)
  resources: ["deployments"]
  verbs: ["get", "list", "create", "update", "delete"]
- apiGroups: [""]
  resources: ["configmaps"]
  verbs: ["get", "list"]  # 仅允许查看 ConfigMaps,不允许修改

(2) 绑定 Role 到用户 dev-user

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding  # 绑定 Role 到用户
metadata:
  name: developer-rolebinding
  namespace: dev-namespace
subjects:
- kind: User  # 绑定对象类型
  name: dev-user  # 绑定的用户名
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role  # 绑定的角色类型
  name: developer-role  # 绑定的角色名称
  apiGroup: rbac.authorization.k8s.io

4.2 示例 2:只读访问权限(readonly-role)

目标

  • 适用于测试人员 qa-user,仅允许 读取 资源,不能创建、修改或删除。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: dev-namespace
  name: readonly-role
rules:
- apiGroups: ["", "apps"]
  resources: ["pods", "deployments", "services", "configmaps", "secrets"]
  verbs: ["get", "list", "watch"]  # 只允许读取权限

4.3 示例 3:集群管理员权限(cluster-admin-role)

目标

  • 赋予 admin-user 完全的集群管理权限
  • 允许管理 所有资源,包括 nodesnamespacesdeploymentssecrets 等。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole  # 定义一个集群级别的角色
metadata:
  name: cluster-admin-role
rules:
- apiGroups: ["*"]  # "*" 代表所有 API 组
  resources: ["*"]  # "*" 代表所有资源
  verbs: ["*"]  # "*" 代表所有操作

5. 用户如何登录并管理 Kubernetes 资源

5.1 通过 kubectl 访问

  1. 测试当前用户权限

    kubectl auth can-i list pods --namespace dev-namespace --as dev-user  # 检查权限
    
  2. 开发人员 dev-user 访问 dev-namespace

    kubectl get pods -n dev-namespace  # 获取 Pod 列表
    
  3. 管理员 admin-user 访问整个集群

    kubectl get nodes  # 获取集群节点信息
    kubectl get deployments --all-namespaces  # 获取所有命名空间的 Deployments
    

6. 总结

  • RBAC 通过 Role、ClusterRole、RoleBinding 和 ClusterRoleBinding 进行权限管理。
  • 可授权的资源和操作类型可以精细化配置,以满足不同角色的需求。
  • 示例中展示了开发人员、测试人员和管理员的常见权限配置方式。
  • 用户可通过 kubectl 进行访问,并使用 kubectl auth can-i 进行权限验证。

RBAC 提供了一种安全、高效的方式来管理 Kubernetes 资源权限,在实际应用中可以根据团队需求进行调整,以确保最小权限原则(Least Privilege)。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容