You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 20:12:37