在上一期中,我们实现了Docker通过swarm组建的Overlay网络,经过VXLAN封装,解决了docker跨宿主机互联互通的问题。
然而,让我们回想一下,容器存在的意义……
毛主席指出,人存在的意义,如果是为人民服务,就比泰山还重,反之,则比鸿毛还轻。同样地,“几乎所有的容器存在的意义,最终都要落实到为向外部网络上的主机或其他终端提供服务。”
因此,如果容器只能在局域网中进行小范围通信,那么,它的生存与死亡,拉起与销毁,都是轻于鸿毛的事情,只有它向互联网提供服务了,才能重于泰山。
我们知道,在虚拟化环境中,虚拟机对外提供服务,是需要在数据中心逻辑边界提供DNAT,实现外部用户访问数据中心内部的VM的,如下图:
但是,在容器化环境中,VM内还有一层虚上加虚的docker,如前两个实验中体现的,跨宿主机或虚拟宿主机之间的docker互访需要通过VXLAN隧道,而外部访问docker需要在宿主机上做NAT,这些均会对宿主机的CPU/RAM资源造成更大消耗。
因此,我们寻求一种方式,将docker0提供的宿主机内部容器网络桥接至宿主机互联互通的网络,避免过大的开销,实现更好地为人民服务。
回想一下,虚拟机在安装docker以后,增加了一个名叫docker的网卡……
通过brctl show命令可以看出来,docker0实际上是一个网桥:
如果我们用自建的桥接到外部网络的网桥,代替这个网桥,是否就可以实现将容器网络桥接到外部网络,并实现两个宿主机上的容器直接互联互通,如下图所示:
请看下期——