K8s中Ironic独立模式升级至31.0.0后出现HTTP 503错误求助
问题描述
在K8s环境中使用Ironic独立模式,此前运行正常,从30.0.0版本升级至31.0.0后出现503服务不可用错误,错误日志如下:
2025-12-22 14:52:07.455 12 ERROR ironic.api.method [None req-1ddddfce-cd6e-454d-bc1e-1690581909d0 - - - - - -] Server-side error: "Service Unavailable (HTTP 503)". Detail: Traceback (most recent call last): File "/usr/local/lib/python3.11/dist-packages/ironic/api/method.py", line 42, in callfunction result = f(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/ironic/common/args.py", line 400, in wrapper return function(*args, **kwargs_next) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/ironic/api/controllers/v1/node.py", line 1311, in provision self._do_provision_action(rpc_node, target, configdrive, clean_steps, File "/usr/local/lib/python3.11/dist-packages/ironic/api/controllers/v1/node.py", line 1068, in _do_provision_action api.request.rpcapi.do_node_tear_down( File "/usr/local/lib/python3.11/dist-packages/ironic/conductor/rpcapi.py", line 525, in do_node_tear_down return cctxt.call(context, 'do_node_tear_down', node_id=node_id) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/ironic/common/json_rpc/client.py", line 160, in call return self._request(context, method, cast=False, version=version, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/ironic/common/json_rpc/client.py", line 217, in _request result = _get_session().post(url, json=body) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/keystoneauth1/adapter.py", line 612, in post return self.request(url, 'POST', **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/keystoneauth1/adapter.py", line 591, in request return self._request(url, method, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/keystoneauth1/adapter.py", line 293, in _request return self.session.request(url, method, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/keystoneauth1/session.py", line 1110, in request raise exceptions.from_response(resp, method, url) keystoneauth1.exceptions.http.ServiceUnavailable: Service Unavailable (HTTP 503) : keystoneauth1.exceptions.http.ServiceUnavailable: Service Unavailable (HTTP 503)
31.0.0版本强制使用json_rpc,此前已使用该方式且配置为noauth,Keystone模块已更新至最新版本,降级回30.0.0可正常运行,需排查思路。
调试排查思路
- 检查Ironic Conductor服务状态:在K8s中确认conductor pod是否正常运行、就绪,查看conductor日志是否有启动失败、连接错误等信息,比如是否存在json_rpc服务端口未正常监听的情况。
- 验证json_rpc端点配置:核对Ironic API和Conductor的配置文件中
rpc_transport是否设置为json-rpc,同时确认json_rpc_endpoint(API端)和json_rpc_listen_address(Conductor端)的地址、端口是否匹配,且在K8s集群内可正常通信(比如检查Service是否正确转发端口,Pod间网络是否连通)。 - 排查noauth模式的配置兼容性:31.0.0版本可能对noauth模式的配置项有变更,检查
auth_strategy是否明确设置为noauth,同时确认是否新增了与json_rpc无认证相关的配置项(比如json_rpc_auth_type是否设置为none),对比30.0.0和31.0.0的配置差异文档。 - 测试API到Conductor的连通性:在Ironic API的Pod内,直接curl Conductor的json_rpc端点(比如
curl -X POST http://<conductor-ip>:<port>/rpc),查看是否能正常响应,排除网络层面的连通问题。 - 检查Keystoneauth依赖版本匹配:虽然Keystone模块已更新,但确认keystoneauth1的版本是否与Ironic 31.0.0的要求完全兼容,可查看Ironic 31.0.0的requirements.txt文件,核对依赖版本是否一致,避免版本不匹配导致的认证逻辑异常。
- 开启更详细的日志:在Ironic API和Conductor的配置中,将日志级别调整为
DEBUG,重新触发操作,查看更详细的请求流转日志,特别是json_rpc请求的发送、接收过程,定位具体是请求未到达Conductor,还是Conductor处理时出错。
内容的提问来源于stack exchange,提问作者NicoW
相关产品推荐
相关产品推荐

