Flannel容器网络方案
Flannel共有三个容器网络方案:Flannel UDP、Flannel VXLAN旧和Flannel VXLAN新。
Flannel UDP方案
Flannel UDP数据面如下:
同节点容器通信
容器A访问容器B,数据面流程如下:
- 容器A和容器B在相同网络,直接发送
- 容器A向容器B发送ARP请求,br0交换机flood该ARP请求
- 容器B接收到ARP请求,并响应
- br0交换机flood该ARP响应
- 容器A接收到ARP响应,封装二层报文并发出
- br0交换机直接转发报文到容器B
- 容器B接收到报文
跨节点容器通信
容器A访问容器D,数据面流程如下:
- 容器A和容器D在不同网络,通过网关转发
- 容器A发送ARP请求给网关(10.10.1.1)
- 节点1内核响应ARP请求,并发送到br0口
- br0交换机转发ARP响应给容器A
- 容器A收到ARP请求,封装二层报文(目的MAC为网关的MAC),并发出报文
- 报文通过veth设备到达br0,并通过br0接口上送至节点内核
- Host1内核根据报文目的IP地址,判断需要路由转发,查找路由表并匹配,通过tunX设备直接送达
- Host1内核发送ARP请求给容器D,并发送到tunX设备上
- flanneld创建了tunX设备的socket,flanned收到ARP请求报文
- flanneld响应ARP请求,并通过tunX socket发送ARP响应,该响应报文会被tunX设备接收并进入协议栈
- Host1内核收到ARP响应后,修改报文二层头,并发送给tunXX设备
- flanneld收到该报文,并根据拓扑信息,把该报文封装在UDP中,flanneld发送UDP报文给Host2
- Host2接收到UDP报文,经过协议栈上送给flanneld进程
- flanneld解封外层报文ÿ