【问题标题】:What namespaces are shared among containers in a Kubernetes pod?Kubernetes pod 中的容器之间共享哪些命名空间?
【发布时间】:2019-01-16 19:58:58
【问题描述】:
linux中有6种命名空间:Network, UTS, Users, Mount, IPC, Pid。我知道所有容器与 Kubernetes pod 中的 pause 容器共享相同的网络命名空间。默认情况下,不同的容器有不同的 PID 命名空间,因为它们有不同的 init 进程。但是,其他命名空间呢?为什么?
【问题讨论】:
标签:
namespaces
kubernetes
【解决方案1】:
根据this article:
Pod 中的容器在“逻辑主机”上运行;它们使用相同的网络命名空间(换句话说,相同的 IP 地址和端口空间)和相同的 IPC 命名空间。
Pod 中的容器共享相同的 IPC 命名空间,这意味着它们还可以使用标准的进程间通信(例如 SystemV 信号量或 POSIX 共享内存)相互通信。
Pod 中的容器可以通过“localhost”访问;他们使用相同的网络命名空间。此外,对于容器,可观察的主机名是 Pod 的名称。由于容器共享相同的 IP 地址和端口空间,因此您应该在容器中使用不同的端口来进行传入连接。换句话说,Pod 中的应用程序必须协调它们对端口的使用。
您还可以通过指定v1.PodSpec.shareProcessNamespace: true 在 Pod 中的容器之间enable sharing Process namespace。