在k8s中如何实现Pod之间的通信

120次阅读
没有评论

问题描述

正在将一个旧的遗留系统迁移到k8s上。他有一个自定义服务器,客户端应用程序连接到该服务器以相互通信。服务器和客户端最初是为在同一系统上运行并使用localhost进行通信而创建的。
用户已经将服务器和客户端应用程序容器化,并测试了它们在同一个Pod中的运行情况(使用localhost一切正常)。现在,用户希望将服务器和应用程序分别放在自己的Pod中,并希望应用程序能够自动连接到服务器。
问题:如何在不更改客户端应用程序或服务器源代码的情况下将客户端应用程序连接到服务器?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

如果您的客户端应用程序的源代码中硬编码了“localhost”,并且您无法更改源代码,那么要实现这个需求可能会比较困难。但是,您可以尝试在Pod的hosts文件中覆盖“localhost”的含义(正确的方法)。
您可以参考Kubernetes官方文档中的“在Pod的/etc/hosts中添加条目”部分。这样做可能会产生一些意想不到的副作用,并且可能会影响Kubernetes本身,但是这是值得一试的。
请注意,这些覆盖可以指向Pod部署上创建的服务(如果可行)。它们可以具有可靠的内部域名,不会发生变动。

方案2

您可以使用Kubernetes和Docker的网络选项来实现这一需求。具体来说,可以查看Kubernetes的服务发现文档
在Kubernetes内外,您可以将Docker容器添加到一个定义好的网络中,并在网络中发现服务。根据您如何设置Kubernetes集群,您可能需要将容器运行时指向服务名称而不是localhost,但这将根据您的具体配置而有所不同。

正文完