【问题标题】:Kubernetes - segfault in libnftnl.so.11.3.0 on flannel CNIKubernetes - 法兰绒 CNI 上的 libnftnl.so.11.3.0 中的段错误
【发布时间】:2021-07-07 06:33:19
【问题描述】:

我有一个自我管理的 Kubernetes 集群,由一个主节点和 3 个工作节点组成。我在集群内使用集群网络接口flannel

在我所有的机器上,我都可以看到以下类型的内核消息:

Apr 12 04:22:24 worker-7 kernel: [278523.379954] iptables[6260]: segfault at 88 ip 00007f9e69fefe47 sp 00007ffee4dff356 error 4 in libnftnl.so.11.3.0[7f9e69feb000+16000]
Apr 12 04:22:24 worker-7 kernel: [278523.380094] Code: bf 88 00 00 00 48 8b 2f 48 39 df 74 13 4c 89 ee 41 ff d4 85 c0 78 0b 48 89 ef 48 8b 6d 00 eb e8 31 c0 5a 5b 5d 41 5c 41 5d c3 <48> 8b 87 88 00 00 00 48 81 c7 78 00 00 00 48 39 f8 74 0b 85 f6 74
Apr 12 05:59:10 worker-7 kernel: [284329.182667] iptables[13978]: segfault at 88 ip 00007fb799fafe47 sp 00007fff22419b36 error 4 in libnftnl.so.11.3.0[7fb799fab000+16000]
Apr 12 05:59:10 worker-7 kernel: [284329.182774] Code: bf 88 00 00 00 48 8b 2f 48 39 df 74 13 4c 89 ee 41 ff d4 85 c0 78 0b 48 89 ef 48 8b 6d 00 eb e8 31 c0 5a 5b 5d 41 5c 41 5d c3 <48> 8b 87 88 00 00 00 48 81 c7 98 00 00 00 48 39 f8 74 0b 85 f6 74
Apr 12 08:29:25 worker-7 kernel: [293343.999073] iptables[16041]: segfault at 88 ip 00007fa40c7f7e47 sp 00007ffe04ba9886 error 4 in libnftnl.so.11.3.0[7fa40c7f3000+16000]
Apr 12 08:29:25 worker-7 kernel: [293343.999165] Code: bf 88 00 00 00 48 8b 2f 48 39 df 74 13 4c 89 ee 41 ff d4 85 c0 78 0b 48 89 ef 48 8b 6d 00 eb e8 31 c0 5a 5b 5d 41 5c 41 5d c3 <48> 8b 87 88 00 00 00 48 81 c7 98 00 00 00 48 39 f8 74 0b 85 f6 74

我缩小了范围,即消息源自 kube-flannel-ds pod。我有这样的日志消息:

Failed to ensure iptables rules: Error checking rule existence: failed to check rule existence: running [/sbin/iptables -t filter -C FORWARD -s 10.244.0.0/16 -j ACCEPT --wait]: exit status -1:
Failed to ensure iptables rules: Error checking rule existence: failed to check rule existence: running [/sbin/iptables -t nat -C POS TROUTING -s 10.244.0.0/16 ! -d 224.0.0.0/4 -j MASQUERADE --random-fully --wait]: exit status -1: 

有人能解释一下这类消息的含义吗?这可能是硬件问题吗?将 flannel 切换到另一个 kuberentes 容器网络接口 (CNI) 是否有意义 - 例如Calico?

【问题讨论】:

  • Apols @Ralph 我在 GH 看到你! :)
  • 是的,但我仍然无法理解消息试图告诉我什么?它只是 libnftnl.so 中的一个错误吗?
  • 我可以看到 debian buster 使用 nftables 而不是 iptables,这在这一点上与 Kubernetes 不兼容。 Calico 支持以FELIX_IPTABLESBACKEND 支持的 nft。我建议将 CNI 换成印花布。
  • 感谢您的回复。我会试试 calico,我会在这里发布我的结果。

标签: kubernetes flannel cni


【解决方案1】:

正如 cmets debian buster 中已经提到的,使用 nftables 支持而不是 iptables:

注意:从 Debian Buster 开始,iptables 将被 nftables 取代 - 参考 here

不幸的是,此时 nftables 是 not compatible 与 kubernetes。

在 Linux 中,nftables 可作为内核 iptables 子系统的现代替代品。 iptables 工具可以充当兼容层,其行为类似于 iptables,但实际上是配置 nftables。这个 nftables 后端与当前的 kubeadm 包不兼容:它会导致重复的防火墙规则并破坏kube-proxy。您可以尝试切换到如here 所述的旧选项,但我不确定此解决方案,因为我无法使用您的操作系统对其进行测试。我用这个here解决了与debian类似的情况。

另一种方法是切换到 Calico,实际上是 supports nftbackedFELIX_IPTABLESBACKEND。此参数控制 iptables 二进制 Felix 使用的变体。将此设置为 Auto 以自动检测后端。如果需要特定的后端,则对使用 netfilter 后端的主机使用 NFT 或对其他使用 Legacy。 [默认:Auto]。

在使用 containerd 安装 calico 时,还请查看 this 案例。

【讨论】:

  • 我从 flannel 切换到 calico,现在消息不见了。
猜你喜欢
  • 2020-03-26
  • 1970-01-01
  • 2022-10-05
  • 2021-06-24
  • 2020-03-22
  • 2020-01-22
  • 2020-05-21
  • 2017-07-05
  • 2022-11-03
相关资源
最近更新 更多