Kubernetes - segfault в libnftnl.so.11.3.0 на фланелевом CNI

У меня есть самоуправляемый кластер Kubernetes, состоящий из одного главного узла и 3 рабочих узлов. Я использую фланель в кластере сетевой интерфейс кластера.

На всех своих машинах я вижу следующие сообщения ядра:

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. У меня есть такие сообщения журнала:

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: 

Может кто-нибудь объяснить, на что указывают такие сообщения? Может это аппаратная проблема? Имеет ли смысл переключаться с фланелевой формы на другой сетевой интерфейс контейнера kuberentes (CNI) - например, Calico?


person Ralph    schedule 12.04.2021    source источник
comment
Вы просмотрели github.com? / flannel-io / flannel /   -  person Rob Kielty    schedule 12.04.2021
comment
Аполс @ Ральф, я вижу тебя там, на GH! :)   -  person Rob Kielty    schedule 12.04.2021
comment
да, но я все еще не могу понять, что мне пытается сказать сообщение? Это просто ошибка в libnftnl.so?   -  person Ralph    schedule 12.04.2021
comment
С какой ОС работают ваши узлы? Вы отключили firewalld, selinux и т. Д.? Как вы загрузили свой кластер?   -  person acid_fuji    schedule 12.04.2021
comment
Я использую debian buster. Я загружаю кластер с помощью официального руководства kubeadm с помощью containerd   -  person Ralph    schedule 12.04.2021
comment
Да, быстро прочитав затронутые вами проблемы, я понял, что проблема связана с libnftnl ...   -  person Rob Kielty    schedule 12.04.2021
comment
Я использую kubeadm install сегодня на Ubuntu 18.05.5 LTS, iptables v.1.6.1, я воспользуюсь фланелью и посмотрю, смогу ли я воспроизвести проблему.   -  person Rob Kielty    schedule 12.04.2021
comment
Я вижу, что debian buster использует nftables вместо iptables, что на данный момент несовместимо с Kubernetes. Calico поддерживает NFT с FELIX_IPTABLESBACKEND. Я бы посоветовал заменить CNI на ситцевую.   -  person acid_fuji    schedule 12.04.2021
comment
спасибо за ваши ответы. Я попробую ситцевую ткань и опубликую здесь свои результаты.   -  person Ralph    schedule 12.04.2021


Ответы (1)


Как уже упоминалось в комментариях, debian buster использует nftables вместо iptables:

ПРИМЕЧАНИЕ. iptables заменяется на nftables, начиная с Debian Buster - справочник здесь

К сожалению, nftables - это не совместим в данный момент с кубернетами.

В Linux nftables доступен как современная замена подсистеме ядра iptables. Инструменты iptables могут выступать в качестве уровня совместимости, ведя себя как iptables, но фактически настраивая nftables. Этот бэкэнд nftables несовместим с текущими пакетами kubeadm: он вызывает дублирование правил брандмауэра и нарушает kube-proxy. Вы можете попробовать переключиться на устаревший вариант, как описано в здесь, но я не уверен насчет этого решения, так как у меня нет возможности протестировать его с вашими ОС. Я решил аналогичный случай с debian с помощью этого здесь.

Альтернативный способ - переключиться на Calico, который на самом деле поддерживает nftbacked с FELIX_IPTABLESBACKEND. Этот параметр определяет, какой вариант двоичного файла iptables использует Феликс. Установите значение Auto для автоматического определения серверной части. Если требуется конкретный бэкэнд, используйте NFT для хостов, использующих бэкэнд netfilter, или Legacy для других. [По умолчанию: Auto].

При установке calico с помощью containerd также обратите внимание на это дело.

person acid_fuji    schedule 12.04.2021
comment
Я переключился с фланели на calico, и теперь сообщений больше нет. - person Ralph; 12.04.2021