Kubernetes RBAC 对象详解

发布时间:2026/10/15 6:01:32
Kubernetes RBAC 对象详解 1. 概述RBACRole-Based Access Control是 Kubernetes 的授权机制基于“角色”来授予权限。核心模型是主体Subject → 绑定Binding → 角色Role/ClusterRole → 规则RulesRBAC 是纯允许模型没有显式拒绝规则。默认拒绝。多个角色/绑定的权限是并集。只要有一条规则允许请求就通过。认证Authentication解决“你是谁”RBAC 解决“你能做什么”。2. 核心对象RBAC 有四个核心对象API 组为rbac.authorization.k8s.io/v1。对象作用域作用Role命名空间定义命名空间内资源的权限规则ClusterRole集群定义集群范围、所有命名空间或非资源 URL 的权限规则RoleBinding命名空间将Role或ClusterRole绑定到主体权限限制在命名空间内ClusterRoleBinding集群将ClusterRole绑定到主体授予集群范围权限2.1 Role命名空间级别只能授予该命名空间内资源的权限。apiVersion:rbac.authorization.k8s.io/v1kind:Rolemetadata:namespace:defaultname:pod-readerrules:-apiGroups:[]resources:[pods,pods/log]verbs:[get,list,watch]2.2 ClusterRole集群级别可用于集群范围资源如nodes、persistentvolumes、namespaces。所有命名空间中的命名空间资源如pods、configmaps。非资源 URL如/healthz、/metrics。apiVersion:rbac.authorization.k8s.io/v1kind:ClusterRolemetadata:name:node-readerrules:-apiGroups:[]resources:[nodes]verbs:[get,list,watch]2.3 RoleBinding命名空间级别把主体绑定到Role或ClusterRole。apiVersion:rbac.authorization.k8s.io/v1kind:RoleBindingmetadata:name:read-podsnamespace:defaultsubjects:-kind:ServiceAccountname:my-sanamespace:defaultroleRef:kind:Rolename:pod-readerapiGroup:rbac.authorization.k8s.io注意RoleBinding可以引用Role也可以引用ClusterRole。引用ClusterRole时权限仍只在该RoleBinding所在命名空间内生效。不能通过RoleBinding授予集群范围资源权限。2.4 ClusterRoleBinding集群级别只能引用ClusterRole授予集群范围权限。apiVersion:rbac.authorization.k8s.io/v1kind:ClusterRoleBindingmetadata:name:read-nodessubjects:-kind:ServiceAccountname:my-sanamespace:defaultroleRef:kind:ClusterRolename:node-readerapiGroup:rbac.authorization.k8s.io3. 主体 Subject绑定中的subjects可以是类型说明User由认证系统提供不是 Kubernetes 对象Group由认证系统提供不是 Kubernetes 对象ServiceAccountKubernetes 对象格式为namespace:name常见组system:authenticated所有已认证用户。system:unauthenticated未认证用户。system:masters超级管理员组。system:serviceaccounts所有 ServiceAccount。system:serviceaccounts:namespace某命名空间下所有 ServiceAccount。ServiceAccount 的用户名格式system:serviceaccount:namespace:name4. 规则字段RBAC 规则主要包含以下字段字段说明apiGroupsAPI 组核心组为空字符串resources资源名如pods、deployments、configmapsverbs操作如get、list、watch、create、update、patch、deleteresourceNames可选限制特定资源名称通常用于单个资源操作nonResourceURLs非资源 URL仅用于ClusterRole常见apiGroups核心组如 Pod、Service、ConfigMap、Secret。appsDeployment、StatefulSet、DaemonSet。batchJob、CronJob。networking.k8s.ioIngress、NetworkPolicy。rbac.authorization.k8s.ioRole、ClusterRole、RoleBinding、ClusterRoleBinding。子资源写法resources:[pods/log,pods/exec,deployments/scale]5. 作用域与绑定关系角色绑定效果RoleRoleBinding授予命名空间内权限ClusterRoleClusterRoleBinding授予集群范围权限ClusterRoleRoleBinding授予该命名空间内权限不能授予集群范围资源RoleClusterRoleBinding不允许关键点ClusterRoleRoleBinding很常用定义通用权限只在指定命名空间生效。ClusterRoleBinding权限大慎用。RoleBinding不能授予nonResourceURLs权限。6. 授权流程请求到达 API Server。认证组件确定用户、组、ServiceAccount。授权组件检查所有适用的RoleBinding/ClusterRoleBinding。合并所有允许规则。如果任一规则允许则通过否则拒绝。没有拒绝规则不能显式禁止某个主体。7. 默认角色Kubernetes 自带一些默认ClusterRole角色说明cluster-admin超级管理员所有权限admin命名空间管理员可管理大多数资源包括 RBACedit可编辑大多数资源不能管理 RBACview只读大多数资源不能查看 Secretsystem:discovery允许访问 API 发现接口system:basic-user允许用户查看自己的信息默认绑定cluster-admin绑定到system:masters组。system:discovery绑定到system:authenticated组。8. 常用命令# 创建 Rolekubectl create role pod-reader--verbget,list,watch--resourcepods# 创建 ClusterRolekubectl create clusterrole node-reader--verbget,list,watch--resourcenodes# 创建 RoleBindingkubectl create rolebinding read-pods\--rolepod-reader\--serviceaccountdefault:my-sa\--namespacedefault# 创建 ClusterRoleBindingkubectl create clusterrolebinding read-nodes\--clusterrolenode-reader\--serviceaccountdefault:my-sa# 检查权限kubectl auth can-i get pods\--assystem:serviceaccount:default:my-sa\-ndefault# 列出某主体所有权限kubectl auth can-i--list\--assystem:serviceaccount:default:my-sa\-ndefault# 应用并协调 RBACkubectl auth reconcile-frbac.yaml9. 最佳实践最小权限原则只授予必需的资源和动词。优先使用 RoleBinding尽量避免 ClusterRoleBinding。绑定到 ServiceAccount应用权限通过 ServiceAccount 授予而不是 User。避免给 default ServiceAccount 授权每个命名空间都有 default SA容易误用。使用 resourceNames 限制对单个资源操作可精确限制。不要直接修改默认 ClusterRole使用聚合或自定义 ClusterRole。定期审计检查高权限绑定、cluster-admin、system:masters。GitOps 管理RBAC 配置纳入版本控制。使用聚合 ClusterRole通过标签选择器组合规则便于扩展。10. 常见误区误区正确理解RBAC 可以拒绝权限RBAC 没有拒绝规则只有允许和默认拒绝RoleBinding 引用 ClusterRole 就能获得集群权限只能获得该命名空间内权限ClusterRoleBinding 可以绑定 Role只能绑定 ClusterRoleConfigMap 更新会触发 RBAC 更新RBAC 是独立授权对象不会自动触发 Pod 滚动认证通过就有权限认证解决身份授权解决权限多个角色权限会冲突权限是并集没有优先级11. 总结Kubernetes RBAC 通过四个核心对象工作Role命名空间内权限。ClusterRole集群范围或跨命名空间权限。RoleBinding命名空间内绑定。ClusterRoleBinding集群范围绑定。核心原则主体通过绑定获得角色角色包含规则规则是纯允许默认拒绝权限取并集。设计时坚持最小权限优先 RoleBinding谨慎使用 ClusterRoleBinding。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询