我有一个 POD,其中包含一个主应用程序和 0 个或多个 sidecar。 sidecars docker 镜像监听相同的端口 8080。
- name: sidecar-container-1
image: sidecar-image-1:latest
ports:
- containerPort: 8080
- name: sidecar-container-2
image: sidecar-image-2:latest
ports:
- containerPort: 8080
如何更新端口来管理从主应用程序到不同端口上的 sidecar 的通信?
Pod 中的所有容器都运行在同一个网络命名空间中;你不能让多个东西监听同一个端口。您需要修改 sidecar 容器中的应用程序,以侦听每个容器的不同端口。
在 Docker Compose 中,我们可以在另一个端口(应用程序端口除外)上运行映像,k8s 中不是这样吗?
相当于 Kubernetes Pod 的 Docker Compose 看起来像这样:
services:
infra:
image: docker.io/google/pause
container0:
image: docker.io/alpinelinux/darkhttpd:latest
network_mode: service:infra
container1:
image: docker.io/alpinelinux/darkhttpd:latest
network_mode: service:infra
尝试调出上述撰写文件将导致其中一个容器无法启动:
$ docker compose up
[+] Running 4/2
✔ Network container_default Created 0.1s
✔ Container container-infra-1 Created 0.1s
✔ Container container-container1-1 Created 0.0s
✔ Container container-container0-1 Created 0.0s
Attaching to container-container0-1, container-container1-1, container-infra-1
container-container0-1 | darkhttpd/1.14, copyright (c) 2003-2022 Emil Mikulic.
container-container1-1 | darkhttpd/1.14, copyright (c) 2003-2022 Emil Mikulic.
container-container1-1 | darkhttpd: bind(port 8080): Address in use
container-container1-1 exited with code 1
尝试在 Pod 中启动多个 sidecar 容器,并且应用程序尝试绑定到同一端口时,您也会遇到同样的问题。
如果您无法修改应用程序映像以在不同端口上运行,那么正如 @IgalSerban 在他们的评论中所说,您需要在不同的 pod 中运行应用程序。
我们没有任何背景信息可以回答您的问题;如果您能告诉我们更多有关您想要实现的目标,我们也许能够提供更好的答案。