容器网络(八)flannel 的连通与隔离【56】
(十四)flannel 的连通与隔离
上一节我们在 flannel 网络中部署了容器,本节讨论 flannel 的连通和隔离特性。
(1)flannel 网络连通性
测试 bbox1 和 bbxo2 的连通性:
docker exec bbox1 ping -c 10.2.17.2
bbox1 能够 ping 到位于不同 subnet 的 bbox2,通过 traceroute
分析一下 bbox1 到 bbox2 的路径。
docker exec bbox1 traceroute 10.2.17.2
-
bbox1 与 bbox2 不是一个 subnet,数据包发送给默认网关 10.2.40.1(docker0)。
-
根据 host1 的路由表,数据包会发给 flannel.1。
host1# ip route 10.2.0.0/16 dev flannel.1
3.flannel.1 将数据包封装成 VxLAN,通过 ens33 发送给 host2。
4.host2 收到包解封装,发现数据包目的地址为 10.2.17.2,根据路由表(下图)将数据包发送给 flannel.1,并通过 docker0 到达 bbox2。
host2:ip route
10.2.0.0/16 dev flannel.1
10.2.17.0/24 dev docker0 proto kernel scope link scr 10.2.17.1
数据流向如图所示:
另外,flannel 是没有 DNS 服务的,容器无法通过 hostname 通信。
host1#docker exec bbox1 ping -c bbox2
(2)flannel 网络隔离
flannel 为每个主机分配了独立的 subnet,但 flannel.1 将这些 subnet 连接起来了,相互之间可以路由。本质上,flannel 将各主机上相互独立的 docker0 容器网络组成了一个互通的大网络,实现了容器跨主机通信。flannel 没有提供隔离。
(3)flannel 与外网连通性
因为 flannel 网络利用的是默认的 bridge 网络,所以容器与外网的连通方式与 bridge 网络一样,即:
- 容器通过 docker0 NAT 访问外网
- 通过主机端口映射,外网可以访问容器。详细讨论可参考前面 bridge 网络相关章节。