裸金属控制台访问
背景
裸金属的存在和虚拟机一样,都属于实例,但在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-*