由于一台主机上不可能只跑一个容器,一台主机上的容器也不可能都是一个功能或者一个用户群体,不同用户群体之间信息的性质不同,对信息安全性的要求不同,因此划分虚拟网络的需求的客观的。划分虚拟网络的方法有很多,本文将提出划分docker虚拟网络的一个方案,即使用Docker的macvlan为容器提供桥接网络及跨主机通讯来划分网络。
macvlan的原理是在宿主机物理网卡上虚拟出多个子网卡,通过不同的MAC地址在数据链路层(Data Link Layer)进行网络数据转发的,它是比较新的网络虚拟化技术,需要较新的内核支持(Linux kernel v3.9–3.19 and 4.0+)。
使用mvcvlan
docker network create -d macvlan \
--subnet=172.17.0.0/24 \
--gateway=172.17.0.1 \
-o parent=eth0 mcv
首先,需要创建一个macvlan网络
然后指定要桥接的网络地址此处填docker0的IP地址,docker0的IP地址可以通过ifconfig进行查询。
网关地址与网络地址应该相互匹配
设置要在宿主机的哪块网卡上建立虚拟子网卡,这里我选择的是eth0,给它编号为mcv,方便之后使用
docker run --net=mcv --ip=101.132.161.25 -itd alpine /bin/sh
docker run --net=mcv --ip=101.132.161.67 -itd alpine /bin/sh
运行容器,指定刚建好的macvlan网络,并指定IP地址
之后通过docker attach 命令进入容器内部进行ping命令,这一轮操作就算完成了。
提示:创建第二块子网卡时可以将eth0改成eth0.1,将网桥修改为172.17.0.2
结果展示:
(注:101.132.161.67和101.132.161.25均在mcv网卡下,101.132.161.50在mcv1网卡下)
这样虚拟网络划分就完成了。