OpenStack Horizon Web界面概念
OpenStack Horizon Web界面概念 🖥️
Horizon 是 OpenStack 平台的官方 Web 管理界面组件(Dashboard),基于 Django 框架构建,为管理员和租户用户提供图形化的云资源管理入口,无需记忆命令行即可完成绝大部分日常操作🚀。
核心设计理念:将底层各 OpenStack 组件的 API 调用封装为直观的 Web 操作界面,降低使用门槛,提升运维效率。
一、核心架构
Horizon 采用 Django MTV(Model-Template-View)架构模式🏗️:
| 层级 | 组件 | 说明 |
|---|---|---|
| API 层 | openstack_dashboard/api/ |
封装对各 OpenStack 组件的 REST 调用 |
| 视图层 | openstack_dashboard/views |
处理请求逻辑与数据上下文 |
| 模板层 | openstack_dashboard/templates/ |
Django 模板引擎,渲染 Web 页面 |
| 静态资源层 | openstack_dashboard/static/ |
CSS / JS / 图片等前端资源 |
| 配置层 | openstack_dashboard/settings.py |
全局配置、功能开关、后端对接 |
通信架构
浏览器(用户) ➔ Apache/nginx(WSGI) ➔ Horizon(Django App)
➔ REST API ➔ Keystone(认证) / Nova(计算) / Neutron(网络)
➔ Cinder(存储) / Glance(镜像) / Swift(对象存储)
二、界面结构
1. Dashboard(仪表板)与 Panel(面板)
Horizon 的界面按用户角色划分为两大 Dashboard📊:
| Dashboard | 适用对象 | 主要面板 |
|---|---|---|
| Admin | 云管理员 | 项目/用户/镜像/网络/卷/实例/服务/配额管理 |
| Project | 普通租户 | 实例/卷/网络/安全组/密钥对/镜像/负载均衡 |
2. UI 核心组件
Horizon 提供多种标准 UI 组件,确保界面一致性与可扩展性🎨:
- DataTables(数据表):展示资源列表,支持排序、过滤、分页、批量操作
- Tabs & TabGroups(标签页):将关联数据分组展示(如实例详情/控制台/日志)
- Workflows(工作流):多步骤导向型操作,如创建实例(选择镜像 ➔ 选择规格 ➔ 网络配置 ➔ 确认)
- Forms(表单):参数填写与配置提交
- Wizards(向导):复杂操作的引导式流程
3. 用户设置
用户可在设置面板中个性化配置⚙️:
- 时区选择(Timezone):控制时间显示
- 语言偏好(Language):支持多语言切换
- 页面大小(Items Per Page):列表每页显示条目数
- HTTP 日志(Logs):查看 API 调用历史
三、核心功能
1. 计算管理(Nova)💻
| 功能 | 操作说明 |
|---|---|
| 实例生命周期 | 创建/启动/停止/软硬重启/删除实例 |
| 实例控制台 | 通过 VNC/SPICE 在浏览器内访问 |
| 实例快照 | 基于运行中实例创建镜像 |
| 规格管理 | 查看和管理 Flavor 配置 |
| 密钥对管理 | SSH 密钥对的导入/创建/删除 |
2. 网络管理(Neutron)🌐
| 功能 | 操作说明 |
|---|---|
| 网络创建 | 创建 Provider / Self-Service 网络 |
| 子网管理 | 配置 CIDR / DHCP 启用/网关设置 |
| 路由器管理 | 创建路由器、添加接口、设置外部网关 |
| 浮动 IP 管理 | 绑定/解绑浮动 IP |
| 安全组规则 | 自定义入站/出站规则 |
| 负载均衡 | 创建监听器、后端池、健康检查 |
3. 存储管理(Cinder/Glance/Swift)💾
| 功能 | 操作说明 |
|---|---|
| 卷管理 | 创建/挂载/卸载/扩展/删除卷 |
| 卷快照 | 创建/删除快照,从快照创建新卷 |
| 镜像管理 | 上传/下载/编辑/删除/共享镜像 |
| 对象存储 | 容器创建、对象上传/下载(Swift) |
4. 项目与用户管理(Keystone)👥
| 功能 | 操作说明 |
|---|---|
| 项目管理 | 创建/编辑/禁用/删除项目 |
| 用户管理 | 创建/编辑/启用/禁用/删除用户 |
| 角色分配 | 为用户分配项目角色 |
| 配额管理 | 设置项目级别计算/存储/网络资源配额 |
四、扩展与定制 🔧
Horizon 支持丰富的定制与扩展能力:
1. Dashboard 注册机制
开发者的自定义功能通过 Django dashboard.py 文件注册到 Horizon:
# 将自定义面板注册到 Dashboard
dashboard.default_panels.append('MyCustomPanel')
2. 主题与品牌定制
- 修改
openstack_dashboard/settings.py中的AVAILABLE_THEMES切换主题 - 支持自定义 Logo、品牌色、页脚、样式表
- 内置 Bootstrap 主题引擎,支持响应式布局
3. 功能模块扩展
- 采用 Django App 机制,各功能独立模块化
- Panel(面板)是基本功能单元,可自由增删
- 支持第三方插件(如 Heat / Mistral / Sahara 等扩展组件)
4. 常见扩展方式
| 扩展方式 | 说明 |
|---|---|
| 继承重写 | 继承 Horizon 基类,覆盖默认视图/模板 |
| 插件注册 | 通过 horizon.py 注册自定义 Dashboard/Panel |
| 模板覆写 | 利用 Django 模板继承机制替换默认模板 |
| 静态资源 | 在 static/ 目录添加自定义 JS/CSS/图片 |
五、部署模式
| 模式 | 说明 |
|---|---|
| 单节点 | Horizon 与控制节点部署在一起,测试/POCC |
| 多节点 + HA | Horizon 独立部署,前端 + Apache 集群 |
| 容器化部署 | 通过 Kolla-Ansible 以容器方式运行 |
| HTTPS + SSO | 配置 SSL 证书 + LDAP / SAML 认证集成 |
生产环境部署建议⚠️
# 安装 Horizon
apt install openstack-dashboard
# 配置 Apache
a2ensite 000-default
systemctl restart apache2
# HTTPS 配置(签发有效期检查)
openstack-config --set /etc/openstack-dashboard/local_settings.py DEFAULT_ENABLE_HTTPS True
六、监控与排查
| 问题 | 排查方法 |
|---|---|
| 页面加载失败 | 检查 Apache/nginx 状态:systemctl status apache2 |
| API 调用报错 | 查看 /var/log/horizon/horizon.log |
| 登录失败 | 检查 Keystone 服务状态及网络连通性 |
| 界面显示异常 | 浏览器 F12 查看 Console/Network 错误 |
| 静态资源加载失败 | python manage.py collectstatic 重新收集静态文件 |
七、Horizon SDN 管理思想
Horizon 的核心设计哲学:通过抽象化资源视图,屏蔽底层组件差异。
| 传统操作方式 | Horizon 实现 |
|---|---|
| 命令行管理各组件 | 统一 Web 界面,跨组件集成 |
| 手动记录资源信息 | DataTables 实时展示资源状态 |
| 手工处理多步骤操作 | Workflows 引导式流程 |
| 逐组件排查问题 | 集成式资源拓扑与日志视图 |
关键技术注解 💡
- Django MTV 架构: Horizon 的基础框架,Model(数据模型)→ Template(模板渲染)→ View(业务逻辑处理)
- REST API 封装: Horizon 内部通过
python-openstackclient和各组件 SDK 与后端服务通信,用户操作最终转化为 API 调用 - Workflows 工作流: Horizon 独创的多步骤操作模式,将创建实例等复杂操作分解为有引导的步骤,每步可独立验证
- Panel 面板机制: 最细粒度的功能单元,支持按角色/权限动态加载显示,实现功能级 RBAC 控制
0