Вопрос или проблема
Я использую образ ubuntu для запуска контейнера pod. И хочу использовать iptables для перехвата входящего трафика в sidecar.
Сейчас мы используем apt-get install iptables и получаем только iptables V1.8.
Тем не менее, у нас есть машины с ядром 3.10.x и 5.10.x в производственной среде. Поэтому мы должны использовать iptables legacy.
Вот проблема: при выводе правил мы получаем
Предупреждение: Расширение CONNMARK не поддерживается, отсутствует модуль ядра?
CONNMARK all -- anywhere anywhere CONNMARK save
На узле:
uname -r
3.10.0-957.12.1.el7.x86_64
cat /boot/config-3.10.0-957.12.1.el7.x86_64 |grep CONFIG_NETFILTER_XT_MATCH_CONNMARK
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
iptables -V
iptables v1.4.21
И предупреждение отсутствует на узле, когда выполняется команда: iptables -t mangle -L
Внутри контейнера:
$ iptables -V
iptables v1.8.10 (legacy)
$ which iptables
/usr/sbin/iptables
$ ls -alh /usr/sbin/iptables
lrwxrwxrwx 1 root root 26 Apr 8 2024 /usr/sbin/iptables -> /etc/alternatives/iptables
$ ls -alh /etc/alternatives/iptables
lrwxrwxrwx 1 root root 25 Oct 23 17:55 /etc/alternatives/iptables -> /usr/sbin/iptables-legacy
Dockerfile
FROM --platform=amd64 ubuntu:latest
RUN apt-get update && apt-get install -y iptables
RUN update-alternatives --set iptables /usr/sbin/iptables-legacy
Еще одна вещь: функция работает хорошо, кроме этого предупреждения.
И когда используем образ centos7 для выполнения той же работы, предупреждения также не видно, и версия iptables v1.4.21.
Итак, мой вопрос: откуда берется это предупреждение? Какой у него эффект?
PS: почему использование connmark — это другая история, не обсуждается здесь.
Ответ или решение
Сообщение об ошибке, которое вы получили:
Warning: Extension CONNMARK is not supported, missing kernel module?
указывает на то, что в текущем окружении для вашей версии iptables (v1.8.10 в контейнере на базе Ubuntu) отсутствует поддержка модуля CONNMARK
, который, в свою очередь, был включен в ядро (в вашем случае 3.10.x). Важно отметить, что такая проблема может быть вызвана сочетанием следующих моментов.
Причины возникновения предупреждения
-
Отсутствие модуля
connmark
в ядре:
Ядро версии 3.10.x, которое вы используете на одном из ваших серверов, действительно имеет поддержкуCONNMARK
, но возможно, он не загружен или доступен в вашем окружении. Вы можете проверить это с помощью следующей команды:lsmod | grep connmark
Если ничего не выводится, модуль не загружен, и вам, возможно, придется его загрузить:
modprobe xt_connmark
-
Использование разных версий iptables:
Хотя вы работаете сiptables-legacy
в контейнере, он может иметь ограничения по сравнению с современными версиями iptables, которые используют библиотеку nftables. Следовательно, команда может выдавать предупреждение о том, что не может найти необходимые расширения во время выполнения правила. -
Контекст выполнения:
Поскольку вы упомянули, что все работает правильно, кроме этого предупреждения, следует отметить, что это предупреждение в данном случае может не повлиять на выполняемую функциональность, но стоит учитывать, что некоторые функциональные возможностиCONNMARK
могут быть недоступны.
Влияние предупреждения
Это предупреждение указывает лишь на недостаток модуля, используемого в контексте работы вашей сетевой конфигурации. Если ваш код, использующий CONNMARK
, функционирует правильно и не вызывает критических ошибок, можно рассматривать это предупреждение как несущественное. Тем не менее, рекомендуется в будущем:
- Проверить наличие необходимых модулей и их работу в вашей сетевой конфигурации.
- По возможности обновить ядро системы на более современную версию, чтобы использовать новейшие функции и расширения.
Что делать дальше
- Загрузка модуля
connmark
: Если он не загружен, загружайте его, как указано выше. - Убедитесь, что контейнер работает с версиями, поддерживающими необходимые модули: Если используется старый контейнер с устаревшими версиями, рассмотрите возможность создания контейнера на основе более новых версий базового образа, в которых поддерживаются все нужные модули.
- Логи и диагностика: Ведите логирование всех ошибок и предупреждений, чтобы иметь возможность их анализировать в будущем.
Следование этим рекомендациям поможет вам избежать предупреждений и гарантирует, что ваша сеть вверх и работает стабильно.