Prisma Cloud OpenShift での Defender の展開により、Netlink ソケットで使用可能なバッファー領域がないために HAProxy Pod がクラッシュする
9023
Created On 06/05/22 06:42 AM - Last Modified 05/09/23 08:17 AM
Symptom
- Prisma Cloud OpenShift 環境での Defender の展開により、Netlink Socket で使用可能なバッファー領域がないため、HAProxy Pod がクラッシュします。
- Kubelet ログは、ライブネス プローブへの応答に失敗したために HAProxy ポッドが再起動されたことを示しており、次のエラー メッセージが表示されます。
Container failed liveness probe
- 一方、Defender ログには次のエラー メッセージが含まれています。
DEBU Failed to read from .. :HostTCPEgress runtimeData: : netlink receive: recvmsg: no buffer space availableこの動作は、次の方法で OpenShift で再現できます。
- 最小限のネットリンク ソケット バッファを使用して Defender を再コンパイルする
- クラウド ネイティブ ネットワークを有効にするFirewall(CNNF )。
- Defender プロセスをしばらく一時停止して、バッファーをオーバーフローさせます。
Environment
- Prisma Cloud
- OpenShift
Cause
- Defender のログは、ネットワークの中断 (ユーザー空間の netlink バッファーがいっぱいになり、パケットがドロップされる) が以下から排他的に発生することを示していますが、CNNFホスト監視、CNNF機能には、判定を提供するために処理できないパケットがスタックに再注入され、受け入れられることを意味するフェールオープン モデルがあります。
- ただし、カーネル バージョン < 4.6 では、ユーザー空間バッファーがいっぱいの場合はフェール オープン モデルが適用されず、カーネル キューがいっぱいの場合にのみ適用されます。
- カーネル バージョン > = 4.6 では、この動作にパッチが適用され、そのような場合にパケットが再注入されて受け入れられるようになります。 netlink ユニキャストが失敗したときに 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