内核arp_proxy参数配置不当导致Macvlan环路

内核arp_proxy参数配置不当导致Macvlan环路

作者万绍远
团队Filed&&Suppoort
编写时间2020/10/28
类型常见问题-操作系统

问题现象

使用canal+Macvlan网络插件,ping对应的POD Macvlan网络出现了环路情况

问题原因

经过排查和实验,关闭主机上相关vlan device的arp proxy后(如 /proc/sys/net/ipv4/conf/ens4.100/proxy_arp),环路问题消失。

Kubernetes的网络使用CNI模型,Rancher Macvlan功能基于CNI的Macvlan插件进行扩展而实现。而proxy_arp机制是CNI本身引入的,PR:containernetworking/cni#177(https://github.com/containernetworking/cni/pull/177)

这个PR是为了解决来自rkt的问题。rkt使用macvlan插件,当两个container先后使用同一个IP但是不同Mac时,外部交换机没有及时刷新arp mapping,可能导致新的容器无法访问。通过开启各个主机vlan device的proxy_arp,可以有效缓解这个问题。

从 macvlan cni 的源码看,proxy arp 只在 macvlan 设备中打开了,对应的 master 没有打开;但是在 static-macvlan-cni 里,新创建的主机上的 vlan 设备(master)和 pod 里的 macvlan 设备都打开了 proxy arp。

问题解决

临时解决:
1、关闭主机上相关vlan device的arp proxy后(如/proc/sys/net/ipv4/conf/ens4.100/proxy_arp) 长期解决

2、升级到对应的Macvlan版本

最后由 袁振更新 于