摘要

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

实验架构
实验架构

环境准备

  1. 开启 VMnet1 和 VMnet8 网卡;
  2. 打开 controller 节点的虚拟化功能;
  3. 在 VMWare 中克隆 controller 虚拟机,新虚拟机命名为 compute;
  4. 打开 controller 和 compute 两台虚拟机(先controller后compute)。
# 在 controller 上执行
bash <(curl -s https://git.seahi.me/seahi/OpenStackScripts/raw/branch/main/env3-7-local-controller.sh) --prepare

# 在 compute 上执行
bash <(curl -s https://git.seahi.me/seahi/OpenStackScripts/raw/branch/main/env3-7-local-compute.sh)

# 在 controller 上执行
bash <(curl -s https://git.seahi.me/seahi/OpenStackScripts/raw/branch/main/env3-7-local-controller.sh) --finalize

一、安装 Horizon 软件包

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

执行以下命令进行安装:

yum install openstack-dashboard -y

二、修改配置文件

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

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

1. 指定控制节点主机名

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

OPENSTACK_HOST = "controller"

2. 允许所有主机访问

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

ALLOWED_HOSTS = ['*']

3. 配置缓存服务 (Memcached)

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

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 进行身份认证:

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

5. 启用多域支持

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

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

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

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

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

7. 配置默认用户域

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

OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"

8. 配置默认用户角色

通过 Horizon 将用户加入项目时,需要为用户分配相应的角色。本实验将默认角色设置为 user。

首先,在控制节点上配置管理员环境变量(与部署 Keystone 时相同),然后查看当前已有的角色:

openstack role list

如果列表中没有 user 角色,需要先创建:

openstack role create user

最后,在 /etc/openstack-dashboard/local_settings 文件中,将默认角色修改为 user:

OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
提示

这里填写的角色必须已经在 Keystone 中存在。修改默认角色不会改变已有用户的角色,也不会影响之前创建的 admin 管理员账号登录。

9. 配置时区

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

TIME_ZONE = "Asia/Shanghai"

10. 检查 Apache 配置

Horizon 通过 Apache HTTP 服务运行。为了避免部分 Python 扩展库在运行时出现兼容性问题,我们需要检查 Apache 的相关配置。

打开 /etc/httpd/conf.d/openstack-dashboard.conf 文件,检查是否包含以下配置。如果没有,则添加;如果已经存在,则不需要重复添加:

WSGIApplicationGroup %{GLOBAL}
提示

这项配置让 Horizon 使用处理请求的进程中的 Python 主解释器运行。修改后,需要重启 httpd 服务才能生效,具体命令见下一步。

三、重启服务并使其生效

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

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

systemctl restart httpd memcached
systemctl status httpd memcached

四、验证图形界面访问

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

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

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

登录页面
登录页面

实验成功

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