近期国内很多用户曝出在阿里云的环境中无法使用Rancher的VXLAN网络,现象是跨主机的容器无法正常通信,healthcheck服务一直无法更新正常状态。经过一系列走访排查,最终定位此现象只发生在阿里云的经典网络环境下。如果你也遭遇了同样的情况,请关注此文。
阿里云经典网络部署最新的stable(v1.6.7)版本并启用VXLAN网络,使用经典网络的内网IP加入两台主机,现象如下:
Rancher的VXLAN网络除了VXLAN本身的机制外,还需要在IPtables中的RAW表中进行数据包标记,然后在Filter表中对标记数据包设置ACCEPT规则,进而实现容器跨主机通信。但是在阿里云经典网络环境中,无论如何配置安全组功能,RAW表中始终无法匹配进入主机栈的数据包。
依据“大胆假设,小心求证”的troubleshooting原则,首先我们验证了使用经典网络的公网IP注册主机,VXLAN并没有问题,这说明存在某种安全规则是作用在经典网络的内网IP的。
其次,我们知道Rancher VXLAN的实现是基于Linux kernel的VXLAN module,IPtables的数据包处理也基本是kernel处理,所以理论上讲肯定系统中存在权限更高的组件截获了VXLAN的数据,因为我们测试了在其他公有云环境并无此问题,考虑阿里云会对经典网络的内网安全做诸多限制,所以怀疑阿里云镜像内做了一些特殊的定制。
以过往使用阿里云的经验,我们对系统中内置的“安全加固”组件疑惑很大,尝试删除这个组件,可以使用这个脚本 http://update.aegis.aliyun.com/download/uninstall.sh ,但重启机器后发现VXLAN网络依然不通。无法确定是否存在删除不彻底的情况,所以重建环境并在创建VM时选择去掉“安全加固”选项。
重新添加主机,发现VXLAN一切恢复正常。
我们也正在尽力与阿里云官方取得联系,确认这种情况是否存在误杀。当前可选择的临时方案除了按照上面的说明删除“安全加固”组件外,还可以在创建VM的时候选择不使用安全加固镜像,这样Rancher VXLAN就可以正常工作。
在这里,非常感谢社区用户的热情发问,没有大家对技术专注的态度和刨根问底的精神,Rancher也无法真正发现问题的根源,Rancher会一如既往地接受用户的问题与需求,改进自身产品,真真正正能够提供一个有生产力的工具。