服务器BMC-IPMI和Redfish协议

    前几天给朋友科普服务器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

format,webp

   后来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 的全部功能,还支持 KVM、远程 BIOS、ISO 挂载、固件管理等现代运维需求。Redfish 是“现代 Web API 化” 的设计,而 IPMI 是“低层二进制协议”思想。

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是未来。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注