问题背景
这个问题[1]定位到VMWare
虚拟化层面后就一直搁置下来了,但考虑到测试环境存在大量虚拟机部署的情况,并且支持虚拟化部署也是早晚的事,所以后续也在一直关注VMWare
和Redhat
的相关资料。
原因分析
幸运的是,从Redhat
的官网里还真的找到了相关问题[2],通过官网说明了解到,该问题出现的环境是Redhat 8.3
和8.4
,使用vmxnet3
的适配器,并且使用UDP
隧道协议,比如vxlan
或GRE
。
官方给出的解决方案是:
- 升级
Redhat
到8.5 (kernel-4.18.0-348.el8)
及以后版本。 - 升级
VMware ESXi
到6.7P07
,7.0U3 (7.0.3)
及以后版本。
上述更新包括对vmxnet3 NIC
不支持的隧道禁用 tx-checksum-ip-generic
的逻辑,因此最终结果与下面的解决方法相同。
1 | ethtool -K DEVNAME tx-checksum-ip-generic off |
但是,实测结果显示,升级Redhat
和VMware
均无法解决,而临时禁用的命令是可以的。考虑到临时命令还涉及到持久化的问题,还是需要另找方法。
既然使用vmxnet3
网卡不行,是不是能换网卡类型?果然,根据这个思路,继续查找资料[3],发现使用E1000
类型的网卡可以解决该问题,实测结果也符合预期。
解决方案
临时方案:在创建虚拟机时,把网络适配器的类型改为 E1000
或E1000e
。
永久方案:依然需要等待VMWare
和Redhat
的官方修复。
参考资料
- https://lyyao09.github.io/2022/06/05/k8s/K8S%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5-VMWare%E8%99%9A%E6%8B%9F%E5%8C%96%E7%8E%AF%E5%A2%83%E4%B8%8BPod%E8%B7%A8VXLAN%E9%80%9A%E4%BF%A1%E5%BC%82%E5%B8%B8/
- https://access.redhat.com/solutions/5881451
- https://zhangguanzhang.github.io/2022/07/28/redhat84-vxlan-esxi