Nova 兼容的串口控制台¶
https://bugs.launchpad.net/ironic/+bug/1553083
此方案使用“socat”实现控制台接口,从而提供 Nova 兼容的串口控制台功能。
问题描述¶
目前,Ironic 的唯一控制台接口基于 shellinabox,它提供了一个独立的 Web 控制台,并且与 nova-serialproxy 不兼容。
提议的变更¶
为了解决没有与 Nova 兼容的串口控制台的问题,此规范建议使用命令行工具 socat [1] 结合 IPMI Serial-Over-Lan 功能。socat 是一个基于命令行的实用程序,它建立两个双向字节流并在它们之间传输数据。此应用程序允许我们激活 ipmitool Serial-over-LAN 进程并通过 TCP 连接重定向它,然后该连接可以被 nova-serialproxy 服务消费。
每个控制台(socat + ipmitool)将在同一主机上运行自己的进程,该主机当前正在管理该节点的 ironic-conductor 正在运行。socat 将首先运行,然后在从 nova-serialproxy 收到连接后执行 ipmitool,并充当它们之间的 桥接。
ironic-conductor 进程的启动/停止¶
当 ironic-conductor 启动时,如果节点的控制台模式为 true,则启动 socat。
当 ironic-conductor 停止时,如果控制台已启动,则停止它。
关于接管工作,我们正在计划
当 ironic-conductor 停止时,由于安全原因,控制台会话将被停止。在这种情况下,如果有其他 ironic-conductors,它们将接管节点并再次启用它们的控制台会话。
当 ironic-conductor 启动时,如果有启用了控制台的节点,则 ironic-conductor 将启动它们的控制台。
控制台的启动/停止将使用 subprocess.Popen 实现。
关于启动/停止 socat,我们计划实现一个新的控制台接口 IPMISocatConsole 并实现与 shellinabox 类相同的方法。关于此,讨论在:[2]。
关于重新连接,例如,在使用 Horizon 时出现临时网络问题,将显示“已关闭”消息。并且 socat 本身支持客户端侧的会话重新连接,因此,当网络问题解决后,用户可以尝试重新连接。
指定使用 shellinabox 还是 socat¶
我们计划通过设置驱动程序(例如 pxe_ipmitool_socat 或 agent_ipmitool_socat)来指定使用哪个驱动程序 shellinabox 或 socat。(请参阅 其他 部署器 影响 部分。)
备选方案¶
不将新的 ConsoleInterface 添加到 ironic-conductor,而是创建一个新的服务“ironic-xxx”。新服务的优点是可以独立扩展,并且对 conductor 故障转移没有影响。但是,它也需要自己的 HA 模型,并且对开发人员来说会更多的工作(API、DB、驱动程序……)。
数据模型影响¶
无
状态机影响¶
无
REST API 影响¶
“GET /v1/nodes/<UUID>/states/console”的响应体包含如下 JSON 对象
{
"console_enabled": true,
"console_info": {
"url": <url>,
"type": <type>
}
}
在使用的 socat 而不是 shellinabox 的情况下,<type> 将为“socat”,<url> 类似于“tcp://<host>:<port>”。
客户端 (CLI) 影响¶
无
RPC API 影响¶
无
驱动程序 API 影响¶
无
Nova 驱动程序影响¶
get_serial_console() 将在 Nova 的 ironic 驱动程序中实现。它返回一个字典,类似于 nova.virt.libvirt.driver.LibvirtDriver.get_serial_console()。对 Nova 没有其他影响,nova-serialproxy 可以很好地与新的驱动程序配合使用。并且,Nova 也同意了 Nova 方面的这项工作 [3]。
Ramdisk 影响¶
无
安全影响¶
nova-serialproxy 和 socat 之间的连接是基于 TCP 的,就像 KVM 一样。Socat 支持 OpenSSL 连接,因此我们可以在未来提高安全性。
其他最终用户影响¶
无
可扩展性影响¶
如果一个 conductor 可以服务 1000 个节点,并且为每个节点创建一个进程,但它与 shellinabox 相同的问题。
性能影响¶
无
其他部署者影响¶
要使用 socat 串口控制台,部署程序需要指定新的驱动程序。例如,要使用 PXE + IPMItool + socat,请指定 pxe_ipmitool_socat。要使用 IPA + IPMItool + socat,请指定 agent_ipmitool_socat。要使用现有的 shellinabox 控制台,部署程序无需更改任何内容。新的控制台接口 IPMISocatConsole 将由两个新的驱动程序支持:pxe_ipmitool_socat 和 agent_ipmitool_socat。在 驱动程序 组合 重构 [4] 实现后,此功能将适用于更多的驱动程序(或硬件类型)。
关于配置选项,现有的选项 terminal_pid_dir、subprocess_checking_interval、subprocess_timeout 以与 shellinabox 相同的方式对 socat 可用。terminal_cert_dir 在 socat 的情况下不使用,因为不支持 SSL。terminal 在 socat 的情况下不使用,因为代码中使用了硬编码的 socat,并且不需要绝对路径,因为它特定于发行版,例如在 Ubuntu 中是 /usr/bin/socat,但在其他发行版中可能不同。
开发人员影响¶
无
实现¶
负责人¶
主要负责人
Akira Yoshiyama <akirayoshiyama@gmail.com>
其他贡献者
Dao Cong Tien <tiendc@vn.fujitsu.com>
Nguyen Tuong Thanh <thanhnt@vn.fujitsu.com>
Cao Xuan Hoang<hoangcx@vn.fujitsu.com >
Hironori Shiina <shiina.hironori@jp.fujitsu.com>
Yuiko Takada Mori <y-mori@ti.jp.nec.com>
工作项¶
实现
IPMISocatConsole和NativeIPMISocatConsole类,从base.ConsoleInterface继承。
依赖项¶
无
测试¶
将添加单元测试。
升级和向后兼容性¶
无
文档影响¶
将配置描述添加到安装指南中。