前几天给朋友科普服务器BMC,问了我一个问题:IPMI和Redfish是什么?正好周末学习学习:
当服务器操作系统崩溃,SSH无法连接,甚至BIOS都还没加载时,怎么远程控制呢?答案就是:带外管理(Out-of-Band Management)协议。而带外管理协议中最具代表性的两个就是: IPMI(Intelligent Platform Management Interface)和 Redfish(下一代标准,现代化、自动化友好)。搞BMC的朋友应该都知道IPMI和Redfish协议。个人认为简单理解就是硬件载体(BMC芯片)上运行软件(执行带外管理协议的程序)。
1. IPMI:经典带外协议
- 由英特尔于1998年牵头制定
- 提供了控制电源、风扇、温度、硬件日志、SOL(串口重定向)等基础功能
- 采用命令行方式通信,多通过 UDP 623 端口
- 常见工具:ipmitool
后来IPMI在2015年公布2.0 v1.1标准后,不再更新,被RedFish永久代替,Intel也宣布不再维护,号召大家转战RedFish。这是因为技术上IPMI相对来说安全性不高。而Redfish采用RESTful API + JSON格式,基于HTTPS,易于编程集成,支持更复杂的系统拓扑(如存储、网络),并具备更强的安全机制和可扩展性。
2. Redfish:为现代系统管理而生
- 由 DMTF(分布式管理任务组)于2014年发布
- 基于 RESTful API + JSON 设计理念
- 原生支持 HTTPS、OAuth、安全认证、HATEOAS 链接跳转
- 易于与 Web 系统、自动化平台(如 Ansible、Terraform)对接
Redfish 不是 IPMI 的简单替代,它是:
- 一种面向自动化、云平台、平台即服务(PaaS)设计的远程管理新范式
- 一种让带外管理融入现代 DevOps 流水线的解决方案
- 也是国产化服务器管理系统全面转向的主流方向
网上找了读取CPU温度为例:
IPMI方案(发送原始十六进制命令):需要通过raw命令向BMC发送一串十六进制的命令代码,其意义难以直接理解
ipmitool raw 0x04 0x2d
Redfish方案(访问明确资源路径):通过访问一个含义明确的URL路径/Thermal(热管理)来获取温度信息。
import requests
url = “https://10.0.0.11/redfish/v1/Chassis/1/Thermal”
r = requests.get(url, auth=(‘admin’, ‘password’), verify=False) # 解析JSON中的CPU温度读数
data = r.json()
cpu_temp = [s[“ReadingCelsius”] for s in data.get(“Temperatures”, []) if “CPU” in s[“Name”]]
print(cpu_temp)
看出IPMI的raw命令可读性差,而Redfish的API端点(如/Thermal)表意明确,开发维护都友好些。可以理解为IPMI 是基础,Redfish是未来。