Skip to content

54 容器网络与生态:与CNM竞争过后的CNI下的网络插件生态

你好,我是周志明。前面的两节课,我们学习了Linux系统本身的网络虚拟化知识,今天这节课,我们就来看看这些理论知识实际是如何应用于容器间网络的。

容器网络的第一个业界标准,是源于Docker在2015年发布的libnetwork项目。如果你还记得在“容器的崛起”这个小章节中我提到的关于libcontainer的故事,那从名字上,你就能很容易地推断出libnetwork项目的目的与意义。libnetwork项目是Docker用Golang编写的、专门用来抽象容器间网络通信的一个独立模块。

类似于libcontainer是作为OCI的标准来实现的,libnetwork是作为Docker提出的CNM规范(Container Network Model)的标准实现而设计的。不过,跟ibcontainer因为孵化出runC项目,到今天都仍然广为人知的结局不一样,libnetwork随着Docker Swarm的失败,已经基本上失去了实用的价值,只具备历史与学术研究方面的价值了。

接下来,我就会从CNM规范的出现以及它与CNI的竞争开始说起,带你了解容器间网络所解决的问题。

CNM与CNI

首先,可以说,现在的容器网络的事实标准CNI(Container Networking Interface)与CNM在目标上几乎是完全重叠的,这就决定了CNI与CNM之间,只能是你死我活的竞争关系,而这与容器运行时提到的CRI和OCI的关系明显不一样。CRI与OCI的目标并不相同,所以两者有足够的空间可以和平共处。