首页 文章

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

提问于
浏览
0

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

前端与后端通信以访问服务,我认为它应该在同一网络中,前端从localhost调用服务 . 我无法访问代码,因为它是由公司开发的专有应用程序,它不支持Kubernetes,因此修改代码是不可能的 .

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

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

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

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

2 回答

  • 1

    因此,我正在尝试将前端映像和后端映像部署到同一个pod中,因此它们共享相同的群集IP .

    虽然你已经接受了已经接受的答案,即解决在同一个pod中运行更多容器的例子,但我想指出一些细节:

    • 容器只有在它们一起扩展时才应位于同一个容器中(如果您希望通过clusterIP在它们之间进行通信) . 你的前端/后端部门的场景看起来并不像是把它们塞进去的好候选人 .

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

    • 更多kubernetes哲学方法在这里将是:

    • 为后端创建部署

    • 为后端创建服务(公开必要的端口)

    • 为前端创建部署

    • 使用后端服务名称(kube-dns将此解析为后端服务的集群IP)和指定的后端端口从前端到后端进行通信 .

    • (可选)(对于此示例)为外部访问或外部访问创建前端服务 . 请注意,在这里您可以为后端服务分配相同的端口,因为它们不在同一个pod(主机)上...

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

  • 0

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

    apiVersion: v1
    kind: Pod
    metadata:
    name: two-containers
    spec:
        restartPolicy: Never
    containers:
        - name: nginx-container
          image: nginx
        - name: debian-container
          image: debian
    

相关问题