为什么Kubernetes x射线不能与非Kubernetes Artifactory一起工作?

帕特里克·罗素
2023-01-22 11:09

相关版本:Artifactory 7。X射线和X射线3。X

有时候,Artifactory会被安装在虚拟机上,而用户希望Xray被安装在Kubernetes上。例如,Artifactory可能很久以前就安装在虚拟机上,并升级到7。X,而X射线3。Xwill be a fresh installation.

年代既然Kubernetes可以轻松处理Xray的微服务,为什么不安装K8 Xray呢?

决议

答案就在一个经常被忽视的地方系统需求关于JFrog平台:Artifactory和Xray需要在同一个平台上内部网络

换句话说,Artifactory的主机需要直接连接到Xray的主机,反之亦然(Xray需要到达Artifactory)。直接的内部沟通必须是可能的。

在大多数其他安装案例中,这个需求没有问题。例如,以安装的Artifactory为例Docker-Compose和x射线安装通过Debian / RPM安装程序

在这类设置中内部IP地址按预期工作:

用户添加图片

注意,尝试使用Docker容器的IP将不起作用(这将在Artifactory system.yaml的IP中设置shared.node.ip参数):

用户添加图片

x射线无法连接到Artifactory,因为Artifactory IP地址Xray的路由器微服务不可用。Artifactory IP地址是在x射线通过JFrog URL连接时发送的,用于后续的健康检查。

在过去的版本,如Artifactory 6。X射线和X射线2。X, communications were done over theJFrog URL只有。在这些早期的版本中,还有一个x射线基础URL这是Artifactory与x射线通信的方式。这允许在两个服务之间使用负载均衡器和反向代理。

在Artifactory和Xray的当前平台版本中,通信是使用服务的IP地址完成的。在很多情况下,这是一个内部IP地址,而JFrog URL是一个外部IP地址。没有直接的方法来改变这种行为。

当试图在Kubernetes中只运行一个服务时,这就出现了一个问题,因为Kubernetes托管的pod有一个内部IP和一个外部IP:

用户添加图片

在本例中,Xray-Server微服务的内部K8 IP为172.0.0.9,外接K8 IP为10.0.0.9.初始集群注册完成后(使用JFrog URL), Artifactory将尝试对x射线内部IP。

这会导致超时和连接错误记录在Artifactory Router日志中。

在其他情况下,应该可以更新x射线系统。yaml的shared.node.ip参数来使用外部K8 IP。然而,由于Kubernetes,这种方法存在问题。主要是默认为外部IP地址动态分配的.还有,一个loadbalance设置可以代理多个内部pod。

由于这些限制,您应该将Kubernetes主机视为自己的主机内部网络.它不兼容不同的网络,即使是在相同的云环境中。

如果其他服务不在同一个K8网络中,则不应尝试在Kubernetes中安装这些服务之一。要么完全使用kubernetes,要么根本不使用kubernetes。