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控制器的启动参数里添加:
(在K8s的Deployment里修改Jenkins容器的command或args部分添加这些参数)-Djenkins.slaves.JnlpSlaveAgentProtocolHandler.disabledProtocols= -Djavax.net.ssl.enabledProtocols=TLSv1.2
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
相关产品推荐
相关产品推荐

