Prisma Cloud OpenShift 中的 Defender 部署导致 HAProxy Pod 因 Netlink 套接字上没有可用缓冲区空间而崩溃
9015
Created On 06/05/22 06:42 AM - Last Modified 05/09/23 08:18 AM
Symptom
- Prisma Cloud 由于 Netlink 套接字上没有可用的缓冲区空间,OpenShift 环境中的 Defender 部署导致 HAProxy Pod 崩溃。
- Kubelet 日志建议 HAProxy Pod 由于无法响应活动探测而重启,并显示以下错误消息:
Container failed liveness probe
- 另一方面,Defender 日志包含以下错误消息:
DEBU Failed to read from .. :HostTCPEgress runtimeData: : netlink receive: recvmsg: no buffer space available可以通过以下方式在 OpenShift 中重现此行为:
- 使用最小的 netlink 套接字缓冲区重新编译 Defender
- 启用云原生网络Firewall(CNNF ).
- 暂停Defender进程一段时间,导致缓冲区溢出。
Environment
- Prisma Cloud
- 开班
Cause
- 尽管 Defender 日志显示网络中断(用户空间网络链接缓冲区已满导致数据包丢失)仅发生在CNNF主机监控,CNNF功能具有故障开放模型,这意味着无法处理以提供判决的数据包将被重新注入堆栈并被接受。
- 但是,当用户空间缓冲区已满时,内核版本 < 4.6 不支持故障打开模型,但仅当内核队列已满时才支持。
- 对于 > = 4.6 的内核版本,此行为已被修补,在这种情况下将重新注入和接受数据包:当 netlink 单播失败时 Honor NFQA_CFG_F_FAIL_OPEN .
- 这些发现已通过`/proc/net/netfilter/nfnetlink_queue 得到证实: NfnetLinkQueue - 文件
- RHEL 带有内核版本 3.10 的 7.9 会丢弃此类数据包。
- 内核版本为 5.8 的 Ubuntu 接受此类数据包。
Resolution
可用于解决此问题的可行方法是:
- 禁用主机监控下雷达 > 设置 > 禁用“主机网络监控”。 有关更多信息,请参阅:云原生网络Firewall(CNNF )
2. 将主机升级到受支持的内核版本 4.18 或更高版本(例如,RHEL8 主机基于包含补丁的内核 4.18)。
3. 考虑通过“/proc/sys/net/core/rmem_default”和“/proc/sys/net/core/rmem_max”增加用户空间网络链接缓冲区的大小。 如果此值等于 Defender 定义的 nfqueue 队列大小,则不应丢弃数据包,因为内核将在队列已满的帐户上重新注入并接受它们: https://elixir.bootlin.com/linux/v3.10/source/net/netfilter/nfnetlink_queue_core.c#L516 .
Additional Information
- 如果您想继续使用CNNF(网络监控工具),将主机升级到支持的内核版本4.18或更高版本,以便内核能够有组织地重新注入数据包,以避免此类问题的发生。
- 在主机上运行以下命令将为您提供确切的内核版本。
uname -r
- 如果使用 Amazon Linux 2 主机,请在此处参考其发行说明: https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html