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

Jenkins控制器连接异常:协议未被接受问题排查求助

解决Jenkins代理节点连接失败:None of the protocols were accepted

我之前碰到过几乎一模一样的问题,结合你的环境(K8s运行的jenkinsci/blueocean:1.5.0、EC2 Ubuntu节点+Java 1.8.0_171),这个错误:

java.lang.Exception: The server rejected the connection: None of the protocols were accepted:

基本是两端SSL/TLS协议不兼容导致的,给你几个具体的排查和解决方向:

1. 调整Jenkins控制器的代理协议配置

你的Jenkins镜像版本比较老(blueocean 1.5.0对应Jenkins核心大概是2.107.x版本),而Java 8u171默认的安全协议设置和老版本Jenkins可能不匹配:

  • 登录Jenkins管理界面,进入「全局安全配置」
  • 找到「代理」板块,确认已勾选「启用TCP端口代理」
  • 点击「高级」,检查「代理协议」设置,确保包含TLSv1.2(Java 8u171默认启用的主流协议)
  • 如果还是不行,尝试在Jenkins控制器的启动参数里添加:
    -Djenkins.slaves.JnlpSlaveAgentProtocolHandler.disabledProtocols=
    -Djavax.net.ssl.enabledProtocols=TLSv1.2
    
    (在K8s的Deployment里修改Jenkins容器的command或args部分添加这些参数)

2. 强制代理节点Java使用兼容协议

在EC2节点执行代理启动命令时,手动指定Java启用的TLS协议,覆盖默认配置:

java -Djavax.net.ssl.enabledProtocols=TLSv1.2 -jar slave.jar -jnlpUrl http://<你的Jenkins地址>/computer/<节点名称>/slave-agent.jnlp -secret <你的节点密钥>

如果还是失败,可以尝试同时启用旧版本协议测试(仅用于排查):

java -Djavax.net.ssl.enabledProtocols=TLSv1,TLSv1.1,TLSv1.2 -jar slave.jar ...

3. 检查Java安全配置文件

打开EC2节点的Java安全配置文件$JAVA_HOME/jre/lib/security/java.security,查找jdk.tls.disabledAlgorithms配置项:

  • 如果里面包含TLSv1或TLSv1.1,而你的Jenkins控制器仅支持这些旧协议,临时注释掉这些条目,然后重启代理命令测试
  • 测试完成后记得恢复配置,避免安全风险

4. 验证Kubernetes端口转发配置

虽然telnet能连通,但要确认Jenkins的Jnlp代理端口(默认50000)在K8s中正确暴露:

  • 检查Jenkins的Service资源,确保50000端口以TCP类型暴露(NodePort/LoadBalancer/ClusterIP,根据你的访问方式)
  • 确认EC2节点的安全组允许访问该端口,K8s节点的防火墙也没有拦截TCP流量

临时应急方案

如果以上配置都无法快速生效,可以尝试:

  • 降级EC2节点的Java版本到8u161或更早(这些版本的安全协议限制更宽松)
  • 升级Jenkins镜像到较新的blueocean版本(比如2.x系列),新版本Jenkins对现代TLS协议的支持更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:45:14