多云管理中的多租户解决方案
01 云计算中多租户的应用
在云计算时代,“多租户”是一个非常重要的概念,无论是公有云还是私有云,对多租户的支持是必须的。那么什么是多租户呢?
多租户定义
根据百度百科中的定义,多租户技术(英语:multi-tenancy technology)是一种软件架构技术,简单来说是指以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离。
云计算中的多租户
在云计算中,采用多租户技术,可实现多个租户共享软硬件资源,提高资源利用率,降低分摊在单个租户上的平均基础设施和管理成本,同时实现租户间数据、性能与行为的隔离。云计算的多租户特性并不仅仅限于 IaaS 层,包括 PaaS 层(如中间件、数据库等)、SaaS 层(如大数据、人工智能、云桌面等)也具备多租户的特征。
租户模型
在云计算中,租户可以理解为一个项目、团队或组织,而用户是这个租户下的具体使用者,不同的用户通过角色来实现操作权限与工作中职责的划分。
在这里,通常会认为一个企业会是一个租户,然后由租户管理员建立内部组织,并为组织下的用户赋予相应的角色。在由具备权限的用户(项目负责人)按照实际场景创建项目,通过项目申请各类云服务。这样,既实现了不同租户间的数据、行为隔离,又可以在租户内部按项目实现数据与行为的隔离。
02 多云管理中的多租户设计
在多云管理平台产品(以下简称为“产品”)中,多租户可以体现在两个层级。第一个层级是在产品应用层面,需要能够支持不同租户同时使用多云管理功能,并实现租户间数据与行为的隔离;第二个层级是产品需要支持不同云管平台的租户模型,将产品的租户模型与云管平台的租户模型进行适配,按照各云管平台要求对云资源进行订购、管理,同时能够对于不支持多租户的云管平台适用产品的租户模型进行云资源的订购与管理,这里也是产品中实现中最复杂的地方。
我们在设计产品的多租户模型时,借鉴了多个主流云管平台的租户模型设计,并参考了各省多云管理项目的实际需求,得出在多云管理平台中多租户应该具备以下能力要求:
在多云应用层级中,即产品面向使用者时,需要实现以下能力:
1) 多个租户间实现数据与行为的隔离,能够根据不同角色进行分权分域控制。
2) 多云管理的核心基础是通过云账号接入云平台,不同租户可以基于一套共享的云平台接入设计规则,使用各自的云账号进行云平台接入,并且不同的租户接入同一个云平台后,可以互不影响。
3) 租户内部需要能够支持使用客户现有的内部组织架构进行管理,可以基于业务模型进行数据的隔离。
在云接入层级中,即产品面向云管平台时,需要实现以下能力:
1) 同一个租户下,支持一个云平台实例接入多个云账号,并能够使用正确的云账号对云资源进行操作控制;
2) 上级租户可以将云平台的已接入能力授权给下级租户进行使用,包括已纳管的云资源或是云账号的使用权限;
3) 执行云资源的批量操作时,比如批量重启或是批量添加标签,由于云资源可能来源于不同的云平台或是同一云平台的不同账号,需要能够正确区分并使用云账号进行操作。
为实现以上需求,我们的产品中多租户的设计思路包括以下几点:
整体架构
整体架构如图所示,涉及主要模型有以下几类:
1) 租户:指一个企业客户或是个人客户,租户之间数据与行为隔离,上下级租户间通过授权实现数据共享。每个租户只能操作归属或授权给该租户的数据;
2) 用户:租户下的具体使用者,拥有用户名、密码、邮箱等帐号信息的自然人;
3) 角色:用户操作权限的集合;
4) 云平台实例:指在产品中已接入的云管平台。云平台实例允许设置负责人,授予负责人“云平台管理员”角色;
5) 云账号:云账号是用户在各云平台上的访问凭证,在产品中以云账号形式进行管理;
6) 业务资源池:基于对统一、简化云资源申请与管理需要,将云平台实例映射为业务资源池,用户在使用时不需要关注底层云平台实例以及使用哪个云账号,只需要根据业务规划,通过对应的业务资源池申请云资源即可;
7) 业务系统:等同于云管平台上的项目,但是业务系统是可以跨云平台的,可以将多个云管平台上的云资源按照实际项目统一在一个业务系统内进行管理。
角色与权限
产品基于 RBAC(Role-Based Access Control ,基于角色的访问控制)模型控制权限。权限根据控制场景可分为功能权限、数据权限。“功能权限”控制的是用户登录系统后能看到哪些模块,操作哪些按钮;而“数据权限”控制的是用户能够看到什么数据和多少数据量(查出来的数据集合)。原始 RBAC 模型不包括数据权限的处理,多云系统基于 RBAC 扩展,通过资源池、云账号、业务系统来划分资源数据权限,并通过角色策略来实现不同角色的数据权限控制。
租户管理模型
◎ 租户间模型关系
◎ 租户内部模型关系
具体说明如下:
业务租户为多云管理平台对外开放面向使用者的租户,用户在注册创建租户后,可根据自身组织架构规划或是业务架构在该租户内部创建组织、添加人员并赋予角色;
如客户有分级运营需求,可将内部的某个组织映射为内部子租户,实现独立运营,但同时可以由上级组织进行管理并查询相关数据;
上级组织管理角色可以查看、管理归属下级组织的云资源。普通用户可以通过加入业务系统进行申请或使用云资源。
03 关键问题分析与实践
云账号的使用判断
在实际场景中会有一个云平台实例接入多个云账号的情况。而由于多个云账号可能存在所管辖云资源范围重叠,因此在对云资源进行操作时,会导致系统无法准确判断用于执行操作的云账号,如果依赖人工进行选择,不仅会出现大部分用户不清楚该用哪个账号的情况,而且会导致执行操作繁琐且无法实现对云资源的批量操作。
具体问题表现如下:
1) 用户通过多云管理平台实现对云资源的规格变更、状态变更等操作都需要通过云账号调用云平台能力实现。在实际场景中,通常是由租户/平台管理员进行云平台接入,对云账号进行管理,其他业务用户在使用过程中,不需要关注且也无法去识别用哪个云账号来实现对云资源的操作,导致操作无法准确进行;
2) 多云管理平台因为是跨平台的云资源管理,因此在执行对云资源的批量操作时,批量选择的云资源可能是来源于多个云平台多个云账号,因此怎样为每个云资源找到正确匹配的云账号并且能够兼顾到批量执行的效率就成了批量操作中遇到的大问题;
3) 同租户内接入的多个云账号有接入云资源实例重复的情况,一方面要保证相关统计分析的准确性,包括费用、配额等数据不能出现重复统计;另一方面要保证在多云管理平台删除云账号时,可以准确判断关联的云资源实例是否可以同步移除。
针对这些问题,我们从以下几点进行了实践:
1) 在进行云账号接入时,会维护云账号与接入云资源实例的关联关系,并根据云账号的类型生成关系类型,同时会维护云资源实例维度的接入云账号顺序;在通过多云管理平台进行云资源申请后,会维护申请成功的云资源实例与对应申请云账号的关联关系;
2) 在对云资源进行管理操作时,会获取所选云资源实例关联的云账号,根据关联类型、关联顺序依次进行排序,最终获取到一个确定的用于执行操作的云账号,通常情况下,“创建云账号>普通接入云账号>云平台管理云账号”。
3) 对于申请场景下的云账号使用,可以通过为业务资源池配置允许使用的云账号来实现,如果一个业务资源池需要配置多个云账号,支持管理员根据配额或是计费要求调整云账号的使用优先级,在申请时可以自动选取适合的云账号。
4) 云账号删除时,会对云账号关联云资源进行判断。如果云资源还存在其它有效的云账号,则不对其进行处理;如果云资源已经不存在其它关联的有效云账号,则将该云资源从多云管理平台移除并归档。
通过对云账号的灵活配置管理,使得我们可以在多云管理平台上实现一个云平台同时接入多个云账号的能力,可以按需使用云账号进行云资源的创建,实现对云平台的精细化管控。并且,能够进一步简化用户在多云管理平台上针对云资源的各类控制操作,极大提升了用户的管理效率。
项目与游离资源管理
在多云管理平台中,为提升管理能力、效率以及实现业务上的数据隔离,是以业务系统方式对云资源进行划分与管理,而在云平台上,有些云平台有自己的业务模型(项目),有些云平台没有,并且在接入云平台时,还会遇到大量存量项目、云资源实例情况。因此,在多云管理平台中如何将接入的存量数据划分到业务系统内实现统一管理,并实现业务系统与云平台上项目的映射就成了必须要解决的问题,具体问题表现如下:
1) 不是所有的云平台都有项目这样的业务模型,因此在多云管理平台上为了提供统一的操作体验,用户只需选择要创建云资源的业务系统,而不需选择具体云平台的项目,但是遇到在接口必须要传项目这个属性时,就会遇到如何选择项目的问题,如果云平台上之前有项目,需要放在哪个项目下合适?如果云平台上之前没有项目,对于这种情况如何处理才能满足调用云平台接口的要求?
2) 对有存量云资源的云平台在接入时,如果该云平台没有项目这样的业务模型,那如何将存量云资源划分至各个业务系统下面;如果该云平台上有项目这样的业务模型,那如何将云平台上项目与多云管理平台上的业务系统进行映射,它们之间的映射关系又该如何确定,在实际产品使用中,我们有碰到过云平台上的一个项目需要映射为多个业务系统的情况,也碰到过云平台上的多个项目需要映射到一个业务系统的情况。
针对这些问题,我们从以下几点进行了实践:
1) 首先,在接入云平台实例后,从多云管理平台角度出发,未划分至业务系统下的云资源实例都归属于游离资源,一个云资源实例在多云管理平台中只能属于一个业务系统。
2) 租户管理员可将云平台项目的资源绑定至多个业务系统。对于加入业务系统的云资源实例,如果业务系统负责人需要进行资源替换或缩容,可以将已绑定的云资源实例解绑,使其变为游离资源,由租户管理员重新进行分配。云资源实例在多云管理平台内部业务系统间进行关联、转移时,不影响该云资源实例在云平台上归属的项目。
3) 在进行云资源创建时,对于云平台在申请时必填项目的情况,多云管理平台会自动在该云平台上创建一个项目(云账号维度),后续申请的资源都会默认添加到这个项目下,并在云资源上添加相应的业务标签。
4) 系统也支持租户管理员将云平台项目与业务系统进行强绑定,在这种场景下,该云平台项目的云资源会自动划分至绑定的业务系统下,该业务系统在后续在该云平台上申请云资源实例时,也会默认添加到该项目。
通过这一实践,可以很好的屏蔽底层云平台业务模型架构上的差异,在多云管理平台上提供一致性的业务管理体验,并能够实现业务级别的租户隔离,满足用户权限管控的要求。
多级租户与授权管理
在多云管理的项目建设过程中,我们遇到了客户对于云资源申请、使用上的多种管理要求,像有要求由管理员统一申请云资源在给具体的申请人按需分配;有要求由管理员统一管理云平台,下面的用户只需要按需填写申请;有要求管理的云平台能够对多个外部客户进行开放,并且外部客户的数据需要单独进行管理并实现相互间的数据隔离等等。
由于这方面的逻辑涉及到了系统层面核心管理模型的架构设计,如果针对每个管理场景都单独进行定制化研发,不仅需要耗费大量的人力投入,并且后续客户如果对自身的管理模式进行了改变,也需要耗费比较大的改造量。
为满足多种管理场景需要,规范并简化业务使用方对云服务的使用,多云管理平台在多级租户模型架构下,可以实现云平台实例、游离资源、业务资源池的按需进行授权,主要体现在以下几点:
1) 同级租户间严格遵循数据与行为隔离要求;上下级租户间,可以通过配置参数,来实现上级租户对下级租户不同级别的管理级别:
a) 完全管控级别:上级租户可以对下级租户的各类数据、配置信息进行管理;
b) 运维级别:上级租户可以对下级租户的资源数据进行管理;
c) 监控级别:上级租户只可以查看下级租户的资源、业务数据,并进行统计分析。
2) 云平台实例授权:由上级租户管理员实现云平台层级的统一管理,可以将接入的云平台实例授权至多个下级租户,由各下级租户通过输入自己的云账号进行独立接入,不同下级租户间数据、行为隔离互不影响。
3) 游离资源授权:上级租户管理员可将一批游离资源分配至某个下级租户进行使用,通过该功能可以满足如下场景的要求:由集团总部租户统一进行云资源的申请分配,将申请后的云资源按需分配至不同子公司,子公司租户可以将其按需分配至不同的业务系统进行使用。
4) 业务资源池授权:管理员可以将云平台实例与云账号根据业务规划映射为业务资源池,并规定这个业务资源池可使用的业务域或是直接将这个业务资源池绑定至某个业务系统,来实现对不同业务场景的云资源申请控制。同样,管理员也可以将业务资源池授权至多个下级租户进行使用,并可针对每个下级租户配置资源配额,在这种场景下,下级租户不需要输入云账号,可直接使用该业务资源池进行云资源申请。
04 实践应用
通过以上的多租户设计,我们的多云管理平台能够支撑满足多种管理场景,能够按照要求实现不同维度的数据隔离要求,满足客户精细化的管理控制要求,并已经在实际项目中得到很好的应用,比如电信某省公司内部的多云管理场景,或是移动某省公司面向外部客户的 SaaS 化多云管理场景。
后续我们会继续深入探讨多云管理中的多租户设计理念,为多云管理平台的客户提供更加友好的管理使用体验。
版权声明: 本文为 InfoQ 作者【鲸品堂】的原创文章。
原文链接:【http://xie.infoq.cn/article/3a279e633ab6d0c97383ab9d0】。文章转载请联系作者。
评论