裸金属控制台访问

作者 Billy 日期 2018-03-12
裸金属控制台访问

裸金属控制台访问

背景

裸金属的存在和虚拟机一样,都属于实例,但在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控制台的支持,不过目前还没时间测试。

web console by 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只对裸金属支持高级控制台的显示。

serial console on 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-*