1个Jenkins 2个群集,第二个群集上的代理连接问题

问题描述

我正面临一个新问题,您可能很快也会遇到。如果可能,我需要一点帮助。我为此花费了将近2个工作周。

我有2种可能的解决方案。

上下文

我有2个名为FS和TC的Kubernetes集群。 我正在使用的Jenkins在TC上运行。

从服务器确实从TC Jenkins部署在FS中,但是FS中的从服务器无法连接到TC中的Jenkins主服务器。

从站利用需要HOST和PORT的TCP连接。但是,TC上公开的jnlp服务是HTTP(http:/jenkins-jnlp.tc.com/),它使用Nginx自动生成URL。

即使我使用

  • 主机:jenkins-jnlp.tc.com
  • 端口:80

它仍然会抱怨它正在获取串行数据而不是二进制数据。

The complaint

对于TC,我通过端口(50000)使用了本地jnlp服务HOST(jenkins-jnlp.svc.cluster.local)。这对于我们当前的TC环境非常有效。

解决方

解决方案#1

一个可能的解决方案将涉及在FS的从服务器和主服务器之间运行HTTP到TCP中继容器。然后将其链接到TC中的HTTP URL(http:/jenkins-jnlp.tc.com/),封装到TCP的HTTP连接(localhost:50000),反之亦然。

然后,FS上的从服务器可以使用从中间容器中暴露的TCP端口连接到TC主服务器。

Diagram to understand better

解决方案2

人们不断抱怨,最终有人在2020年2月20日左右对Jenkins进行了新功能。他们引入了Websocket,可以在HTTP上运行并将其转换为从站上的TCP。

我确实进行了设置,但是它似乎太新了,即使FS上的从站表示已连接,但它仍无法与我一起使用,但仍无法与TC上的Jenkins主机正确通信。仍然会看到代理/从机吊舱处于脱机状态。

这是我使用的链接

  1. Original post
  2. Update note on Jenkins
  3. Details on Jenkins WebSocket
  4. Jenkins inbound-agent github
  5. DockerHub jenkins-inbound-agent

结论

经过大量的摆弄,研究和摸索,我认为唯一的解决方案是解决方案#1。解决方案1的问题不存在,无法将HTTP封装到TCP并返回的简单工具或服务(据我所知,我搜索了几天)。这意味着,我得自己做一个

解决方案2仍然太新,从零到零的文档可以帮助我或使设置变得容易,并且似乎存在一些错误。似乎修复这些错误的唯一方法是同时修改Jenkins和jnlp代理的代码,我什至不知道从哪里开始。

更新#1

我已经完成了中间容器的代码。现在,我可以从HTTP到TCP下游,只需设置一个上游TCP到HTTP。

还要考虑运行单个中央docker容器以转换协议所需的多次踩踏次数。完成后,我想到将HTTP-to-TCP容器作为补充添加到Jenkins代理中。

这样,每当从属服务器在另一个群集中旋转时,它将自动能够连接,而我不必担心多个连接。那是理论,但是显然我想要结果,你们也想要。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)