【问题标题】:Kubernetes - Create two containers in one podKubernetes - 在一个 pod 中创建两个容器
【发布时间】:2026-02-07 23:30:01
【问题描述】:

我正在开发一个包含两个容器的应用程序。我想在 Kubernetes 中将它们部署到一个 Pod 中,因为我希望这两个服务位于一个 IP 地址后面。但是,我很难尝试将 kubernetes 服务与容器连接起来。怎么写deployment.yml文件,这样当用户调用x.x.x.x:port1时,请求转发到第一个容器,调用x.x.x.x:port2时,请求转发到第二个容器。如何指定服务?

这是我到目前为止所拥有的:

apiVersion:v1
kind: Pod
metadata:
  name: my_app
spec:
  containers:
  - name: first_container
    image: first_image

  - name: second_container
    image: second_image
---
apiVersion: v1
kind: Service
...

提前谢谢你!

【问题讨论】:

  • 通常你只希望这些是单独的部署,每个部署都有单独的服务。您不直接连接到 Pod,它们是相同还是不同的 IP 地址通常是无关紧要的;从集群外部连接总是“特殊”的,通常涉及 NodePort 或 LoadBalancer 类型的服务。
  • 只是添加到@DavidMaze - 在同一个 pod 中有两个容器。无法独立扩展它们。除非容器紧密耦合,否则不建议将两个容器放在一个 pod 中。

标签: docker deployment kubernetes


【解决方案1】:

在您的容器部分,您需要为每个容器定义一个 containerPort:

  containers:
  - name: first_container
    image: first_image
    ports:
    - containerPort: port1
  - name: second_container
    image: second_image
    ports:
    - containerPort: port2

然后在服务定义的端口部分,您需要将服务的 targetPorts 指向这些端口,例如 https://*.com/a/42272547/9705485

【讨论】:

  • 根据容器端口的 K8S 文档 - kubernetes.io/docs/reference/generated/kubernetes-api/v1.12/… - Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network.