裸金属控制台访问
背景
裸金属的存在和虚拟机一样,都属于实例,但在dashboard中,虚拟机可以使用实例页面中的控制台页签直接访问,裸金属是不是也可以呢?
官方文档
以Ocata版本为例:
https://docs.openstack.org/ironic/ocata/deploy/console.html
主要支持2种控制台,一个是web控制台,一个是高级控制台:
- web控制台底层采用shellinabox软件,在ironic-conductor所在节点上开启端口转发,将ipmi控制台的tcp连接直接转发到web服务,因此最后以https://ip:port的形式呈现
- 高级控制台底层采用socat,将ipmi控制台的tcp连接转发出来,url格式为tcp://ip:port,nova有相应的组件来转发到dashboard上
详细
web控制台
Queens版本,dashboard增加了对shellinabox控制台的支持,不过目前还没时间测试。

安装shellinabox
yum install shellinabox -y
注意,shellinabox包是在epel源中的。
如果无法访问epel源,可以在此处下载
更改ironic.conf配置
vi /etc/ironic/ironic.conf
[pxe]
pxe_append_params = nofb nomodeset vga=normal console=ttyS0,115200n8
更改裸金属节点配置
ironic node-update <node-uuid> add driver_info/<terminal_port>=<customized_port>
ironic node-set-console-mode <node-uuid> true
注:**<terminal_port>是根据驱动区分不同的终端端口,如ipmi_terminal_port等**
<customized_port>是被监听的端口,在ironic-conductor上开放,因此所有node的控制台端口不允许重复
获取裸金属节点的web控制台信息
ironic node-get-console <node-uuid>
+-----------------+----------------------------------------------------------------------+
| Property        | Value                                                                |
+-----------------+----------------------------------------------------------------------+
| console_enabled | True                                                                 |
| console_info    | {u'url': u'http://<url>:<customized_port>', u'type': u'shellinabox'} |
+-----------------+----------------------------------------------------------------------+
你可以打开上述url中的地址,就可以看到控制台页面了。
如果上述console_enabled值是False,console_info的值为空,则web控制台不可用。
高级控制台
在Queens版本之前,dashboard只对裸金属支持高级控制台的显示。

传递的tcp连接是单连接,其他访问会中断当前控制台的状态。
控制台下面的”Status: Open”就是当前控制台的状态,若被中断,会变成”Status: Closed”
只有少数几个driver支持socat,并且在driver名称上都有体现:
- agent_ipmitool_socat
- fake_ipmitool_socat
- pxe_ipmitool_socat
首先在ironic-conductor上安装socat
yum install socat -y
更改ironic.conf配置
vi /etc/ironic/ironic.conf
[pxe]
pxe_append_params = nofb nomodeset vga=normal console=ttyS0,115200n8
获取裸金属节点的web控制台信息
ironic node-get-console <node-uuid>
+-----------------+----------------------------------------------------------------------+
| Property        | Value                                                                |
+-----------------+----------------------------------------------------------------------+
| console_enabled | True                                                                 |
| console_info    | {u'url': u'tcp://<host>:<port>', u'type': u'socat'}                  |
+-----------------+----------------------------------------------------------------------+
如果上述console_enabled值是False,console_info的值为空,则高级控制台不可用。
安装openstack-nova-serialproxy
openstack-nova-serialproxy是nova为高级控制台作代理的组件
yum install openstack-nova-serialproxy -y
更改裸金属节点配置
ironic node-update <node-uuid> add driver_info/<terminal_port>=<customized_port>
ironic node-set-console-mode <node-uuid> true
注:**<terminal_port>是根据驱动区分不同的终端端口,如ipmi_terminal_port等**
<customized_port>是被监听的端口,在ironic-conductor上开放,因此所有node的控制台端口不允许重复
修改nova.conf
vi /etc/nova/nova.conf
[console]
allowed_origins = <nova-serialproxy所在主机的ip>
[serial_console]
enabled=True
base_url=ws://<ironic-conductor所在主机的ip>:6083/
proxyclient_address=<nova-serialproxy所在主机的ip>
重启nova所有服务
systemctl restart openstack-nova-*
 
