docker容器与网桥的流量路径

一直对网桥的原理比较晕,今天幸运读到一篇博客,它把网桥与容器的流量路径讲的很清楚,所以在这里略作总结。

博客链接

一张图足以说明一切:

  • 在宿主机上创建网桥,其作用是虚拟交换机。
  • 容器的network namespace内创建虚拟网卡veth,另一端连在宿主机的网桥上。
  • 在宿主机上创建虚拟网卡,把它插在网桥上。

目前,容器与宿主机均有虚拟网卡插在网桥上,网桥作二层转发。

容器内路由表的默认网关是宿主机虚拟网卡docker0,我们也俗称为网桥的IP。

注意,docker0实属宿主机,相当于宿主机的一个网卡,通过网线插在网桥上。

如果我们更加抽离的来看,宿主机、宿主机上的网桥(虚拟交换机)可以视作2个物理设备,每个连接在网桥上面的容器也视作独立物理设备。

容器发给外部的流量通过namepsace内部路由表决定发往docker0默认网关,网桥充当交换机角色,当流量被交换机送达docker0网口后,相当于宿主机收到了外部流量,经过宿主机的netfilter的PREROUTING链,继续根据宿主机路由表作下一跳转发。

 

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~