Docker Kubernetes-将多个映像部署到单个Pod中

Docker Kubernetes-将多个映像部署到单个Pod中,docker,kubernetes,Docker,Kubernetes,我遇到了一个问题,因为应用程序最初配置为在docker compose上执行。 我设法将.yaml部署文件移植并重写到Kubernetes,但是,问题在于POD的通信 前端与后端通信以访问服务,我假设它应该在同一个网络中,前端从本地主机调用服务。 我无法访问该代码,因为它是一家公司开发的专有应用程序,不支持Kubernetes,因此修改代码是不可能的 我认为主要原因是前端和后端运行在不同的POD上,具有不同的IP 当前端尝试调用API时,它找不到服务,并返回一个错误。 因此,我尝试将前端映像和后

我遇到了一个问题,因为应用程序最初配置为在docker compose上执行。 我设法将.yaml部署文件移植并重写到Kubernetes,但是,问题在于POD的通信

前端与后端通信以访问服务,我假设它应该在同一个网络中,前端从本地主机调用服务。 我无法访问该代码,因为它是一家公司开发的专有应用程序,不支持Kubernetes,因此修改代码是不可能的

我认为主要原因是前端和后端运行在不同的POD上,具有不同的IP

当前端尝试调用API时,它找不到服务,并返回一个错误。 因此,我尝试将前端映像和后端映像部署到同一个pod中,以便它们共享相同的集群IP

不幸的是,我不知道如何创建一个yaml文件来在一个pod中创建两个容器


是否可以在同一个pod上同时运行前端和后端容器,或者是否有其他方法使容器通信(可能是代理)?

是的,您只需将条目添加到yaml文件的
containers
部分,例如:

apiVersion: v1
kind: Pod
metadata:
name: two-containers
spec:
    restartPolicy: Never
containers:
    - name: nginx-container
      image: nginx
    - name: debian-container
      image: debian
因此,我尝试将前端映像和后端映像部署到同一个pod中,以便它们共享相同的集群IP

虽然您已经有了公认的答案,即在同一个pod中运行更多容器的示例,但我想指出一些细节:

  • 只有当容器在一起缩放时,它们才应该在同一个pod中(如果您想在它们之间通过集群进行通信,则不应如此)。您的前端/后端部门场景看起来并不是将它们紧密结合在一起的好人选

  • 如果您选择将容器放在同一个pod中,那么它们可以通过localhost进行通信(它们可以看到彼此,就像两个进程在同一台主机上运行一样(除了它们的文件系统不同的部分)并且可以使用localhost进行直接通信,因此无法同时分配两个端口。使用群集IP就像在同一台主机上两个进程通过外部IP进行通信一样

  • 更多的库伯内特哲学方法是:

    • 为后端创建部署
    • 为后端创建服务(公开必要的端口)
    • 为前端创建部署
    • 使用后端服务名称(kube dns将其解析为后端服务的群集ip)和指定的后端端口从前端到后端进行通信
    • (在本例中)可以选择为前端创建外部访问服务或任何外部访问服务。请注意,这里您可以为后端服务分配相同的端口,因为它们不在同一个pod(主机)上

这种方法的一些好处包括:您可以更好地隔离后端(后端前端通信仅在集群内,不暴露于外部世界),您可以在节点上独立地调度它们,您可以独立地扩展它们(假设您需要更多后端电源,但fronted正在处理流量ok或viceversa),您可以单独更换其中任何一个,等等。

是的。。。结果比我想象的要容易。我基本上按照你提到的做了,但是,我创建了一个部署吊舱。谢谢你的帮助,它现在工作得很好!真的很感激!部署是更好的方法。我的示例只是为了演示该方法。请包括您用于为Kubernetes重写
docker compose.yml
的所有资源。这对其他读者很有帮助。