图形化控制台支持¶
Bare Metal 服务支持显示来自多个硬件厂商的图形化控制台。
要使节点的图形化控制台可查看,需要满足以下先决条件
ironic-conductor 服务配置了适用于环境的控制台容器提供程序
ironic-novncproxy 服务已配置并正在运行
节点的
console_interface设置为图形化驱动程序,例如redfish-graphical
启用并配置后,当直接与 Bare Metal 服务交互时,访问图形化控制台会发生以下序列
发出 REST API 调用以启用控制台,例如通过 CLI 命令
baremetal node console enableironic-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 容器提供程序支持,因为证书未被绑定挂载到容器中。可以通过构建包含预期证书文件的容器来在本地支持此功能。