作者:周文浩,青云科技研發工程師,KubeSphere Maintainer,熱愛云原生,熱愛開源,目前負責 KubeSphere 權限控制的開發與維護,
KubeSphere 3.3.1 已經發布一個多月了, 3.3.1 版本對于 KubeSphere 來說只是一個小的 Patch 版本,但是權限控制模塊改動較大,這篇文章將從開發者的視角為你分享權限控制模塊的改動內容,
這次的改動的主要目的是提升 KubeSphere 權限控制的安全性和易用性,使用過 KubeSphere 的小伙伴應該對 KubeSphere 的租戶體系有一些印象,這對于用戶來說是非常重要的一部分,
權限控制及租戶決議
在介紹這次的改動前,我將先簡單為你介紹 KubeSphere 的權限控制和租戶體系,這 對于理解本次 3.3.1 版本對于權限控制的改動有非常大的幫助,或者你可以參考創建企業空間、專案、用戶和平臺角色自己動手實驗一下,
我們借鑒了 Kubernetes 的 RBAC 權限控制機制,使用角色給租戶授予對 KubeSphere 的操作權限,而角色是由授權項組成的一個權限物體,角色分為內置角色和自定義角色,在通常的使用場景下,我們希望內置角色就能夠覆寫用戶的使用需求,如果你有特殊的權限要求則可以自定義一個角色,自定義角色使得你可以用 KubeSphere 提供的授權項隨意組合,創建一個特定的角色,
角色由分為不同的層級,從租戶體系來看,我們將整個 KubeSphere 分為四個層級,即:
- 平臺 (Platform)
- 企業空間(Workspace)
- 命名空間 (Namespace) - 集群 (Cluster)
與之對應的角色則是:
- 平臺角色 (Platform Role)
- 企業空間角色 (Workspace Role)
- 命名空間角色 (Namespace Role)
- 集群角色 (Cluster Role),
下面這張圖可以幫助你理解不同層級和角色之間的關系,
從資源層級來看,命名空間屬于企業空間,企業空間屬于平臺,在這里我們只將集群作為一個部署命名空間的資源池,
租戶可以被邀請進多個企業空間,并授予企業空間角色,在企業空間中,又可以被邀請到多個命名空間,并授權命名空間角色,

角色
洗掉角色
- 平臺級: Users Manager (用戶管理員),Workspaces Manager (企業空間管理 員)
基于安全性考慮,我們洗掉了兩個內置平臺角色:Users Manager (用戶管理員) 和 Workspaces Manager (企業空間管理員),
用戶管理員可以創建任意層級、任意權限的自定義用戶,如果你需要,甚至可以使用用戶管理員來創建一個平臺管理員 (Platform Administrator) ,對于一個安全的權限控制體系來說應是不被允許的,這會帶來極強的越權風險,所以我們洗掉了這個角色,洗掉這個角色之后,我們只能使用平臺管理員來創建角色,
企業空間管理員可以用來管理平臺中所有的企業空間及企業空間中資源,企業空間對于 KubeSphere 來說是一個及其重要的資源,在平臺中企業空間是集群中所有資源的載體,所以我們洗掉了這個角色,以保證除平臺管理員之外的角色的權利過于集中,
新增角色
- 平臺級:platform-self-provisioner 為了使得企業空間的管理更加方便易用,我們又新增平臺角色 Platform Self Provisioner
Platform Self Provisioner 設計
基本原型
可以創建企業空間(無法修改和洗掉),管理自己創建的企業空間內的所有資源,
同時由于企業空間屬于平臺層級,企業空間內的所有資源在多集群環境下應該可以部 署在多個集群中,所以對于多集群環境,Platform Self Provisioner 在以下情況下可以 在集群中部署企業空間內的資源,
多集群環境下企業空間部署
- 開啟了集群可見性的集群,self-provisioner 創建的企業空間,可以使用這個集 群部署專案
- 末開啟集群可見性的集群,self-provisioner 創建的企業空間,需要向(platform-admin)平臺管理員,集群管理員(cluster-admin)申請這個集群 的部署授權
單集群環境下企業空間部署
self-provisioner 創建的企業空間,可以在當前集群下部署專案,
對自定義角色的限制
對于自定義角色來說,我們則是屏蔽了某些授權項,以限制自定義角色的權限,內置角色的對應權限任然可用,我們從三個層級對自定義角色屏蔽了相關授權項,自定義角色也是基于同樣的考慮,屏蔽的都是與角色、成員、企業空間相關的權限,
- 平臺級:用戶管理,角色管理,企業空間管理;
- 企業空間級:成員管理,角色管理,組管理;
- 命名空間級:成員管理,角色管理,
升級策略
如果已有舊版本的 KubeSphere 集群,在升級到 KubeSphere 3.3.1 版本時,我們也有自動的升級 Job,對已有的角色進行遷移,具體的升級方式可見使用 KubeKey 升級,
自定義角色的升級
對于已有上述已禁用權限的自定義角色,仍然保留其角色,但是洗掉其包含的已禁用的權限,
具體策略:
- 重新創建一個同名的角色,但是不包含舊的權限項,
內置角色升級
對于已系結上述廢棄的內置角色的租戶,將之前的租戶的角色降級為 platform-regular,
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/539636.html
標籤:其他
上一篇:城市云災備,為業務連續性保駕護航
