Prisma Cloud OpenShift 中的 Defender 部署导致 HAProxy Pod 因 Netlink 套接字上没有可用缓冲区空间而崩溃

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 中重现此行为:
  1. 使用最小的 netlink 套接字缓冲区重新编译 Defender
  2. 启用云原生网络Firewall(CNNF ).
  3. 暂停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 - 文件
笔记:
  1. RHEL 带有内核版本 3.10 的 7.9 会丢弃此类数据包。
  2. 内核版本为 5.8 的 Ubuntu 接受此类数据包。


Resolution


可用于解决此问题的可行方法是:
  1. 禁用主机监控下雷达 > 设置 > 禁用“主机网络监控”。 有关更多信息,请参阅:云原生网络Firewall(CNNF )
屏幕截图 2022-06-05 在 2.02.57PM .png

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


Actions
  • Print
  • Copy Link

    https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA14u000000Cps9CAC&lang=zh_CN&refURL=http%3A%2F%2Fknowledgebase.paloaltonetworks.com%2FKCSArticleDetail

Choose Language