Kubernetes POD 内通信

问题描述 投票:0回答:1

我有一个 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 的通信?

kubernetes networking port nodes
1个回答
0
投票

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 中运行应用程序。

我们没有任何背景信息可以回答您的问题;如果您能告诉我们更多有关您想要实现的目标,我们也许能够提供更好的答案。

© www.soinside.com 2019 - 2024. All rights reserved.