紧急负载平衡

紧急负载平衡

这似乎与最近关闭的 #57143 非常相似。我们花了相当多的时间对其进行故障排除,但无法找到根本原因。我们曾使用 nginx,并将其替换为 elb,这两种情况都会导致以下相同的问题。请让我知道需要哪些额外的日志/信息以及将提供哪些信息。任何帮助/支持/指导都将不胜感激。

环境/设置

代理:OSX Mojave 10.14.5 Jenkins:Linux(Jenkins LTS 2.176.3)代理上的 Java:OpenJDK 运行时环境(AdoptOpenJDK)(build 1.8.0_212-b03)OpenJDK 64 位服务器 VM(AdoptOpenJDK)(build 25.212-b03,混合模式)

主服务器上的 Java:java.runtime.name OpenJDK 运行时环境 java.runtime.version 1.8.0_222-b10 java.version 1.8.0_222 java.vm.info 混合模式 java.vm.name OpenJDK 64 位服务器 VM


netcat 从从属设备转向主设备。$ nc -z jenkins.infrastructure.XXXXX.care 50000

连接到 jenkins.infrastructure.XXXXX.care 端口 50000 [tcp/*] 成功!

紧急负载平衡

kubectl -n 基础架构获取 svc 基础架构-nginx-ingress-内部控制器 LoadBalancer 100.66.210.45 internal-ab39ee254472111e9aa5b0a4f0f93d47-951468028.us-east-1.elb.amazonaws.com 80:30664/TCP,443:30937/TCP,50000:32123/TCP 166d

日志 2019 年 8 月 31 日下午 7:39:48 hudson.remoting.jnlp.Main createEngine

信息:设置代理:ICL-Slave

2019 年 8 月 31 日下午 7:39:48 hudson.remoting.jnlp.Main$CuiListener

信息:Jenkins 代理正在无头模式下运行。

2019 年 8 月 31 日下午 7:39:48 hudson.remoting.Engine startEngine

信息:使用远程版本:3.29

2019 年 8 月 31 日下午 7:39:48 org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir

信息:使用 /Users/vmccbuild/jenkins/remoting 作为远程工作目录

2019 年 8 月 31 日下午 7:39:48 hudson.remoting.jnlp.Main$CuiListener 状态

信息:定位服务器https://jenkins.infrastructure.xxxxx.care/

2019 年 8 月 31 日下午 7:39:48 org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver 解析

信息:远程服务器接受以下协议:[JNLP4-connect,Ping]

2019 年 8 月 31 日下午 7:39:48 hudson.remoting.jnlp.Main$CuiListener 状态

信息:代理发现成功

代理地址:jenkins.infrastructure.xxxxx.care

代理端口:50000

身份:6b:c4:c2:2b:ed:b7:da:bc:72:58:c8:83:dd:d0:67:46

2019 年 8 月 31 日下午 7:39:48 hudson.remoting.jnlp.Main$CuiListener 状态

信息:握手

2019 年 8 月 31 日下午 7:39:48 hudson.remoting.jnlp.Main$CuiListener 状态

信息:连接到 jenkins.infrastructure.xxxxx.care:50000

2019 年 8 月 31 日下午 7:39:49 hudson.remoting.jnlp.Main$CuiListener 状态

信息:尝试协议:JNLP4-connect

2019 年 8 月 31 日下午 7:39:59 hudson.remoting.jnlp.Main$CuiListener 状态

信息:协议 JNLP4-connect 遇到意外异常

java.util.concurrent.ExecutionException:org.jenkinsci.remoting.protocol.impl.ConnectionRefusalException:发送确认之前连接已关闭

在 org.jenkinsci.remoting.util.SettableFuture.get(SettableFuture.java:223)

在 hudson.remoting.Engine.innerRun(Engine.java:614)

在 hudson.remoting.Engine.run(Engine.java:474)

原因:org.jenkinsci.remoting.protocol.impl.ConnectionRefusalException:在发送确认之前连接已关闭

在 org.jenkinsci.remoting.protocol.impl.AckFilterLayer.onRecvClosed(AckFilterLayer.java:280)

在 org.jenkinsci.remoting.protocol.FilterLayer.abort(FilterLayer.java:164)

在 org.jenkinsci.remoting.protocol.impl.AckFilterLayer.access$000(AckFilterLayer.java:43)

在 org.jenkinsci.remoting.protocol.impl.AckFilterLayer$1.run(AckFilterLayer.java:176)

在 org.jenkinsci.remoting.protocol.IOHub$DelayedRunnable.run(IOHub.java:964)

在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

在 hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:93)

在 java.lang.Thread.run(Thread.java:748)

2019 年 8 月 31 日下午 7:39:59 hudson.remoting.jnlp.Main$CuiListener 状态

信息:连接到 jenkins.infrastructure.xxxxx.care:50000

2019 年 8 月 31 日下午 7:39:59 hudson.remoting.jnlp.Main$CuiListener 状态

信息:服务器报告协议 JNLP4-plaintext 不受支持,正在跳过

2019 年 8 月 31 日下午 7:39:59 hudson.remoting.jnlp.Main$CuiListener 状态

信息:服务器报告协议 JNLP3-connect 不受支持,正在跳过

2019 年 8 月 31 日下午 7:39:59 hudson.remoting.jnlp.Main$CuiListener 状态

信息:服务器报告协议 JNLP2-connect 不受支持,正在跳过

2019 年 8 月 31 日下午 7:39:59 hudson.remoting.jnlp.Main$CuiListener 状态

信息:服务器报告协议 JNLP-connect 不受支持,正在跳过

2019 年 8 月 31 日下午 7:39:59 hudson.remoting.jnlp.Main$CuiListener 错误

严重:服务器拒绝连接:不接受任何协议

java.lang.Exception:服务器拒绝连接:不接受任何协议

在 hudson.remoting.Engine.onConnectionRejected(Engine.java:682)

在 hudson.remoting.Engine.innerRun(Engine.java:639)

在 hudson.remoting.Engine.run(Engine.java:474)

答案1

这个问题的解决方案:通过 ELB 建立隧道,以便从/主连接。如何做到这一点?

转到 Jenkins Master → Nodes → → Advanced → Tunnel:ernal-aef67c013ca2d11e9b6ab02485d01370-111334679.us-west-1.elb.amazonaws.com:50000(以上理所当然地认为安全组/入站也已正确配置)

假设您已经将代理端口静态配置为 50000 - 怎么做?Jenkins -> 全局安全 -> 代理 -> 入站代理的 TCP 端口 -> 已修复:50000

答案2

仅供参考,以防万一有帮助——我刚刚在我的网站上进行了一次大诊断工作,一堆 Windows JNLP 代理在过去几天的某个时候停止工作,出现了同样的上述故障/错误。 

经过长时间的兔子追踪 - 在我的情况下,我发现问题最终是反向 DNS 解析停止工作(不相关的本地问题 - “它总是 DNS”,对吗?) - 但是无法反向解析连接客户端(Windows 框)导致 JNLP 服务器端断开连接。

只是想在这里添加这个,以防它可以帮助其他人在未来遇到类似的问题(如果碰巧相关的话)。

答案3

我在 NGINX 后面安装了 Jenkins(使用 https),问题是 Java 代理使用 TCP 进行通信,而不是 HTTPS。我尝试配置 NGINX 来执行SSL 直通但它对我不起作用。

最后,我最终创建了一个网络负载均衡器(AWS)并在 Jenkins 节点的高级配置中使用 DNS 名称,以便它使用此 LB 使用 TCP 而不是 HTTP 作为主要协议转到 Jenkins 服务器。

相关内容