Flannel udp && Alloc
UDP
跟 vxlan 相比较,创建了 flannel0 tun 设备,tun 设备无 mac
路由变化,不再指定具体网段,而是整个 podcidr 写路由,10.244.0.0/16 dev flannel0
Flannel udp backend
Flannel 需要创建 tun 设备,所以需要 ds 调整权限
securityContext:
privileged: true
接 Flannel 介绍中原理章节
- 使用 backendManager 去注册网络时,使用 udp 的实现
- 在节点上创建 tun 设备,配置 IP 10.244.0.0/32,mtu (1500 - 28 28 是包头长度),路由 10.244.0.0/16 dev flannel0
- Listen udp 业务网卡 + port 如:node111 上 192.168.100.112:8285,使用 socketpair 创建一对套接字
- 运行时 调用 c 程序的 run_proxy,参数依次是 flannel0 的 fd,listen 192.168.100.112:8285 的 fd,对端套接字 fd,ip 地址大小端转换,mtu,log 是否开启。
void run_proxy(int tun, int sock, int ctl, in_addr_t tun_ip, size_t tun_mtu, int log_errors) {
- 启动后,从节点出去的流量,到 flanneld 处理,加 udp 头发出,从业务网卡收到的流量去掉 udp 头。
由于,flanneld 是用户态进场,linux 收到数据包需要到用户态进行处理再发出,性能差于 vxlan。
流量分析
和 vxlan 抓包情况相同;
Alloc
只关心本节点子网分配,不关心机器中其他节点子网,不下发到其他节点的路由信息。通常公有云厂商使用,如 阿里云 ack,这种情况下路由外部 vpc 路由表提供节点间网络功能。
在 ovn 环境下,通常可以在 logical_router 中配置策略路由实现。
在 terway 再介绍