【问题标题】:Jenkins JNLP slave with ELBJenkins JNLP 从机与 ELB
【发布时间】:2018-01-21 19:20:26
【问题描述】:

有没有办法将 JNLP 从端点与 ELB 集成?

每当我将 ELB 端点与侦听器端口 50000 连接到 EC2 实例 50000 时,我都会得到:

INFO: Connecting to app.ap-southeast-2.elb.amazonaws.com:50000
Aug 11, 2017 9:05:54 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Trying protocol: JNLP-connect
Aug 11, 2017 9:05:54 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Protocol JNLP-connect encountered an unexpected exception
java.util.concurrent.ExecutionException: org.jenkinsci.remoting.protocol.impl.ConnectionRefusalException: Server didn't accept the handshake: HTTP/1.1 400 BAD_REQUEST
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at hudson.remoting.Engine.innerRun(Engine.java:385)
    at hudson.remoting.Engine.run(Engine.java:287)
Caused by: org.jenkinsci.remoting.protocol.impl.ConnectionRefusalException: Server didn't accept the handshake: HTTP/1.1 400 BAD_REQUEST
    at org.jenkinsci.remoting.engine.JnlpProtocol1Handler.sendHandshake(JnlpProtocol1Handler.java:121)
    at org.jenkinsci.remoting.engine.LegacyJnlpProtocolHandler$2.call(LegacyJnlpProtocolHandler.java:162)
    at org.jenkinsci.remoting.engine.LegacyJnlpProtocolHandler$2.call(LegacyJnlpProtocolHandler.java:158)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at hudson.remoting.Engine$1$1.run(Engine.java:94)
    at java.lang.Thread.run(Thread.java:748)

Aug 11, 2017 9:05:54 AM hudson.remoting.jnlp.Main$CuiListener error
SEVERE: The server rejected the connection: None of the protocols were accepted
java.lang.Exception: The server rejected the connection: None of the protocols were accepted
    at hudson.remoting.Engine.onConnectionRejected(Engine.java:484)
    at hudson.remoting.Engine.innerRun(Engine.java:448)
    at hudson.remoting.Engine.run(Engine.java:287)

但是,当我将 JNLP 端点 URL 直接更改为 EC2 实例时,它可以正常工作,没有任何错误。

似乎 ELB 正在做一些 Jenkins 大师不接受的翻译。

有没有人通过 ELB 让 JNLP 连接从 Jenkins 从站工作到主站?

谢谢,

【问题讨论】:

  • 听起来你的ELB监听器处于HTTP模式,需要处于TCP模式。
  • @Michael-sqlbot 你是对的。请添加为答案:)

标签: amazon-web-services jenkins amazon-ec2 amazon-elb


【解决方案1】:

如果您想通过同一个负载均衡器发布所有服务(因此您可以只使用 1 个域名),您可以使用 Classic Load Balancer。有了它,您可以创建 2 个侦听器 --> 示例 1 https(使用 ACM ssl 证书)将流量代理/卸载到 Jenkins 端口 HTTP:8080 和其他 tcp:50000 将流量转发/桥接到后端服务器端口 50000。

【讨论】:

  • 很好的答案!这有助于解决我在 AWS 中完全不同的环境中遇到的问题!
  • 这正是我想要做的,但没有成功:(我可以在 https 上正确看到 jenkins,但代理无法连接。这让我觉得我已经正确配置了 https 侦听器。您能否为创建代理侦听器的虚拟操作提供详细的分步列表?我已经尝试了所有想到的组合,但很明显我仍然缺少一些东西。谢谢
  • @DanieleRicci 你找到解决方案了吗?和你一样,我发现这个答案不清楚。
  • 嗨@andolsizied,是的,我能够解决这个问题,但我不记得哪个是关键:(对不起。我记得答案非常接近我只是错过了一个解决方案单个细节。我检查了我的 ELB 以尝试记住,但我无法记住,所以很抱歉 :(
  • 嗨@DanieleRicci,我终于找到了解决方案,事实上我使用了不支持TCP或UDP服务的ingress-nginx控制器。出于这个原因,这个 Ingress 控制器使用标志 --tcp-services-configmap 和 --udp-services-configmap 来指向一个现有的配置映射,其中键是外部端口。 (更多细节在这里kubernetes.github.io/ingress-nginx/user-guide/…和实现docs.cloudbees.com/docs/cloudbees-ci/latest/cloud-setup-guide/…
猜你喜欢
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 2014-10-12
  • 2022-10-04
  • 2018-07-03
相关资源
最近更新 更多