开发跨主机docker macvlan 和overlay 网络管理程序记录

docker 1.12中支持了overlay和macvlan网络, 虽然macvlan仍处于实验阶段。

macvlan和overlay网络不同,overlay是global scope类型的网络,而macvlan是local scope。scope按我的理解,指的是网络作用的范围。global类型的网络其作用于一组docker daemon集群,scope类型的网络只作用于单一主机。

更详细的解释就是: 在docker daemon设置了同样cluster-store参数的docker主机,自动加入到同一个overlay cluster集群,自动同步其他主机创建的所有overlay网络。也就是指,这些主机将会看到同样的overlay网络,因此你不可能创建存在subnet重叠的两个overlay网络,也不能为两个容器分配 同样的IP地址。而每台主机创建的macvlan网络是独立的,A机器上创建的macvlan网络并不影响B机器上的网络,但两台主机在(1)网卡配置混杂模式,(2)两台主机上macvlan存在overlap,(3)两个macvlan网络没有分配过同样IP,这三个条件满足时,跨主机macvlan是可以通信。这个可以参考我同事写的macvlan搭建笔记。

因为上述的原因,在开发跨主机的macvlan和overlay网络管理程序时,两者有明显的不同:

1.overlay网络管理不需要专门去开发ipam插件,docker daemon内置的Ipam模块可以处理IP分配和DHCP的问题。在overlay网络集群中的任何一台主机创建了新的overlay网络,docker内置ipam会自动去检测新的网络是否和已存在的网络是存在subnet overlap的问题。

两台主机上的macvlan网络是独立的,如果使用默认的docker ipam,两台主机上的对相互间的ip分配是没有感知的。不可避免会出现分配了同样IP的问题,导致跨主机macvlan网络通信出现问题。因此我们需要开发自己的ipam插件,管理ip地址的分配。在用户请求创建主机集群的macvlan网络时,由我们自己编写的ipam驱动去检查subnet overlap和ip占用的问题。

2. overlay集群中任一主机对集群中的overlay进行管理操作,docker daemon将会自动同步到整个集群的主机。新加入的主机,自动同步所有overlay网络,主机移除后,自动清除该主机上网络数据,同步所有集群主机。

而macvlan是独立的,所以我们需要构建一层抽象的全局网络层:(1)上层应用对macvlan进行管理时(创建/删除等),网络层需要指挥底层的主机节点执行真正的网络动作。(2)新添加的主机,网络层需要记录主机节点的信息,并根据网络层的网络数据指挥底层主机节点创建macvlan网络(3)主机断开连接后,网络层需要更新底层的网络节点的信息。从这里可以得知,over

当然两种网络管理程序开发过程也存在相同点:需要监听所有主机的docker daemon 网络操作,同步网络信息或者执行相应的处理等   

你可能感兴趣的:(开发跨主机docker macvlan 和overlay 网络管理程序记录)