作者:周文浩,青云科技研发工程师,KubeSphere Maintainer。热爱云原生,热爱开源,目前负责 KubeSphere 权限控制的开发与维护。
KubeSphere 3.3.1 已经发布一个多月了。 3.3.1 版本对于 KubeSphere 来说只是一个小的 Patch 版本,但是权限控制模块改动较大。这篇文章将从开发者的视角为你分享权限控制模块的改动内容。
这次的改动的主要目的是提升 KubeSphere 权限控制的安全性和易用性。使用过 KubeSphere 的小伙伴应该对 KubeSphere 的租户体系有一些印象,这对于用户来说是非常重要的一部分。
在介绍这次的改动前,我将先简单为你介绍 KubeSphere 的权限控制和租户体系,这 对于理解本次 3.3.1 版本对于权限控制的改动有非常大的帮助。或者你可以参考创建企业空间、项目、用户和平台角色自己动手实验一下。
我们借鉴了 Kubernetes 的 RBAC 权限控制机制,使用角色给租户授予对 KubeSphere 的操作权限,而角色是由授权项组成的一个权限实体。角色分为内置角色和自定义角色,在通常的使用场景下,我们希望内置角色就能够覆盖用户的使用需求。如果你有特殊的权限要求则可以自定义一个角色。自定义角色使得你可以用 KubeSphere 提供的授权项随意组合,创建一个特定的角色。
角色由分为不同的层级,从租户体系来看,我们将整个 KubeSphere 分为四个层级,即:
与之对应的角色则是:
下面这张图可以帮助你理解不同层级和角色之间的关系。
从资源层级来看,命名空间属于企业空间,企业空间属于平台。在这里我们只将集群作为一个部署命名空间的资源池。
租户可以被邀请进多个企业空间,并授予企业空间角色。在企业空间中,又可以被邀请到多个命名空间,并授权命名空间角色。

基于安全性考虑,我们删除了两个内置平台角色:Users Manager (用户管理员) 和 Workspaces Manager (企业空间管理员)。
用户管理员可以创建任意层级、任意权限的自定义用户,如果你需要,甚至可以使用用户管理员来创建一个平台管理员 (Platform Administrator) 。对于一个安全的权限控制体系来说应是不被允许的,这会带来极强的越权风险,所以我们删除了这个角色。删除这个角色之后,我们只能使用平台管理员来创建角色。
企业空间管理员可以用来管理平台中所有的企业空间及企业空间中资源。企业空间对于 KubeSphere 来说是一个及其重要的资源,在平台中企业空间是集群中所有资源的载体。所以我们删除了这个角色,以保证除平台管理员之外的角色的权利过于集中。
可以创建企业空间(无法修改和删除),管理自己创建的企业空间内的所有资源。
同时由于企业空间属于平台层级,企业空间内的所有资源在多集群环境下应该可以部 署在多个集群中。所以对于多集群环境,Platform Self Provisioner 在以下情况下可以 在集群中部署企业空间内的资源。
self-provisioner 创建的企业空间,可以在当前集群下部署项目。
对于自定义角色来说,我们则是屏蔽了某些授权项,以限制自定义角色的权限。内置角色的对应权限任然可用,我们从三个层级对自定义角色屏蔽了相关授权项。自定义角色也是基于同样的考虑,屏蔽的都是与角色、成员、企业空间相关的权限。
如果已有旧版本的 KubeSphere 集群,在升级到 KubeSphere 3.3.1 版本时,我们也有自动的升级 Job,对已有的角色进行迁移。具体的升级方式可见使用 KubeKey 升级。
对于已有上述已禁用权限的自定义角色,仍然保留其角色,但是删除其包含的已禁用的权限。
具体策略:
对于已绑定上述废弃的内置角色的租户,将之前的租户的角色降级为 platform-regular。
本文由博客一文多发平台 OpenWrite 发布!
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
使用rspec-rails3.0+,测试设置分为spec_helper和rails_helper我注意到生成的spec_helper不需要'rspec/rails'。这会导致zeus崩溃:spec_helper.rb:5:in`':undefinedmethod`configure'forRSpec:Module(NoMethodError)对thisissue最常见的回应是需要'rspec/rails'。但这是否会破坏仅使用spec_helper拆分rails规范和PORO规范的全部目的?或者这无关紧要,因为Zeus无论如何都会预加载Rails?我应该在我的spec_helper中做
大家好,我正在尝试设置一个开发环境,并且我一直在关注以下教程:Linktotutorial我做得不是很好,除了最基本的版本控制内容外,我对终端命令没有任何实际经验。我点击了第一个链接并尝试运行source~/.bash_profile我得到了错误;mkdir:/usr/local/rbenv/shims:权限被拒绝mkdir:/usr/local/rbenv/versions:权限被拒绝现在每次我加载终端时都会出现错误。bash_profile的内容;exportPATH=/usr/local/rbenv/bin:$PATHexportRBENV_ROOT=/usr/local/rbe
在我的Character模型中,我添加了:字符.rbbefore_savedoself.profile_picture_url=asset_path('icon.png')end但是,对于数据库中已存在的所有角色,它们的profile_picture_url为nil。因此,我想进入控制台并遍历所有这些并进行设置。在我试过的控制台中:Character.find_eachdo|c|c.profile_picture_url=asset_path('icon.png')end但这给出了错误:NoMethodError:undefinedmethod`asset_path'formain:O
当我进入Rails控制台时,我已将pry设置为加载代替irb。我找不到该页面或不记得如何将其恢复为默认行为,因为它似乎干扰了我的Rubymine调试器。有什么建议吗? 最佳答案 我刚发现问题,pry-railsgem。忘记了它的目的是让“railsconsole”打开pry。 关于ruby-on-rails-带有Pry的Rails控制台,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question
我正在尝试将$stdout设置为临时写入一个文件,然后返回到一个文件。test.rb:old_stdout=$stdout$stdout.reopen("mytestfile.out",'w+')puts"thisgoesinmytestfile"$stdout=old_stdoutputs"thisshouldbeontheconsole"$stdout.reopen("mytestfile1.out",'w+')puts"thisgoesinmytestfile1:"$stdout=old_stdoutputs"thisshouldbebackontheconsole"这是输出。r