内核bug:auth_rpcgss模块引发的容器netns内存泄露与弹性网卡残留

0 下载量 200 浏览量 更新于2024-08-30 收藏 352KB PDF 举报
【内核模块auth_rpcgss】netns引用计数泄露引发的问题 在这个Linux内核bug中,关键问题是内核模块auth_rpcgss中的netns(网络命名空间)引用计数管理出现了漏洞。当特权容器(privileged containers)启用use-gss-proxy功能时,容器终止后,其相关的网络命名空间未能正确释放,导致虚拟弹性网卡(virtual Ethernet card, VETH)残留,从而引发了内存泄露问题。这在长期运行的服务器上尤为明显,且只在特定环境下,如在Kubernetes(k8s)的privileged容器场景中,才会出现弹性网卡残留的现象。 定位过程中的关键步骤包括: 1. **识别问题现象**:问题在生产环境中稳定重现,但在容器团队的测试环境中难以复现,这表明问题可能依赖于某些特定条件或配置。 2. **追踪内核行为**:通过ftrace(Linux系统调用跟踪工具)来分析veth_dellink()函数,这是删除弹性网卡的核心函数。研究异常情况下的函数调用栈,以便找出残留网卡的原因。 3. **设置kprobe事件**:编写ftrace脚本,捕获pveth_dellink()函数的执行,以及与其相关的堆栈信息,以对比正常删除和残留网卡时的不同行为。 4. **深入剖析**:对比分析正常情况下veth_dellink()的调用路径和出现残留网卡时的差异,可能是由于引用计数处理不当,或者与netns的生命周期管理有关的其他因素。 5. **未解决问题**:虽然upstream(内核源代码维护者)尚未修复此bug,但受影响的组织已经内部开发了patch,并正在等待测试验证。 这个问题的解决需要深入了解内核网络命名空间的管理机制、gss-proxy相关模块的交互以及特权容器环境下的特殊性。了解并修复这一bug对于维护高可用性和内存管理的稳定性至关重要,同时也有助于提升对Linux内核深层次工作的理解。