上一节咱们在 flannel 网络中部署了容器,本节讨论 flannel 的连通和隔离特性。docker
测试 bbox1 和 bbxo2 的连通性:
网络
bbox1 可以 ping 到位于不一样 subnet 的 bbox2,经过 traceroute
分析一下 bbox1 到 bbox2 的路径。测试
bbox1 与 bbox2 不是一个 subnet,数据包发送给默认网关 10.2.40.1(docker0)。spa
根据 host1 的路由表(下图),数据包会发给 flannel.1。
code
flannel.1 将数据包封装成 VxLAN,经过 enp0s8 发送给 host2。路由
host2 收到包解封装,发现数据包目的地址为 10.2.17.2,根据路由表(下图)将数据包发送给 flannel.1,并经过 docker0 到达 bbox2。
部署
数据流向如图所示:容器
另外,flannel 是没有 DNS 服务的,容器没法经过 hostname 通讯。route
flannel 为每一个主机分配了独立的 subnet,但 flannel.1 将这些 subnet 链接起来了,相互之间能够路由。本质上,flannel 将各主机上相互独立的 docker0 容器网络组成了一个互通的大网络,实现了容器跨主机通讯。flannel 没有提供隔离。二维码
由于 flannel 网络利用的是默认的 bridge 网络,因此容器与外网的连通方式与 bridge 网络同样,即:
容器经过 docker0 NAT 访问外网
经过主机端口映射,外网能够访问容器
详细讨论可参考前面 bridge 网络相关章节。
以上是 flannel vxlan 的相关知识点,下一节咱们讨论 flannel host-gw backend。