当前位置: 首页 > news >正文

K8s角色权限管理全解析

在 Kubernetes(k8s)集群中,角色定义是基于 RBAC(Role-Based Access Control,基于基于角色的访问控制)实现的,用于精细化管理用户、服务账户对集群资源的操作权限。主要通过 Role(命名空间内角色)和 ClusterRole(集群级角色)两种资源对象定义权限,再通过 RoleBinding 和 ClusterRoleBinding 将角色与用户 / 服务账户绑定,实现权限分配。

一、核心概念与区别

资源对象作用范围管理的资源类型绑定方式
Role单个命名空间(Namespace)仅当前命名空间内的资源(如 Pod、Deployment)RoleBinding(同命名空间内绑定)
ClusterRole整个集群1. 集群级资源(如 Node、Namespace)
2. 所有命名空间的资源(如跨命名空间的 Pod)
ClusterRoleBinding(集群级绑定)

二、角色定义示例

1. 命名空间内角色(Role

场景:在 default 命名空间中创建一个 pod-reader 角色,允许用户查看该命名空间内的 Pod 列表和详情。

# role-pod-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: default  # 仅作用于 default 命名空间name: pod-reader
rules:
- apiGroups: [""]  # 核心 API 组(无版本号的资源,如 Pod、Service)resources: ["pods"]  # 允许操作的资源类型为 Podverbs: ["get", "watch", "list"]  # 允许的操作:获取、监听、列表

创建角色:

kubectl apply -f role-pod-reader.yaml
2. 集群级角色(ClusterRole

场景:创建一个 cluster-pod-reader 集群角色,允许用户查看所有命名空间的 Pod,以及查看 Node 资源(集群级资源)。

# clusterrole-cluster-pod-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: cluster-pod-reader  # 集群级角色,无命名空间
rules:
- apiGroups: [""]resources: ["pods"]  # 所有命名空间的 Podverbs: ["get", "watch", "list"]
- apiGroups: [""]resources: ["nodes"]  # 集群级资源 Nodeverbs: ["get", "watch", "list"]

创建集群角色:

kubectl apply -f clusterrole-cluster-pod-reader.yaml

三、角色绑定示例(将角色分配给用户)

1. 命名空间内绑定(RoleBinding

场景:将 default 命名空间的 pod-reader 角色绑定给用户 alice,使 alice 只能查看 default 命名空间的 Pod。

# rolebinding-pod-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: read-podsnamespace: default  # 与 Role 同命名空间
subjects:
- kind: Username: alice  # 被绑定的用户(需提前在集群中定义)apiGroup: rbac.authorization.k8s.io
roleRef:kind: Role  # 绑定的是 Role 类型name: pod-reader  # 关联的 Role 名称apiGroup: rbac.authorization.k8s.io

创建绑定:

kubectl apply -f rolebinding-pod-reader.yaml
2. 集群级绑定(ClusterRoleBinding

场景:将 cluster-pod-reader 集群角色绑定给用户 bob,使 bob 能查看所有命名空间的 Pod 和集群的 Node 资源。

# clusterrolebinding-cluster-pod-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: read-all-pods-and-nodes
subjects:
- kind: Username: bob  # 被绑定的用户apiGroup: rbac.authorization.k8s.io
roleRef:kind: ClusterRole  # 绑定的是 ClusterRole 类型name: cluster-pod-reader  # 关联的 ClusterRole 名称apiGroup: rbac.authorization.k8s.io

创建集群绑定:

kubectl apply -f clusterrolebinding-cluster-pod-reader.yaml

四、常见角色定义场景扩展

1. 允许管理 Deployment 的角色
# role-deployment-manager.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: app-devname: deployment-manager
rules:
- apiGroups: ["apps"]  # Deployment 属于 apps API 组resources: ["deployments"]verbs: ["get", "list", "create", "update", "delete"]  # 完整管理权限
2. 允许查看 Secrets 的集群角色
# clusterrole-secret-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: secret-reader
rules:
- apiGroups: [""]resources: ["secrets"]  # 所有命名空间的 Secretsverbs: ["get", "watch", "list"]

五、验证角色权限

可通过 kubectl auth can-i 命令验证权限是否生效:

# 检查 alice 是否能在 default 命名空间查看 Pod
kubectl auth can-i get pods --namespace default --as alice  # 输出 yes# 检查 alice 是否能在 kube-system 命名空间查看 Pod(应拒绝,因 Role 仅作用于 default)
kubectl auth can-i get pods --namespace kube-system --as alice  # 输出 no# 检查 bob 是否能查看 Node(集群级权限)
kubectl auth can-i get nodes --as bob  # 输出 yes

总结

  • Role + RoleBinding 用于控制单个命名空间内的资源权限,适合命名空间隔离的场景(如多团队共享集群)。
  • ClusterRole + ClusterRoleBinding 用于控制集群级资源跨命名空间资源的权限,适合集群管理员、监控组件等需要全局权限的场景。
  • 权限定义需遵循 “最小权限原则”,避免过度授权导致安全风险。

文章转载自:

http://Ns36SNUa.bwzzt.cn
http://oUUEjk6B.bwzzt.cn
http://8CbIkZCD.bwzzt.cn
http://abEpBmum.bwzzt.cn
http://1UbROcVP.bwzzt.cn
http://KxCsQMhV.bwzzt.cn
http://VwX3GKT8.bwzzt.cn
http://FCeEyj8o.bwzzt.cn
http://GplwT2j9.bwzzt.cn
http://uSmo3H7w.bwzzt.cn
http://RbnfLRvM.bwzzt.cn
http://5epxB3B9.bwzzt.cn
http://LKIYKoTd.bwzzt.cn
http://5IFrPFbY.bwzzt.cn
http://pAixZZyQ.bwzzt.cn
http://9tondHUF.bwzzt.cn
http://8PtgqCzf.bwzzt.cn
http://LVXjgxbi.bwzzt.cn
http://B4mc35x7.bwzzt.cn
http://ELWfjlzL.bwzzt.cn
http://YSC5MM4P.bwzzt.cn
http://LKlP44oZ.bwzzt.cn
http://EQPSPVq1.bwzzt.cn
http://NeCxjyIe.bwzzt.cn
http://a5SMhpH0.bwzzt.cn
http://tndjhLKP.bwzzt.cn
http://48sAIfdi.bwzzt.cn
http://JMC4smbO.bwzzt.cn
http://a327wceN.bwzzt.cn
http://NfdT2YWS.bwzzt.cn
http://www.dtcms.com/a/375468.html

相关文章:

  • Postgresql 发送数据到Splunk
  • [网络入侵AI检测] CNN-LSTM混合模型
  • 使用列表推导式取代map和filter的最佳实践 (Effective Python 第27条)
  • Promise状态和方法都有哪些,以及实现原理
  • jquery基础知识总结
  • Qwen-VL系列-国产大模型开眼看世界
  • OpenEuler部署gitlab(小白的“升级打怪”成长之路)
  • 内存视角看「类、原型、实例」
  • 「类 vs 实例」对比 ,「类 - 原型 - 实例」的关系
  • sft冷启动时数据集构造需要注意哪些因素?为什么要做数据清洗与均衡采样?
  • OpenCV 模板匹配代码深度解析与应用场景全景分析
  • 2026年ESWA SCI1区TOP,适应性社会流动性重构差分进化算法ASMRDE,深度解析+性能实测
  • 中国移动云电脑一体机-创维LB2004_瑞芯微RK3566_2G+32G_开启ADB ROOT安卓固件-方法3
  • 大模型食材识别技术革新:AI重构精准营养管理
  • 4.6 变体
  • 智能充气泵PCBA方案
  • minio大文件断点续传
  • C语言(嵌入式方向)
  • 【大模型手撕】pytorch实现LayerNorm, RMSNorm
  • 执行计划 RAC 笔记
  • 西嘎嘎学习 - C++ 类 对象 - Day 8
  • 如何把PPT转换成PDF?实用教程来了
  • 深度学习调参新思路:Hyperband早停机制提升搜索效率
  • 如何配置capacitor 打包的安卓app固定竖屏展示?
  • Redis中的Zset数据类型
  • 在银河麒麟V10上部署Atlas 300i Duo:从固件到驱动的一站式踩坑笔记
  • 测试报告:“问卷考试系统”项目
  • WOA+LSTM+itransformer时间序列预测模型
  • Nginx运维之路(Docker多段构建新版本并增加第三方模块)
  • 构造方法与代替代码构造方法的注解