我正面临一个新问题,您可能很快也会遇到。如果可能,我需要一点帮助。我为此花费了将近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。
即使我使用
它仍然会抱怨它正在获取串行数据而不是二进制数据。
对于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主服务器。
解决方案2
人们不断抱怨,最终有人在2020年2月20日左右对Jenkins进行了新功能。他们引入了Websocket,可以在HTTP上运行并将其转换为从站上的TCP。
我确实进行了设置,但是它似乎太新了,即使FS上的从站表示已连接,但它仍无法与我一起使用,但仍无法与TC上的Jenkins主机正确通信。仍然会看到代理/从机吊舱处于脱机状态。
这是我使用的链接
结论
经过大量的摆弄,研究和摸索,我认为唯一的解决方案是解决方案#1。解决方案1的问题不存在,无法将HTTP封装到TCP并返回的简单工具或服务(据我所知,我搜索了几天)。这意味着,我得自己做一个。
解决方案2仍然太新,从零到零的文档可以帮助我或使设置变得容易,并且似乎存在一些错误。似乎修复这些错误的唯一方法是同时修改Jenkins和jnlp代理的代码,我什至不知道从哪里开始。
更新#1
我已经完成了中间容器的代码。现在,我可以从HTTP到TCP下游,只需设置一个上游TCP到HTTP。
还要考虑运行单个中央docker容器以转换协议所需的多次踩踏次数。完成后,我想到将HTTP-to-TCP容器作为补充添加到Jenkins代理中。
这样,每当从属服务器在另一个群集中旋转时,它将自动能够连接,而我不必担心多个连接。那是理论,但是显然我想要结果,你们也想要。