在Kubernetes pod中,哪些命名空间是容器之间共享的?

12

在Linux中有6种不同的命名空间:网络、UTS、用户、挂载、IPC、Pid。我知道所有容器与Kubernetes pod中的pause容器共享相同的网络命名空间。默认情况下,由于使用了不同的init进程,不同的容器拥有不同的PID命名空间。但是其他命名空间如何处理呢?为什么这样做?


1
注意:Pods 可以与 Kubernetes 1.12(2018年9月)共享进程:https://dev59.com/6I3da4cB1Zd3GeqP7Pzs#52565997 - VonC
2个回答

14
根据这篇文章
Pod 中的容器运行在“逻辑主机”上,它们使用相同的网络命名空间(也就是说,相同的 IP 地址和端口空间)和 IPC 命名空间。
Pod 中的容器共享相同的 IPC 命名空间,这意味着它们也可以使用标准的进程间通信方式(例如 SystemV 信号量或 POSIX 共享内存)相互通信。
Pod 中的容器通过“localhost”可访问,它们使用相同的网络命名空间。另外,对于容器来说,可观察到的主机名是 Pod 的名称。由于容器共享相同的 IP 地址和端口空间,因此应该在容器中使用不同的端口进行传入连接。换句话说,Pod 中的应用程序必须协调它们对端口的使用。
您还可以通过指定 v1.PodSpec.shareProcessNamespace: true 来在 Pod 中的容器之间启用共享进程命名空间。 (了解更多)

4
  • ipc、net和uts命名空间是共享的。

  • pid:默认情况下它不是共享的。但是可以在pod spec中启用命名空间共享。

  • mnt:不共享。不同的容器是从不同的镜像构建的。每个容器只能看到自己的根目录。

  • user:这在k8s中不受支持,未来可能会实现某种形式的用户命名空间共享,如此处所述。

enter image description here

{{链接1:图像源}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接