我一直在对 Linux 和网络进行一些研究,并遇到了命名空间。在阅读文章并学习如何设置后,我很困惑。
我在系统上安装了一个应用程序,当我在全局命名空间(无命名空间)中运行它时,我可以使用主机的 IP 地址从 lan 连接到 Web GUI。现在,当我创建命名空间时,在创建任何虚拟适配器或执行任何其他操作之前,如果我在命名空间中打开应用程序,我仍然可以使用相同的 IP 从 LAN 连接到它。
我用来启动服务的命令是:
sudo ip netns exec blue service *application* start
我的理解是“网络”命名空间应该隔离进程。那么我错过了什么?
顺便说一句,我通常将这些指令用于命名空间:
答案1
那么我错过了什么?
您缺少的是service
与 进行通信init
,本质上是逃避网络名称空间。应用程序最终在与 init 系统相同的网络命名空间中运行(默认情况下)。
从本质上讲,问题service
不仅fork
在于exec
应用程序守护程序二进制文件(这将保留命名空间)。相反,它只不过是init
通过(我相信)Unix 域套接字传递其参数。安全容器还隔离文件系统以防止这种情况发生。
我会尝试直接调用应用程序守护程序二进制文件(ip netns exec [namespace]
当然,在 下)。或者使用真正的容器软件,其他人已经解决了所有棘手的细节......