OpenBMC:Redfish 管理接口

📅 2026/7/6 14:18:02
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被管理的主机系统ManagerBMC 管理控制器Chassis机箱和硬件承载对象Sensor传感器LogService日志服务AccountService账户服务SessionService会话服务UpdateService固件更新服务这些资源共同组成服务器的管理视图。2.2 URIRedfish 使用 URI 定位资源。Redfish 的根入口通常是/redfish/v1/客户端可以从这个入口开始发现系统支持哪些资源再继续访问 Systems、Managers、Chassis、UpdateService 等集合。例如/redfish/v1/Systems/redfish/v1/Managers/redfish/v1/Chassis/redfish/v1/AccountService/redfish/v1/UpdateServiceURI 的好处是资源路径清晰外部平台可以按标准路径发现和访问服务器管理能力。2.3 HTTP 方法Redfish 使用 HTTP 方法表达操作语义。常见方法包括GET 查询资源状态PATCH 修改资源属性POST 创建资源或执行动作DELETE 删除资源例如查询传感器数据使用 GET修改 BMC 网络配置使用 PATCH执行主机重启使用 POST Action删除会话或账户使用 DELETE这样接口语义比传统命令式接口更直观。2.4 JSONRedfish 的响应通常是 JSON 格式。JSON 中不仅包含普通字段还会包含资源 ID、资源类型、状态、健康信息、关联链接和 Action 信息。例如一个资源可能包含{ odata.id: /redfish/v1/Systems/system, Id: system, Name: Computer System, PowerState: On, Status: { Health: OK, State: Enabled } }客户端可以直接解析这些字段并用于自动化管理。2.5 SchemaSchema 定义资源应该有哪些字段、字段类型是什么、哪些属性只读、哪些属性可写、某个 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 版权协议。本文仅用于学习交流。