Есть ли конфликт между правилами iptables докера и podman? - PullRequest
0 голосов
/ 15 февраля 2019

Я установил Docker и Podman на одной машине.Это моя первая проблема?Может быть.Но моя цель - запустить оба варианта, и я все равно хотел бы продолжить.

Моя проблема в следующем: кажется, существует конфликт iptables между правилами Докера и правилами Подмана, и мое рабочее решениене имеет никакого смысла для меня.

Информация о версии: ОС: RHEL 7.6 Подман: 0.11.1.1 Докер: 18.09.1 ​​Iptables: 1.4.21

Два пункта информации:

  1. Демон docker добавляет правила iptables для работы с контейнерами при запуске.
  2. Podman добавляет правила iptables через CNI (интерфейс контейнера сети) для работы с контейнерами при запуске контейнера.

Я использую контейнер с podman, который предоставляет порт (скажем, 5000, например).Я создал 3 тестовых примера, которые помогают проиллюстрировать мой вопрос и чрезвычайно странное поведение, с которым я сталкиваюсь в случае 3, который заставляет работать удаленный доступ.Читайте дальше.

  1. Первый случай имеет смысл: я устанавливаю Podman нормально, без установки Docker и запускаю контейнер.Пуф!Контейнер работает, и я могу получить удаленный доступ к порту, как я и ожидал.

  2. Во втором случае происходит сбой удаленного доступа.Я обычно устанавливаю Podman, устанавливаю и запускаю сервис Docker , затем запускаю свой контейнер с Podman .Boom.Сбой удаленного доступа, потому что нет маршрута к хосту.

Прежде чем перейти к третьему случаю, важно отметить два очень специфических правила iptables.Вы можете просмотреть эти правила (если у вас запущен демон Docker и запущен контейнер Podman), выполнив:

iptables -t nat -nL PREROUTING

Вывод команды:

Chain PREROUTING (policy ACCEPT)
target    prot opt source            destination
DOCKER    all  --  0.0.0.0/0         0.0.0.0/0      ADDRTYPE match dst-type LOCAL
CNI-HOSTPORT-DNAT    all  --  0.0.0.0/0         0.0.0.0/0      ADDRTYPE match dst-type LOCAL

Теперь приходиттретий случай:

Так что я ковыряюсь в iptables и знаю достаточно, чтобы быть опасным.

Я решаю удалить правило CNI-HOSTPORT-DNAT:

iptables -t nat -D PREROUTING 2

И вдруг, Я могу снова получить удаленный доступ к контейнеру через порт 5000.

Мой вопрос:

Почему удаление вышеупомянутого правила заставляет вещи работать снова?Можно подумать, что удаление правила, созданного CNI, нарушит работу сети Podman.Но это не так.Я сбит с толку!

Заранее спасибо.

ОБНОВЛЕНИЕ: выяснил проблему, и это была моя ошибка.

Мои пакеты правильно отправлялись в цепочку FORWARDпосле DNAT, но в этой цепочке по умолчанию используется DROP, и в этой цепочке нет правил для приема пакетов, привязанных к порту 5000. Как только я добавил правило FORWARD для приема пакетов dport = 5000, оно начало работать.

Этот вопрос можно закрыть.

...