OpenBMC:Redfish 管理接口
1. Redfish 是什么
Redfish 是面向现代服务器管理的标准接口。它基于 HTTPS、RESTful 风格和 JSON 数据格式,用统一的资源模型描述服务器、BMC、机箱、传感器、日志、账户、网络和固件更新等管理对象。
简单来说,Redfish 把服务器管理能力整理成了一套标准 Web API。
在传统服务器管理中,IPMI 使用较多,但 IPMI 以命令字和二进制数据为主,接口语义不够直观,扩展能力也有限。对于自动化运维平台来说,IPMI 更像是一组底层命令集合,而不是一套清晰的资源模型。
Redfish 的优势在于:
- 使用 HTTPS,便于安全访问
- 使用 RESTful API,接口语义清楚
- 使用 JSON,便于程序解析
- 使用标准资源模型,便于自动化平台集成
- 支持查询、配置、动作执行和事件管理
2. Redfish 的核心概念
理解 Redfish,主要需要掌握资源、URI、HTTP 方法、JSON 和 Schema 这几个概念。
2.1 资源
Redfish 把服务器管理对象抽象成资源。例如:
- System:被管理的主机系统
- Manager:BMC 管理控制器
- Chassis:机箱和硬件承载对象
- Sensor:传感器
- LogService:日志服务
- AccountService:账户服务
- SessionService:会话服务
- UpdateService:固件更新服务
这些资源共同组成服务器的管理视图。
2.2 URI
Redfish 使用 URI 定位资源。
Redfish 的根入口通常是:/redfish/v1/
客户端可以从这个入口开始发现系统支持哪些资源,再继续访问 Systems、Managers、Chassis、UpdateService 等集合。
例如:
/redfish/v1/Systems/redfish/v1/Managers/redfish/v1/Chassis/redfish/v1/AccountService/redfish/v1/UpdateService
URI 的好处是资源路径清晰,外部平台可以按标准路径发现和访问服务器管理能力。
2.3 HTTP 方法
Redfish 使用 HTTP 方法表达操作语义。
常见方法包括:
- GET 查询资源状态
- PATCH 修改资源属性
- POST 创建资源或执行动作
- DELETE 删除资源
例如:
- 查询传感器数据使用 GET
- 修改 BMC 网络配置使用 PATCH
- 执行主机重启使用 POST Action
- 删除会话或账户使用 DELETE
这样接口语义比传统命令式接口更直观。
2.4 JSON
Redfish 的响应通常是 JSON 格式。
JSON 中不仅包含普通字段,还会包含资源 ID、资源类型、状态、健康信息、关联链接和 Action 信息。
例如一个资源可能包含:
{ "@odata.id": "/redfish/v1/Systems/system", "Id": "system", "Name": "Computer System", "PowerState": "On", "Status": { "Health": "OK", "State": "Enabled" } }客户端可以直接解析这些字段,并用于自动化管理。
2.5 Schema
Schema 定义资源应该有哪些字段、字段类型是什么、哪些属性只读、哪些属性可写、某个 Action 需要什么参数。
因此 Redfish 不是简单“返回 JSON”,而是返回有标准结构和语义的 JSON。
这对自动化平台很重要,因为平台可以基于 Schema 理解不同资源的含义,而不是靠厂商私有文档猜字段。
3. Redfish 在 OpenBMC 中的作用
在 OpenBMC 中,Redfish 主要由 bmcweb 实现。
bmcweb 对外提供 HTTPS 和 Redfish API,对内通过 D-Bus 访问 OpenBMC 后端服务。
整体链路可以理解为:
外部客户端 ↓ HTTPS / Redfish ↓ bmcweb ↓ D-Bus ↓ OpenBMC 后端服务 ↓ 驱动 / 硬件这里要注意,bmcweb 不应该直接操作硬件。它主要负责:
- 接收 HTTP 请求
- 处理认证和会话
- 解析 Redfish URI
- 执行权限检查
- 把请求转换成 D-Bus 调用
- 把后端结果转换成 Redfish JSON 响应
真正的业务逻辑通常在后端服务中完成。例如传感器数据由传感器服务提供,网络配置由网络服务处理,固件升级由软件管理服务执行。
这种设计可以让 WebUI、Redfish、IPMI 和本地服务共享同一套后端状态,避免各自维护状态导致不一致。
4. 功能举例
4.1 查询传感器
传感器数据通常来自底层硬件,例如 I2C 温度芯片、PMBus 电源模块或风扇 tach 输入。
OpenBMC 中的典型链路是:
硬件传感器 ↓ 内核驱动 / hwmon ↓ dbus-sensors ↓ D-Bus 传感器对象 ↓ bmcweb ↓ Redfish Sensor 资源外部平台通过 Redfish 查询传感器时,不需要知道底层传感器挂在哪条 I2C 总线,也不需要知道 sysfs 路径。它只需要访问标准 Redfish 资源即可。
4.2 电源控制
远程开机、关机、重启是 Redfish 常见功能。
Redfish 通常通过 System 资源下的 Reset Action 表达电源动作。客户端发送 POST 请求,指定 ResetType,例如开机、关机、重启或电源循环。
大致流程如下:
客户端发送 Reset Action ↓ bmcweb 校验用户权限和参数 ↓ 调用 D-Bus 电源控制服务 ↓ 后端服务根据当前状态执行电源动作 ↓ 返回执行结果这种方式比直接暴露 GPIO 更安全,因为后端服务可以做状态判断、时序控制和错误处理。
4.3 修改网络配置
BMC 网络配置也可以通过 Redfish 管理。
例如修改 IP 地址、网关、DNS 时,客户端通常使用 PATCH 请求修改对应网络资源。
流程可以理解为:
Redfish PATCH 请求 ↓ bmcweb 解析参数 ↓ 调用 Network D-Bus 服务 ↓ 网络服务更新配置 ↓ systemd-networkd 或相关组件生效 ↓ Redfish 返回新的状态这样无论用户从 WebUI、Redfish 还是命令行查看网络配置,最终都应该看到同一套后端状态。
4.4 用户和会话管理
Redfish 提供 AccountService 和 SessionService,用于管理用户、角色、权限和登录会话。
常见能力包括:
- 创建会话
- 删除会话
- 查询用户
- 创建用户
- 修改密码
- 修改角色权限
这些操作涉及安全边界,因此必须经过认证、授权和审计。bmcweb 负责 Redfish 层面的接口处理,后端用户服务负责真正的用户管理。
4.5 固件更新
固件更新是 Redfish 中比较复杂的功能。
OpenBMC 中通常通过 UpdateService 组织固件更新流程。上传镜像后,后端软件管理服务会进行镜像解析、校验、版本对象创建和激活状态管理。
大致流程如下:
上传固件镜像 ↓ bmcweb 接收请求 ↓ 软件管理服务解析镜像 ↓ 创建版本对象 ↓ 触发 Activation 状态机 ↓ 执行刷写动作 ↓ 返回成功或失败状态固件升级涉及风险较高,因此不能简单理解为“接口收到文件后直接刷写”。它需要校验、状态机、日志、错误处理和必要的回滚机制。
5. 总结
Redfish 是现代服务器带外管理的重要接口标准。它使用 HTTPS、RESTful、JSON 和标准 Schema,把服务器管理能力组织成统一资源模型。
在 OpenBMC 中,Redfish 主要由 bmcweb 实现。bmcweb 对外提供 Redfish API,对内通过 D-Bus 连接传感器、电源、网络、用户、日志和固件升级等后端服务。
理解 Redfish,需要同时理解两层内容:一是 Redfish 标准如何定义资源、方法、动作和 Schema;二是 OpenBMC 如何把这些标准接口映射到底层 D-Bus 对象和后端服务。
对于服务器自动化运维来说,Redfish 的意义在于把复杂的 BMC 管理能力变成标准 Web API,使状态查询、配置修改、电源控制和固件升级都能被统一管理和自动化编排。
参考链接
- 本文为学习整理文章,部分内容参考自 CSDN 博文《OpenBMC之Redfish:现代服务器管理接口解析》。
- 原文链接:https://blog.csdn.net/weixin_49775784/article/details/162074457
- 原文遵循 CC 4.0 BY-SA 版权协议。本文仅用于学习交流。