当前位置: 首页 > news >正文

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 版权协议。本文仅用于学习交流。
http://www.jsqmd.com/news/1135230/

相关文章:

  • Unity 物理系统与 C# 脚本交互:3 种控制小球移动方案的性能与手感对比
  • 3种方法解决Navicat试用到期问题:Mac用户的终极重置指南
  • Windows系统文件autopilot.dll丢失找不到问题解决
  • 掌握Loop Engineering:让AI持续自主完成任务,小白程序员必备收藏指南!
  • 把 Claude Code auto memory 当成一套工程治理开关来看
  • 跨手机微信记录转移教程,再也不怕聊天记录清空避雷省钱向
  • WSA-Pacman:告别ADB命令,Windows安卓应用管理的革命性解决方案
  • Midscene.js:视觉驱动UI自动化,告别脆弱选择器
  • 新手跨境电商独立站搭建工具实测对比:BBWEYY/比文云/Framer/Prismic(2026年7月更新)含零代码SAAS、AI编程、源码定制交付
  • 基于DGN的电工基础-1
  • YOLOv11【第十章:前沿演进与跨界融合篇·第29节】元宇宙 YOLOv11 商业化落地全路径!
  • Scikit-learn 1.5.0 波士顿房价预测:7种回归模型R2对比与过拟合分析
  • 【VTG】T2SGrid: Temporal-to-Spatial Gridification for VTG
  • 3个技巧解决跨平台多媒体开发难题:SFML实战指南
  • 基于SGM62111和PIC18F57Q43的智能DC-DC降压电源设计
  • 05-服务端渲染与元框架——06. API Routes - 服务端 API
  • 洛谷 P3389:[模板] 高斯消元法 ← 高斯-约旦消元法(Gauss-Jordan Elimination)
  • 【RAG】RAG检索增强生成(上)——文档解析与向量数据库实战
  • 固定底座设计2
  • 一篇焦虑文案,ChatGPT 说还行,271 个 AI 用户却想点踩
  • 5分钟掌握抖音无水印下载:免费批量下载工具终极指南
  • 多设备传动改造:盖茨工业皮带的工程应用经验复盘
  • UC Berkeley | 只用单目RGB视频,就能搞定机器人灵巧动作?
  • ICM-42688-P与PIC24FV16KA302在工业自动化中的应用解析
  • 最新短视频素材分发系统源码 全开源版本
  • Claude Code CLI 权限模式的正确打开方式
  • Spring4Shell漏洞深度剖析:从数据绑定到RCE的完整攻击链复现
  • MC6470与PIC18F27J13的硬件协同与姿态控制实现
  • Java程序员转型AI开发:收藏这份实战指南,小白也能快速上手大模型
  • 【2026最新】LLM推理提速核心KV缓存原理详解,小白必收藏!