我遇到了一个问题,因为应用程序最初配置为在docker-compose上执行 . 我设法将.yaml部署文件移植并重写为Kubernetes,然而,问题在于pod的通信 .
前端与后端通信以访问服务,我认为它应该在同一网络中,前端从localhost调用服务 . 我无法访问代码,因为它是由公司开发的专有应用程序,它不支持Kubernetes,因此修改代码是不可能的 .
我认为主要原因是因为前端和后端在不同的pod上运行,具有不同的IP .
当前端尝试调用API时,它找不到该服务,并返回错误 . 因此,我正在尝试将前端映像和后端映像部署到同一个pod中,因此它们共享相同的群集IP .
不幸的是,我不知道如何制作一个yaml文件来在一个pod中创建两个容器 .
是否有可能让前端和后端容器在同一个pod上运行,或者是否有另一种方法使容器通信(可能是代理)?
2 回答
虽然你已经接受了已经接受的答案,即解决在同一个pod中运行更多容器的例子,但我想指出一些细节:
容器只有在它们一起扩展时才应位于同一个容器中(如果您希望通过clusterIP在它们之间进行通信) . 你的前端/后端部门的场景看起来并不像是把它们塞进去的好候选人 .
如果您选择将容器放在同一个pod中,则可以通过localhost进行通信(它们看到彼此就好像两个进程在同一主机上运行(除了文件系统不同的部分),并且可以使用localhost进行直接通信,因为它不能同时分配两个端口 . 使用集群IP就好像在同一主机上两个进程通过外部ip进行通信 .
更多kubernetes哲学方法在这里将是:
为后端创建部署
为后端创建服务(公开必要的端口)
为前端创建部署
使用后端服务名称(kube-dns将此解析为后端服务的集群IP)和指定的后端端口从前端到后端进行通信 .
(可选)(对于此示例)为外部访问或外部访问创建前端服务 . 请注意,在这里您可以为后端服务分配相同的端口,因为它们不在同一个pod(主机)上...
这种方法的一些好处包括:您可以更好地隔离后端(后端 - 前端通信仅在群集内,不暴露给外部世界),您可以在节点上独立调度它们,您可以单独扩展它们(假设您需要更多后端)电源但前端正在处理流量确定或反之亦然),您可以独立替换其中任何一个等...
是的,您只需在yaml文件的
containers
部分添加条目,例如: