VMware 的原生 HTML5 控制台

https://blueprints.launchpad.net/nova/+spec/vmware-webmks-console

这是一个为 vSphere 5.5 及更高版本中提供的原生 HTML5 控制台(称为 WebMKS 控制台)添加支持的提案。这将解决我们目前在使用 VNC 控制台时遇到的部署、可扩展性和安全性方面的一些问题。现有的 VNC 控制台支持将保留,但鼓励用户尽可能使用 WebMKS。

问题描述

当前为运行在 VMware hypervisor 上的实例提供 VNC 控制台的方法存在一些问题

  • 部署 - 云运维人员需要在每个 ESXi 主机上的防火墙配置中打开一个巨大的端口范围 (5900-6105)。此外,他们需要创建一个特殊的 VIB 包,以便在重启后使防火墙修改生效。整个过程会造成巨大的安全风险,因为我们仅仅依赖于所有 ESXi 主机都将运行在云用户无法访问的专用网络上的事实。

  • 可扩展性 - Nova 驱动程序需要为每个实例分配一个唯一的 VNC 端口,这是通过在驱动程序中持有锁定的情况下查询 vCenter 上所有已分配的端口来完成的。显而易见,这无法很好地扩展。

  • 安全性 - 我们可以防止在同一个 nova-compute 上发生端口分配的竞争条件,但无法在多个 nova-compute 之间做到这一点。这可能会导致将相同的 VNC 端口分配给不同的实例,如果这些实例最终位于同一个 ESXi 主机上,一个用户可能会劫持另一个用户的控制台。

上述所有问题在使用 WebMKS 控制台时都不存在。

用例

部署人员可以更容易地在 vSphere 之上部署 OpenStack,因为他们不需要修改 ESXi 主机上的防火墙配置。

由于驱动程序中不会分配任何端口,因此不会持有任何锁定,因此最终用户同时启动许多实例的速度会更快。

项目优先级

提议的变更

该提案是添加一个新的 API,该 API 将返回 WebMKS 连接信息,类似于我们为其他类型的控制台(如 VNC 和 RDP)返回连接信息的方式。给定实例的 WebMKS 连接信息如下

  • host - 相应的 vCenter 的主机名

  • port - 7331 或 7343,具体取决于 web socket 的类型 (ws 或 wss)

  • vmId - 虚拟机的 Managed Object ID

  • vmName - 虚拟机的名称

  • vcFQDN - vCenter Server 高级设置“VirtualCenter.FQDN”

  • sessionTicket - 使用 AcquireCloneTicket API 获取的会话票证

  • thumbprint - vCenter Server SHA1 SSL 指纹

备选方案

对于运行在 VMware 上的实例,已经存在另一种替代方案,即 VNC 控制台。我们将继续支持此方案。

数据模型影响

REST API 影响

我们将利用新的 v2.1 API 来获取控制台访问权限

示例请求

POST /servers/<uuid>/console
{
    "protocol": "mks"
    "type": "webmks"
}

示例响应

200 OK
{
    "protocol": "mks",
    "url": "http://example.com:6090/?token=c88be357-0992-40e8-8dd7-afc918ad34d5"
}

更新后的 JSON 模式如下

{
    'type': 'object',
    'properties': {
        'protocol': {
            'enum': ['vnc', 'spice', 'rdp', 'serial', 'mks'],
        },
        'type': {
            'enum': ['novnc', 'xvpvnc', 'rdp-html5',
                     'spice-html5', 'serial', 'webmks'],
        },
    },
    'required': ['protocol', 'type'],
    'additionalProperties': False,
}

响应中的 URL 指向一个 WebMKS 代理,该代理通过调用 nova-consoleauth 来授权给定的 token,然后开始在客户端和运行实例的相应 vCenter 服务器之间进行代理。

安全影响

我们将使用与其它类型控制台相同的安全模型,即利用 nova-consoleauth 来授权计算节点生成的 token。

通知影响

其他最终用户影响

性能影响

如果 VMware 驱动程序配置为仅提供 WebMKS 控制台,它将表现更好,因为它不需要分配任何 VNC 端口(分配 VNC 端口需要进行 vCenter 查询,同时持有锁定)。

其他部署者影响

WebMKS 控制台需要部署 WebMKS 代理(类似于 nova-novncproxy),该代理会将计算服务用户连接到提供对给定虚拟机的控制台访问权限的相应 vCenter。

将有一个新的配置选项,用于指定 WebMKS 代理的基本 URL(例如 webmks_proxy_base_url)。

开发人员影响

实现

负责人

主要负责人

rgerganov

工作项

实现可以分为两个部分

  • 将新的 API 添加到计算管理器和 virt 驱动程序接口

  • 在 VMware 驱动程序中实现新的 API

依赖项

blueprint: consolidate-console-api

测试

由于这是一个 VMware 特定的功能,VMware NSX CI 将更新以运行测试,以测试此功能。

文档影响

需要更新 Nova 文档中关于 VMware 的部分,说明支持两种类型的控制台(VNC 和 WebMKS),并且如果部署人员只想提供 WebMKS,则无需修改防火墙配置。

参考资料