图形化控制台支持

Bare Metal 服务支持显示来自多个硬件厂商的图形化控制台。

要使节点的图形化控制台可查看,需要满足以下先决条件

  • ironic-conductor 服务配置了适用于环境的控制台容器提供程序

  • ironic-novncproxy 服务已配置并正在运行

  • 节点的 console_interface 设置为图形化驱动程序,例如 redfish-graphical

启用并配置后,当直接与 Bare Metal 服务交互时,访问图形化控制台会发生以下序列

  • 发出 REST API 调用以启用控制台,例如通过 CLI 命令 baremetal node console enable

  • ironic-conductor 创建并存储与节点关联的限时令牌

  • ironic-conductor 触发启动一个容器,该容器运行虚拟 X11 显示器,启动一个 Web 浏览器,并暴露一个 VNC 服务器

  • 启用后,发出 REST API 调用以获取控制台 URL,例如通过 CLI 命令 baremetal node console show

  • 用户使用 Web 浏览器访问控制台 URL

  • ironic-novncproxy 将 NoVNC Web 资源提供给浏览器

  • 与 ironic-novncproxy 建立 WebSocket 连接,该连接查找节点并验证令牌

  • ironic-novncproxy 与控制台容器建立 VNC 连接,并在容器和浏览器之间代理 VNC 流量

  • 容器启动与节点 BMC Redfish 端点的连接,并确定要运行的厂商脚本

  • 容器发出 Redfish 调用并模拟浏览器用户以显示 HTML5 控制台,最终用户现在可以查看该控制台

构建控制台容器

tools/vnc-container 目录包含构建控制台容器的文件和说明。该目录将是进一步开发发生的地方,目前只能构建基于 CentOS Stream 的镜像。

容器提供程序

必须配置 ironic-conductor 以使用容器提供程序,以便它可以根据节点的控制台启用状态触发启动和停止控制台容器。考虑到 Ironic 的各种部署架构,需要配置合适的容器提供程序。

在许多情况下,这需要编写外部自定义容器提供程序,尤其是在 Ironic 本身部署在容器化环境中时。

Systemd 容器提供程序

包含的唯一功能性容器提供程序是 systemd 提供程序,它将容器作为 Systemd Quadlet 容器进行管理。当 Ironic 服务本身未容器化时,此提供程序适用,并且当 ironic-conductor 本身作为 Systemd 单元进行管理时,它也是一个不错的选择。

要启动容器,此提供程序会将 .container 文件写入 /etc/containers/systemd/users/{uid}/containers/systemd,然后调用 systemctl --user daemon-reload 以生成单元文件,然后使用 systemctl --user start {unit name} 启动该文件。

创建外部容器提供程序

外部 python 库可以通过继承 ironic.console.container.base.BaseConsoleContainer 然后将其添加到库的 setup.cfg [entry_points]ironic.console.container 中来贡献自己的容器提供程序。

start_container 方法必须返回结果运行 VNC 服务器的 IP 和端口,在大多数情况下,这意味着阻塞直到容器运行。

网络要求

ironic-novncproxy

与 ironic-api 一样,ironic-novncproxy 呈现一个公共端点。但是,与 ironic-api 不同,节点控制台 URL 与管理该节点的 ironic-conductor 相关联,因此在所有 ironic-novncproxy 实例上进行负载均衡是不合适的。

启用 TLS 的反向代理需要支持 WebSockets,否则可以在 ironic.conf [vnc] 部分中启用 TLS。

ironic-novncproxy 需要能够连接到控制台容器暴露的 VNC 服务器。

控制台容器

控制台容器暴露的 VNC 服务器未加密且未经过身份验证,因此必须通过其他网络配置机制限制公共访问。ironic-novncproxy 服务需要访问这些容器暴露的 VNC 服务器,当 Nova 使用 Ironic 驱动程序时,nova-novncproxy 也需要访问。

对于 systemd 容器,VNC 服务器将在一个随机的高端口号上发布。

控制台容器需要访问管理网络才能访问 BMC Web 界面。如果 driver_info redfish_verify_ca=False,则 Web 请求将不会被浏览器验证。将 redfish_verify_ca 设置为证书路径尚未被 systemd 容器提供程序支持,因为证书未被绑定挂载到容器中。可以通过构建包含预期证书文件的容器来在本地支持此功能。