我遇到一个问题,因为应用程序最初配置为在docker-compose上执行。 我设法将.yaml部署文件移植并重写到Kubernetes,但是,问题出在Pod的通信中。
前端与后端进行通信以访问服务,并且我认为前端应该在本地网络中调用服务,因为它应该位于同一网络中。 我无权访问该代码,因为它是公司开发的专有应用程序,并且不支持Kubernetes,因此修改代码是毫无疑问的。
我相信主要原因是因为前端和后端运行在具有不同IP的不同Pod上。
当前端尝试调用API时,它找不到服务,并返回错误。 因此,我试图将前端映像和后端映像都部署到同一容器中,以便它们共享相同的群集IP。
不幸的是,我不知道如何制作yaml文件来在单个pod中创建两个容器。
是否可以在同一容器上同时运行前端和后端容器,或者是否有另一种方法可以使容器进行通信(可能是代理)?
答案 0 :(得分:2)
是的,您只需将条目添加到yaml文件中的containers
部分,例如:
apiVersion: v1
kind: Pod
metadata:
name: two-containers
spec:
restartPolicy: Never
containers:
- name: nginx-container
image: nginx
- name: debian-container
image: debian
答案 1 :(得分:0)
因此,我正在尝试将前端映像和后端映像都部署到同一容器中,以便它们共享相同的群集IP。
尽管您已经有了一个可以接受的答案,这是处理在同一容器中运行更多容器的示例,但我想指出一些细节:
仅当容器一起缩放时,它们才应位于同一容器中(如果您不想通过它们之间的clusterIP进行通信,则不要)。您的前端/后端划分方案实际上并不是将它们塞在一起的好人选。
如果您选择将容器放在同一个容器中,则它们可以通过localhost进行通信(它们彼此看到,就像两个进程在同一主机上运行(文件系统不同的部分除外)并且可以使用本地主机进行直接通信,因此无法分配相同的端口。使用群集IP就像在同一主机上,两个进程通过外部ip进行通信。
更多的kubernetes哲学方法将是:
此方法的一些好处包括:您可以更好地隔离后端(后端-前端通信仅在群集内,而不会暴露于外界),可以在节点上独立调度它们,可以独立扩展(例如需要更多后端功能,但前端可以正常处理流量,反之亦然),您可以单独替换其中的任何一个,等等...