前言:众所周知在linux系统中PID、IPC、Network等都是全局性的资源,任何的修改和删减都会对整个系统造成影响,这也是为什么kvm之类的虚拟化技术需要模拟一个完成主机系统的原因。但是,在linux namespace中这些PID、IPC、Network等都不再是全局性的资源,基于namespace的虚拟化技术是内核级别的虚拟化,具有敏捷、安全、资源轻消耗的优点。在云计算的信息化建设中,计算资源和存储资源的虚拟化已经做的非常好并具备了丰富的解决方案。但是网络的虚拟化的技术还在逐步成熟的过程中,在网络虚拟化技术中目前最主流的技术就是基于namespace网络虚拟化技术(我更觉得应该称为NFV:网络功能虚拟化)。本文意在通过对Network namespace的解析来统一的介绍一下Openstack网络实现原理,以期帮助需要的伙伴更好的理解网络虚拟化相关技术。
Linux Namespace:
Linux Namespace是Linux提供的一种OS-level virtualization的方法。目前在Linux系统上实现OS-level virtualization的系统有Linux VServer、OpenVZ、LXC Linux Container、Virtuozzo等,Linux namespace提供了PID、IPC、UTS、Mount、Network等系统资源的完全隔离机制。这种完全隔离机制的实现是靠不同namespace中的进程彼此之间是互不干扰的,即使是同样的进程只要在不同的namespace中。为了更好的理解这一点,我们略加分析一个PID例子。在所有的linux系统都一个init进程(即初始化进程),其PID=1,而由于在不同的namespace中的进程都是彼此透明的,因此在不同的namespace中都可以有自己的PID=1的init进程,相应Namespace内的孤儿进程都将以该进