云桌面后台云平台在实践中进行了多次迭代,原有架构如上图所示。该架构特点是,直接在 OpenStack Nova 进行定制开发,添加了分配虚拟的接口,实现瘦客户端直接访问 OpenStack 获取虚拟机信息。
这个架构下,云桌面平台可以直接访问全部的虚拟机信息,直接进行全部的虚拟机操作,数据也集中存在 OpenStack 数据库,部署方便。用户权限通过 OpenStack Keystone 直接管控,管理界面使用 OpenStack Horizon 并添加云桌面管理页面。
典型的分配虚拟机用例中,瘦客户端通过 OpenStack Keystone 进行认证、获取 Token,然后访问 Nova 请求虚拟机。如上图所示,瘦客户端会通过 Keystone 进行认证,Keystone 确认用户存在后向域 LDAP 进行密码校验,确认用户合法后返回 Token;瘦客户端再通过 Token 向 Nova 申请虚拟机。
Nova 根据瘦客户端设置的坐席信息,首先查找这个坐席是否已分配虚拟机。如有直接返回对应虚拟机。如无,从后台空闲虚拟机中进行分配并更新数据库分配,返回远程桌面协议连接信息。原架构出现一些局限性,首先,业务与 OpenStack 呈强绑定关系,导致 OpenStack 升级涉及业务重写;修改业务逻辑需要对整个云平台做回归测试。
其次,用户必须要是 Keystone 用户,用户管理必须使用 Keystone 模型。导致 Keystone 与 LDAP 之间要定期同步进行,有时还需手工同步特殊用户。管理层面,因为 Horizon 的面向云资源管理的,但业务主要面向运维的。这部分差异,导致我们开发新的 Portal 来弥补,管理人员需要通过两套系统来进行运维。
整体方案上,云桌面远程桌面协议由第三方提供,如果第三方方案不支持 OpenStack,就无法在云桌面系统使用。
最后,用户部门有各种需求,直接在 OpenStack 内进行开发难度大,上线时间长,开发人员很难实现技术引领业务发展。经过架构调整,新架构实现了 OpenStack 与我们的业务解耦,同时适应用户部门的业务发展方向,方便功能快速迭代上线。
其中 VMPool 负责维护某种规格虚拟机的可用数量,避免需要的时候没有虚拟机可用,让用户等待。Allocator 满足符合条件的用户请求,返回用户对应的虚拟机或者从 VMPool 分配虚拟机分配用户。
对于用户分配虚拟机的典型用例,与原有架构改动较大。首先,业务层瘦客户端将直接访问业务层的 API。API 层会直接通过 LDAP 进行用户认证,并获取用户 OU、组别等信息。
接着,业务层将进行用户规则匹配。每个 Allocator 通过用户组、OU、tag 等进行规则匹配,以确定该用户是否由自己进行服务。如不满足 Allocator 所定义的规则,将按 Allocator 的优先等级,继续选取下一个 Allocator 进行匹配,直到匹配或者默认规则为止。
匹配后,如果是有绑定关系的分配规则,比如用户绑定或者坐席绑定、TC 绑定,那 Allocator 将直接从数据库返回已有的绑定;如果无绑定关系,Allocator 就会从对应的 VMPool 分配一台虚拟给,返回给用户。
最后,对用户部门来说,看到的是用户属于一个组,这个组对应特定的虚拟机。只需调整用户属性,即可实现用户分配特定的虚拟机,充分满足他们的各种需求。