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

如何解决Kubernetes步骤与Node Executor中的Connection Refused错误?

排查Rundeck Kubernetes步骤/Node Executor连接拒绝问题的思路和方案

我之前也碰到过几乎一模一样的情况——能正常看到K8s集群里的Pod,但一执行命令就报Connection refused,折腾了好一阵才搞定,给你分享几个实用的排查方向:

一、先确认Rundeck到K8s API Server的基础网络连通性

这是最常见的根源,毕竟所有K8s操作都要走API Server:

  • 直接登录到Rundeck所在的服务器或容器里,执行curl -v https://<你的K8s API Server地址>:<端口>,看看能不能正常建立TCP连接。如果返回Connection refused,那就是底层网络不通:
    • 检查你用的API Server地址是否正确:如果Rundeck在集群外,不能用ClusterIP,得用NodePort或者LoadBalancer的公网/内网地址
    • 排查防火墙、安全组或者集群的网络插件规则,确保Rundeck所在节点的IP能访问API Server的端口
    • 如果用域名访问API Server,顺便确认Rundeck环境里的DNS解析是否正常(可以用nslookup <API域名>测试)

二、验证Rundeck的K8s权限是否足够

能看Pod不代表能执行Pod命令,pods/exec是单独的权限:

  • 检查Rundeck绑定的ServiceAccount对应的ClusterRole,确保里面有针对pods/exec的创建权限,比如规则要包含:
    apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["create"]
    
  • 可以直接用这个ServiceAccount的token在Rundeck环境里执行kubectl exec <测试Pod名称> -n <命名空间> -- echo "test",如果也失败,那肯定是RBAC权限没配对,调整权限后再试

三、检查Node Executor的配置细节

有时候是配置里的小细节没注意到:

  • 命名空间和标签选择器:确认Node Executor配置的命名空间是否和目标Pod一致,标签选择器有没有写错,会不会选到了不在当前网络可达范围内的Pod
  • 命令格式:如果执行的是复杂命令,记得用/bin/sh -c "你的命令内容"的格式,直接写命令可能会被解析错误
  • 容器指定:如果Pod里有多个容器,有没有指定正确的容器名?默认会选第一个容器,但如果第一个容器没有shell(比如一些基础镜像),也可能触发类似错误(不过这里是连接拒绝,优先级稍低,但可以排查)

四、排查K8s集群的网络策略

如果集群开启了网络策略,可能会限制API Server转发exec请求:

  • 可以临时在目标Pod所在的命名空间里禁用所有网络策略,测试是否能正常执行命令。如果恢复正常,那就是网络策略阻止了请求,需要调整策略规则,允许API Server或者Rundeck的IP访问Pod的exec接口

五、确认版本兼容性

有时候版本不匹配也会导致奇怪的连接问题:

  • 查看Rundeck官方的版本兼容性说明,确认你用的Rundeck Community版本和K8s集群版本是否兼容,尤其是Kubernetes插件的版本
  • 如果版本差距较大,尝试升级Rundeck的Kubernetes插件到对应兼容版本

另外,强烈建议你去看Rundeck的详细日志(默认路径是/var/log/rundeck/rundeck.log),里面会有更具体的错误堆栈,比如是API调用时被拒绝,还是TCP连接根本没建立,这会帮你更快锁定问题。

内容的提问来源于stack exchange,提问作者Dominique Bourcier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:07:37