一 为何要学习网络命名空间
名称空间
许多容器和虚拟化技术中都依赖于网络命名空间。
容器虚拟化技术的典型代表如LXC、Docker。Neutron也使用Linux网络命名空间。
当虚拟交换机,例如虚拟交换机,虚拟交换机 Openvswitch,已安装。
一 介绍
从Linux 2.6.24版的内核开始,Linux 就支持6种不同类型的命名空间。它们的出现,使用户创建的进程能够与系统分离得更加彻底,从而不需要使用更多的底层虚拟化技术。
CLONE_NEWIPC: 进程间通信(IPC)的命名空间,可以将 SystemV 的 IPC 和 POSIX 的消息队列独立出来。
CLONE_NEWPID: 进程命名空间。空间内的PID 是独立分配的,意思就是命名空间内的虚拟 PID 可能会与命名空间外的 PID 相冲突,于是命名空间内的 PID 映射到命名空间外时会使用另外一个 PID。比如说,命名空间内第一个 PID 为1,而在命名空间外就是该 PID 已被 init 进程所使用。
CLONE_NEWNET: 网络命名空间,用于隔离网络资源(/proc/net、IP 地址、网卡、路由等)。后台进程可以运行在不同命名空间内的相同端口上,用户还可以虚拟出一块网卡。
CLONE_NEWNS: 挂载命名空间,进程运行时可以将挂载点与系统分离,使用这个功能时,我们可以达到 chroot 的功能,而在安全性方面比 chroot 更高。
CLONE_NEWUTS: UTS 命名空间,主要目的是独立出主机名和网络信息服务(NIS)。
CLONE_NEWUSER: 用户命名空间,同进程 ID 一样,用户 ID 和组 ID 在命名空间内外是不一样的,并且在不同命名空间内可以存在相同的 ID。
在专业网络世界中,长时间使用虚拟路由并转发VRF(Virtual Routing Forwarding)是很常见的。Cisco, Alcatel-Lucent, Juniper等正在支持这项技术。在L2交换世界中,VLAN的概念自上世纪90年代以来一直被使用。一个物理交换机支持多个广播域。大多数交换机支持多达4k Vlans。
这个想法已经被采纳到了L3世界。许多网络设备现在都支持VRF。这意味着,可以在一个物理设备上运行多个虚拟路由器(三层转发实例)。
在Linux世界中,专业网络世界的VRF获得了名称“网络命名空间”。在Linux中,还有其他命名空间可用(如mount命名空间...)。 http://lwn.net/Articles/531114/上的acticle有更多的细节。
每个网络命名空间都有自己的路由表,它自己的iptables设置提供nat和过滤。 Linux网络命名空间还提供了在网络命名空间内运行进程的功能。
但为什么有人会使用这个功能。考虑在Linux系统上运行的防火墙。您应该将防火墙的所有服务接口分配到网络命名空间。之后,默认网络命名空间和防火墙网络命名空间正在运行不同的路由表。像SSH这样的应用程序只能在默认命名空间中可用,但不能在防火墙命名空间中。并且您可以在每个命名空间中使用相同的IP地址,而不会有任何干扰 - 但是请注意L2层!
参考链接:
https://lwn.net/Articles/531114/
http://www.opencloudblog.com/?p=42