3.8 部署Web界面Horizon

摘要
本节主要介绍在 OpenStack 控制节点上部署和配置 Horizon 的完整过程。Horizon 负责为 OpenStack 提供一个 Web 前端的管理界面。

首先,我们需要在控制节点上安装 Horizon 相关的软件包。Horizon 的包名叫 openstack-dashboard

执行以下命令进行安装:

bash

yum install openstack-dashboard -y
提示
在执行安装命令前,请确保网络连接正常,并且已经配置好了 OpenStack 的软件源。

安装完成后,我们需要修改 Horizon 的核心配置文件 /etc/openstack-dashboard/local_settings

注意
修改配置文件之前,建议先备份原文件,以防修改出错导致服务无法启动。可以使用 cp /etc/openstack-dashboard/local_settings /etc/openstack-dashboard/local_settings.bak 进行备份。这个配置文件使用的是 Python 语法,修改时一定要注意代码的缩进格式(严格对齐)。

打开配置文件后,依次找到并修改以下配置项:

1. 指定控制节点主机名

OPENSTACK_HOST 修改为控制节点的主机名:

python

OPENSTACK_HOST = "controller"

2. 允许所有主机访问

为了能从浏览器访问到 Dashboard,需要允许所有的主机访问:

python

ALLOWED_HOSTS = ['*']

3. 配置缓存服务 (Memcached)

Horizon 需要使用 Memcached 来存储用户的会话信息(Session)。我们需要配置它连接控制节点上的 Memcached 服务:

python

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'controller:11211',
    }
}

4. 启用 Identity API v3

指定使用 Keystone 的 v3 版本 API 进行身份认证:

python

OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST

5. 启用多域支持

OpenStack 支持多域(Domain)管理,开启这个功能:

python

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

6. 配置各个组件的 API 版本

明确告诉 Horizon 其他 OpenStack 组件所使用的 API 版本:

python

OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 2,
}

7. 配置默认用户域

指定通过图形界面创建用户时,默认将用户分配到哪个域。设置为 Default 域:

python

OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"

8. 配置默认用户角色

指定通过图形界面创建用户时的默认角色。由于本实验的学生身份,将其设置为 student 角色:

python

OPENSTACK_KEYSTONE_DEFAULT_ROLE = "student"

9. 配置时区

将时区修改为中国上海时间:

python

TIME_ZONE = "Asia/Shanghai"

修改完配置文件后,我们需要重启 Web 服务(httpd)和缓存服务(memcached)来让刚刚的配置生效。

执行以下命令重启并查看服务状态:

bash

systemctl restart httpd memcached
systemctl status httpd memcached

现在,我们就可以在浏览器中访问 OpenStack 的管理界面了。

打开浏览器,在地址栏输入控制节点的 IP 地址加上 /dashboard 路径,例如:http://控制节点的IP/dashboard

正常情况下,你会看到如下的登录页面:

UBgi6n

实验成功
如果顺利看到了上面的登录界面,Horizon 部署就完成了!可以使用之前创建的管理员账号(域为 Default,用户名为 admin,密码为 admin)登录体验。