docker overlay网络详解

docker网络之所以这么活跃,是因为网络部分的代码单独抽离出来成为docker的网络库,即libnetwork。

为了标准化网路驱动的开发步骤和支持各种网络驱动,libnetwork中使用了CNM(container network model),CNM定义了构建容器虚拟化网络的模型,同时还提供了可以用于开发多种网络驱动的标准化接口和组件。

现在我们有两台主机,里面的容器之间要进行通讯的话,要保持一个公式相等,即一个网段=一个广播域=一个VLAN。

下面介绍一下两个container的通讯构建过程,

首先会在我们的主机当中构建一个网络,这个网络叫做sanbox,这个是网络容器内的协议栈。

 

在每个容器里面都会这样的一个设备叫做endpoint,它的作用就是把容器(sandbox)接入到network中去,endpoint最典型的案例就是veth pair

 

由于它的这个特性,常常被用于构建虚拟网络拓扑。例如连接两个不同的网络命名空间(netns),连接docker容器,连接网桥(Bridge)等,其中一个很常见的案例就是OpenStack Neutron底层用它来构建非常复杂的网络拓扑。veth pair是成对出现的一种虚拟网络设备接口,一端连着网络协议栈,一端彼此相连。如下图所示:

 

但是这样的网络拓扑存在一个弊端,随着网络设备的增多,网络连线的复杂度将成倍增长。 如果连接三个netns时,网络连线就成了下图的样子

而如果连接四个netns时,网络连线就成了下图的样子

如果有五台设备。。。

Linux Bridge来将多个隔离的netns连接起来,这样网络连线就非常清爽了。

network包含的是一组endpoint,同一个network下的endpoint可以通信,network实现的方法就是桥接加VLAN的方式。

 

什么叫做overlay网络?

字面意思就是叠加的网络,指的就是在物理网络层上再搭建一层网络,通过某种技术再构建一张相同的网络,这张称为逻辑网。也就是说我们想要两台主机的容器进行通讯,首先这两台主机自己要可以通讯,然后在这个物理机的基础之上部署一张逻辑层的网络,他具有物理网络的所有特性,跟物理网络一模一样

posted @ 2022-05-09 14:39  岁岁红莲  阅读(429)  评论(0编辑  收藏  举报