深入剖析 Kubernetes
张磊
Kubernetes 社区资深成员与项目维护者
116705 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
再谈开源与社区 (1讲)
结束语 (1讲)
深入剖析 Kubernetes
15
15
1.0x
00:00/00:00
登录|注册

26 | 基于角色的权限控制:RBAC

view
edit
admin
cluster-admin
为默认ServiceAccount绑定只读权限的Role
预定义角色
ServiceAccount的用户组
ServiceAccount对应的用户
一组用户
外部认证服务提供
Kubernetes内置用户
绑定关系
针对非Namespaced对象
绑定关系
Kubernetes定义的用户
机器
API对象操作权限
规则
思考题
ClusterRole
system:serviceaccounts
system:serviceaccount
Group
User
ServiceAccount
ClusterRoleBinding
ClusterRole
RoleBinding
Subject
Role
RBAC
RBAC(基于角色的权限控制)

该思维导图由 AI 生成,仅供参考

你好,我是张磊。今天我和你分享的主题是:基于角色的权限控制之 RBAC。
在前面的文章中,我已经为你讲解了很多种 Kubernetes 内置的编排对象,以及对应的控制器模式的实现原理。此外,我还剖析了自定义 API 资源类型和控制器的编写方式。
这时候,你可能已经冒出了这样一个想法:控制器模式看起来好像也不难嘛,我能不能自己写一个编排对象呢?
答案当然是可以的。而且,这才是 Kubernetes 项目最具吸引力的地方。
毕竟,在互联网级别的大规模集群里,Kubernetes 内置的编排对象,很难做到完全满足所有需求。所以,很多实际的容器化工作,都会要求你设计一个自己的编排对象,实现自己的控制器模式。
而在 Kubernetes 项目里,我们可以基于插件机制来完成这些工作,而完全不需要修改任何一行代码。
不过,你要通过一个外部插件,在 Kubernetes 里新增和操作 API 对象,那么就必须先了解一个非常重要的知识:RBAC。
我们知道,Kubernetes 中所有的 API 对象,都保存在 Etcd 里。可是,对这些 API 对象的操作,却一定都是通过访问 kube-apiserver 实现的。其中一个非常重要的原因,就是你需要 APIServer 来帮助你做授权工作。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kubernetes中的基于角色的权限控制(RBAC)是一项重要机制,通过角色、被作用者和角色绑定实现对API对象的访问权限管理。RBAC包括Role、Subject、RoleBinding、ClusterRole和ClusterRoleBinding等核心概念,用于控制权限。文章还介绍了为ServiceAccount分配权限的具体步骤,以及默认ServiceAccount的权限问题。此外,还介绍了用户组的概念和如何在RoleBinding中定义subjects,以及Kubernetes中内置的ClusterRole。RBAC的灵活性和可扩展性使得Kubernetes能够满足不同场景下的权限控制需求,为用户提供了丰富的授权管理功能。文章内容涵盖了RBAC的基本原理和实际操作,对于想要深入了解Kubernetes权限控制的读者具有很高的参考价值。文章中还提出了一个思考题,即如何为所有Namespace下的默认ServiceAccount绑定一个只读权限的Role,这个问题能够引发读者的思考和探索。文章内容涵盖了RBAC的基本原理和实际操作,对于想要深入了解Kubernetes权限控制的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(67)

  • 最新
  • 精选
  • 无痕飞客
    老师,怎么优雅的卸载掉kubernetes呢?

    作者回复: kubeadm reset

    2018-10-22
    4
    36
  • 单朋荣
    为什么要生命这类service account,不能直接使用role进行权限分配吗?这个中间代理的好处是啥呢?

    作者回复: 所有的中间层都是为了解耦

    2018-12-11
    27
  • runner
    老师还是之前的问题,现在机器上有一个手动起的容器(比如是老的业务容器),想把他加到pod里管理起来,比如pod生成的时候发现已经有这个容器了,就关联这个容器,不再创建了。有办法实现么?

    作者回复: kubernetes 里最小的调度单位是pod,所以不可以的

    2018-10-23
    13
  • 虎虎❤️
    但在这种情况下,这个默认 ServiceAccount 并没有关联任何 Role。也就是说,此时它有访问 APIServer 的绝大多数权限。 为什么没有关联role,就会有绝大多数权限呢?有一个默认的role么,都有什么权限呢? 另外,建议在所有的namespace给default serviceaccount绑定view,是出于安全的考虑是么?

    作者回复: 就是为了安全。role是用来做限制的,你没限制当然就撒野了。

    2018-10-22
    4
    8
  • 虎虎❤️
    Prior to Kubernetes 1.6, many deployments used very permissive ABAC policies, including granting full API access to all service accounts. Default RBAC policies grant scoped permissions to control-plane components, nodes, and controllers, but grant no permissions to service accounts outside the kube-system namespace (beyond discovery permissions given to all authenticated users). Quoting from https://kubernetes.io/docs/reference/access-authn-authz/rbac/#service-account-permissions 按我对官方文档的理解,RBAC策略下 default service account 是不是并没有任何权限,ABAC才会grant full access? 如果给所有namespace的default service account都赋予view 权限。会不会出现如下风险? Warning: This allows any user with read access to secrets or the ability to create a pod to access super-user credentials.

    作者回复: 是的,这个风险肯定的

    2018-10-23
    6
    4
  • Pixar
    role roleBanding serviceAccount 都是 namespaced , 那跨namespace 操作会怎么样?

    作者回复: 找不到对象

    2018-10-26
    2
    2
  • 无痕飞客
    老师,我kubernetes安装好了,怎么停止启动的kube进程并且卸载掉kubernetes呢?

    作者回复: kubeadm reset

    2018-10-22
    1
  • huan
    kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: readonly-all-default subjects: - kind: User name: system.serviceaccount.default roleRef: kind: ClusterRole name: view apiGroup: rbac.authorization.k8s.io
    2018-10-22
    12
    66
  • 喜剧。
    kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: readonly-all-default subjects: - kind: ServiceAccount name: system.serviceaccount.default roleRef: kind: ClusterRole name: view apiGroup: rbac.authorization.k8s.io 前面的朋友写的问题在于,default应该是serciveacount
    2018-11-28
    3
    40
  • 蹦蹦
    kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: readonly-all-default subjects: - kind: ServiceAccount name: default roleRef: kind: ClusterRole name: view apiGroup: rbac.authorization.k8s.io kind是ServiceAccount,不是Group。name直接写default,不指定namespace
    2020-07-23
    4
    14
收起评论
显示
设置
留言
67
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部