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