浅谈Namespaces

什么是Namespace?

一般来讲,Namespace是个通用概念,我初次认识这个概念是在学习C++的时候,面向对象语言用它来命名冲突问题。这里, Namespace是指Linux用来控制一个进程对系统的可见性。最早的应用是chroot, 这里有介绍浅析chroot。chroot就是通过改变进程的fs_struct,来限制进程可见的文件系统视图,默认情况下每个进程可以看到整个文件系统,即根系统/。最早Namespace应用于文件系统,以至于CLONE_NEWNS指的就是文件系统隔离,参见man namespaces:

 Mount namespaces (CLONE_NEWNS)
       Mount  namespaces isolate the set of filesystem mount points, meaning that processes in different mount namespaces can have different views
       of the filesystem hierarchy.

后来,随着操作系统级别的虚拟化, 即容器技术,越来越多的子系统都支持了Namspace特性,参考man namespaces:

       Linux provides the following namespaces:

       Namespace   Constant        Isolates
       IPC         CLONE_NEWIPC    System V IPC, POSIX message queues
       Network     CLONE_NEWNET    Network devices, stacks, ports, etc.
       Mount       CLONE_NEWNS     Mount points
       PID         CLONE_NEWPID    Process IDs
       User        CLONE_NEWUSER   User and group IDs
       UTS         CLONE_NEWUTS    Hostname and NIS domain name

如何应用Namespace?

在没有了解Namespace以前,我有这些错误的看法:1. Namespace应该就像C++语言里的命名空间一样简单吧; 2. 听人说,容器/Namespace的隔离效果或安全性并不好,比如top命令仍能看到系统中的其它进程...

我真的错了,在玩了一下Namespace之后,我为它的强大感到震惊! 这里强烈推荐一个Namespace系列博客,很容易上手写点demo代码,快速体验一下, Introduce to Linux Namespaces

Namesapce如何实现的?

我也不知道,但是分析这块代码应该分两步走:1. 分析clone()系统调用代码; 2. 分析某个子系统的Namespace, 如CLONE_NEWPID 进程pid的隔离。第一步,可以参考这系列博客fork,clone系统调用分析。 第二步,留待以后了解吧。

猜你喜欢

转载自my.oschina.net/u/2475751/blog/1579689
今日推荐