前言
Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理。然而,Docker同样有着很多不完善的地方,网络 方面就是Docker比较薄弱的部分。因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求。
Docker网络模式选择
目前已有不少文章介绍了Docker的网络模型,但是在实际应用中还是有不少坑和需要注意的点
在Docker应用到生产环境的时候,网络模型的选择主要有以下几种
1、原生Bridge NAT模式
2、Linux Bridge VLAN模式
3、利用第三方的网络方案
原生的Bridge NAT模式
这是Docker原生的网络模式,每台主机的容器都在一个独立的子网中,外部访问必须通过主机端口映射的方式。同时不同主机间的容器间访问也必须通过这种主机端口映射的方式。换句话说,一台主机上的容器其实是不知道另外一台主机的容器的。这种方式是否可以用于生产,一开始我是忧郁的,同时之前有写文章写NAT的性能损耗比较大,在没有资源做完整测试的情况下,我们最初的方案就没敢用这个网络方案。但是最近测试自己测试的结果看,NAT的性能是可以接受的(QPS和Latency和VLAN的模式都比较接近),只要有合适的方案将不同主机的容器联通就可。如用Mesos+Marathon+Bamboo+HAProxy的方式就可以的。
Linux Bridge VLAN模式
这是我考虑Docker网络模型一开始就想决定好的,主要有几方面的原因:
1、NAT的方式一开始不敢用
2、其它第三饭的工具还不太成熟
3、一开始容器的数量不可能太多(因为VLAN的模式受限于VLAN的整体数量,只能4096个容器),如果按照一个主机10-16个容器算,可以支持到256台主机,这个还是可以接受的
4、每个主机需要一个独立IP,并且可以互联互通
5、运维管理要简单,毕竟我们的运维体系还是物理机体系的
6、可以做到主机网络和VLAN网络的隔离
我们用的主机是CentosOS 7.X系列, 主机的网络配置如下:两个1G的网卡,通过Bond的方式绑在一起,然后配置主机一个虚拟网卡在VALN 1上,容器的Docker0的Bridge在另外一个VLAN 1上
网卡配置:
这里需要注意的是必须安装了bridge-utils, NetworkManager包
步骤
配置两个网卡,不要配置IP/GATEWAY等网络参数,增加MASTER=bond0
以及SLAVE=yes
完整例子如:
TYPE=EthernetBOOTPROTO=noneDEFROUTE=yesPEERDNS=yesPEERROUTES=yesIPV4_FAILURE_FATAL=noIPV6INIT=noIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_PEERDNS=yesIPV6_PEERROUTES=yesIPV6_FAILURE_FATAL=noNAME=enp2s0f0UUID=7f6fa8e9-0177-46a8-b8ea-55c2187bea11DEVICE=enp2s0f0ONBOOT=yesMASTER=bond0SLAVE=yes
评论列表()