kubernetes网络系列之(十四)网络命名空间Network Namespace



通过本课,我们首先了解网络命名空间(network namespace)的概念,然后通过虚拟网线连通这个虚拟空间和主机空间。最后分别“站在”这2个不同世界中,观察这2个空间,并以此判断报文的收发方向

网络命名空间

好了,我们先来看下普通的Host主机长什么样:

image

大概如上图这样,你在家里收发着各类包(bao)裹(wen)。

有一天你用神奇的方式,创造了一个“虚拟空间”(什么?你想知道怎么创建的?好吧,这个咱们下一章节再讲,这里你需要先理解概念),这个空间是独立的,里面关于网络相关的东西一应俱全,你有的它都有。(即它拥有完整的Linux网络协议栈)

image

这个时候,你需要找到一个“通道”,使得我们可以与这个独立空间进行交互。

方法呢,就是创建一根“网线”把2个世间给连起来。“网线”加引号是因为这个网线也是虚拟出来的,目前主要有TUN/TAP牌和Veth牌两种。(顺便提一下,目前市面上看到的虚拟机都用Tap/Tun这个牌子的网线,而容器都用Veth这个牌子的网线)。

好了,现在我们手里有一根虚拟网线(关于2种网线的介绍,会单独写,这里再次先略过网线本身的介绍),于是我们通过它,就可以将2个独立的世界连接起来。如下图

image

注意了,在通过网线连通2个世界后,你(作为Host主机)要很公平的看待这个“虚拟世间”,一定要把它当做一个真实存在的实体。

为了更好理解:现在假设你蹲到下图“我”的位置上,然后站在Host“我”的视角看。往左看,有一个网卡;往右看也有一个网卡。

image

所以你看到的世界,可以跟下面这个是一样的。

即通过一根网线,通往了其他节点。

image

报文的方向

为什么我们一定要认真的对待这个“虚拟世间”,并把它看做一个实际存在的实体呢。因为这个涉及报文方向的问题。(从我自己的经验来看,很多时候,容易搞混报文方向。)

2.1 Host主机视角

好了,首先让我们先站住主机Host角度看世界,它长成这个样子:

image

从“虚拟空间”发出的报文,经过网卡2到我这里,对我来说,是收到了新报文。 跟通过网卡1收到的报文,没有什么区别。

即:经过安全iptables规则,也是“入”方向的。

2.2 网络空间视角

好了,现在让我们进入到这个“虚拟空间”,站在里面看世界,它应该长成什么样?

嗯,应该和本文的第一张图片一样,因为它是独立的实例。

image

当然,从“上帝”角度来看,整体大概如下图:

image

记住了:

站在“虚拟空间”角度看,主机Host发给我的报文,对我来说是入方向(是新收到的报文)。而我发给主机的报文,对我来说,是出方向(是发出去的报文)。

总结

今天我们首先了解网络命名空间(network namespace)的概念。然后知道通过虚拟网线,使之与主机Host世界连通。最后,我们分别“站在”这2个不同世界中,观察这个空间。

(1)在主机Host上,我们发现自己多了一个网卡,这个新网卡连接到另一个独立节点(把新创建的虚拟空间看做实体)。

(2)而在虚拟空间里面,我们就好比待在一个新的主机里面一样。

ps,这个“位置”很重要,因为这个会影响我们判断报文的“接收”还是“发送”的方向。