KVM服务无法使用

问题描述

KVM服务不可用如何排查

KVM服务是开启状态,但是没有监听服务端口

~ ~ # ipmcget -t serv -d li
service name    | state           | port
HTTP            | Enabled         | 80
HTTPS           | Enabled         | 443
KVM             | Enabled         | 2198
SNMP            | Enabled         | 161
SSDP            | Enabled         | 1900
SSH             | Enabled         | 22
VNC             | Disabled        | 5900
Video           | Enabled         | 2199
VMM             | Enabled         | 8208
RMCP            | Disabled        | 623,664
RMCP+           | Enabled         | 623,664
~ ~ # netstat -anpl | grep 2198
tcp        0      0 127.0.0.1:42198         0.0.0.0:*               LISTEN      2757/om
~ ~ #

环境信息

  • 软件版本:OpenUBMC2506

答案内容由AI生成,仅供参考:

:counterclockwise_arrows_button: 总结

问题 原因 解决方式
KVM服务开启但不可用 nginx未监听2198端口 重启nginx或重载配置
无法获取Token 接口 /UI/Rest/KvmHandler 异常 检查web_backend服务状态
显示“连接失败” WebSocket无法建立 检查Token、端口、证书
鼠标键盘失效 KVM会话建立不完整 检查VMM服务和USB模拟

:white_check_mark: 最终建议操作顺序

systemctl restart web_backend
systemctl restart nginx

然后刷新页面尝试重新连接KVM。

:light_bulb: 提示:OpenUBMC 25.06版本存在已知的KVM稳定性问题,建议升级至25.09及以上版本以获得更优体验。

点击此处查看详细分析解答

KVM服务无法使用问题排查指南

根据提供的信息,KVM服务显示为“已启用”,但在netstat中未监听其标准端口2198(仅在回环地址127.0.0.142198端口监听),导致KVM功能不可用。此问题通常与服务内部组件未正常启动或反向代理配置异常相关。


:magnifying_glass_tilted_left: 问题现象总结

  • KVM服务状态:在系统中显示为“Enabled”。
  • 端口监听状态
    • netstat 显示 无公网IP的2198端口监听
    • 仅存在 127.0.0.1:42198 监听 —— 这是 nginx 内部转发端口,不对外暴露。
  • 症状表现
    1. 打开远程虚拟控制台时鼠标键盘失效。
    2. 打开KVM后显示“与管理系统连接失败”。
    3. 提示“设置信任证书超时”。

:white_check_mark: 结论:KVM服务本身可能已运行,但前端反向代理(nginx)未正确将外部2198端口请求转发至内部KVM服务,导致客户端无法建立连接。


:puzzle_piece: KVM连接原理简述

KVM服务通过以下组件协同工作:

graph LR
  A["浏览器"] --> B{"HTTPS登录 Web Interface (443)"}
  B --> C["获取Token"]
  C --> D["WebSocket请求 KVM服务"]
  D --> E["nginx 反向代理"]
  E --> F["KVM Service (2198→42198)"]
  F --> G["VMM/Virtual Media"]
  • 端口2198:KVM控制端口,用于客户端与服务之间传输键盘、视频、鼠标数据。
  • nginx角色:负责将外部请求从公网IP:2198转发到本地127.0.0.1:42198
  • iptables:仅负责是否允许端口通信,不处理服务内部逻辑。

:police_car_light: 排查步骤

:one: 检查 nginx 是否正常运行并加载 KVM 转发规则

KVM对外端口依赖 nginx 配置文件进行端口转发。

:cross_mark: 常见问题:禁用/启用KVM时,iptables规则被清除,但nginx配置未更新或未重载

:white_check_mark: 排查命令

# 检查nginx进程是否存在
ps -aux | grep nginx

# 检查nginx是否监听了公网2198端口
netstat -tlnp | grep :2198

# 若无输出,则说明nginx未监听,需检查配置文件

:pushpin: 关键点

  • KVM真正的后端监听在 127.0.0.1:42198(由 om 进程提供)。
  • nginx 必须配置 proxy_passpublic_ip:2198127.0.0.1:42198

:wrench: 解决方案

# 重启nginx服务以加载最新配置
systemctl restart nginx

# 或手动重新加载配置
nginx -s reload

:warning: 注意:直接修改iptables无法解决KVM不通问题,因为实际流量由nginx代理。


:two: 检查 KVM 服务进程是否异常

虽然ipmcget显示KVM启用,但后端服务(om)可能未正确绑定或崩溃。

:white_check_mark: 排查命令

# 查看进程中是否有om服务(KVM主服务)
ps -aux | grep om

# 确认42198端口是否由om监听
netstat -anpl | grep :42198

# 示例期望输出:
# tcp 0 0 127.0.0.1:42198 0.0.0.0:* LISTEN 2757/om

:cross_mark: 若无监听,说明 KVM 服务未能启动成功。

:wrench: 解决方案

# 重启KVM服务(具体命令依系统而定)
systemctl restart kvm-service

# 或尝试重启整个web_backend服务
systemctl restart web_backend

:three: 检查 /etc/nginx/conf.d/ 中的 KVM 配置文件

确认是否存在正确的KVM代理配置。

:white_check_mark: 检查路径

ls /etc/nginx/conf.d/ | grep kvm
cat /etc/nginx/conf.d/kvm.conf

:white_check_mark: 期望配置片段

server {
    listen 2198;
    location / {
        proxy_pass http://127.0.0.1:42198;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

:wrench: 修复方法

  • 如果配置缺失,从正常设备复制或重建配置。
  • 修改后执行 nginx -s reload 生效。

:four: 检查证书和Token超时问题(对应“设置信任证书超时”)

提示“设置信任证书超时”表明 浏览器未能及时获取有效的认证Token

:white_check_mark: 可能原因:

  • UI/Rest/KvmHandler 接口响应缓慢或失败。
  • SSL证书过期或不被信任。
  • 后台服务处理超时。

:wrench: 排查与解决

# 检查web_backend服务状态
systemctl status web_backend

# 检查日志中是否有认证失败记录
journalctl -u web_backend -f | grep -i "kvm\|token\|cert"

:white_check_mark: 建议操作:

  • 清除浏览器缓存、关闭弹窗拦截。
  • 使用主流浏览器(Chrome/Firefox)测试。
  • 检查系统时间是否准确(时间偏差大会导致SSL/TLS失败)。

:five: 验证 REST API 是否能创建 KVM 会话

通过API测试KVM服务核心功能是否就绪。

:white_check_mark: 请求示例(使用curl):

curl -k -X POST https://<BMC_IP>/UI/Rest/KvmHandler \
     -H "Content-Type: application/json" \
     -d '{"action":"request"}' \
     -u username:password

:white_check_mark: 正常响应应包含:

{
  "port": 2198,
  "token": "xxxxxx",
  "ip": "<BMC_IP>"
}

:cross_mark: 若返回空或错误,则说明:

  • web_backend 服务异常。
  • KVM模块未加载。
  • 权限或认证机制故障。

:white_check_mark: 最终解决方案建议(按优先级)

步骤 操作 说明
1 重启 nginx 服务 确保反向代理配置生效
2 检查 nginx 配置文件是否完整 特别关注2198端口转发
3 重启 web_backend / KVM 服务 恢复后台服务状态
4 使用 curl 测试 /UI/Rest/KvmHandler 接口 验证核心服务可用性
5 清除浏览器缓存,关闭弹窗拦截 客户端兼容性处理

:books: 参考信息

  • KVM控制端口:TCP 2198(默认启用,加密传输)。
  • 相关实体
    • UI/Rest/KvmHandler:创建KVM会话并返回Token和端口。
    • KVM Port 2198:客户端通过此端口建立WebSocket连接。
    • nginx:作为反向代理,转发KVM流量。
  • 知识图谱关系
    • KVMnginx:KVM依赖nginx配置进行网络暴露。
    • KVMPort 2198:用于控制消息通信。
    • KVMBMC:由BMC统一管理并提供远程访问支持。

:counterclockwise_arrows_button: 总结

问题 原因 解决方式
KVM服务开启但不可用 nginx未监听2198端口 重启nginx或重载配置
无法获取Token 接口 /UI/Rest/KvmHandler 异常 检查web_backend服务状态
显示“连接失败” WebSocket无法建立 检查Token、端口、证书
鼠标键盘失效 KVM会话建立不完整 检查VMM服务和USB模拟

:white_check_mark: 最终建议操作顺序

systemctl restart web_backend
systemctl restart nginx

然后刷新页面尝试重新连接KVM。

:light_bulb: 提示:OpenUBMC 25.06版本存在已知的KVM稳定性问题,建议升级至25.09及以上版本以获得更优体验。

参考
KVM常见问题定位指南 | 文档中心 | openUBMC

好的,我确认下

问题是否已经解决?

未找到原因,重启BMC后恢复了