
Цель
- Настройка виртуальной сети, в которой запущено несколько контейнеров
- каждый контейнер должен быть доступен по своему IP-адресу из хост-сети
- контейнеры работают без прав root (предназначены для запуска тестовой сети из CI-раннера)
- допустимо запустить специальную
iptables
командуsudo
, которая позволяет осуществлять необходимые переадресации в виртуальную сеть
Причина, по которой я избегаю использования опубликованных портов, заключается в том, что я хочу, чтобы виртуальная сеть напоминала «реальность», в которой большее количество служб будет работать на отдельном оборудовании, а тот факт, что они будут использовать разные IP-адреса, имеет значение для службы координации.
Мой подход
$ podman network create --subnet 10.10.10.0/24 virtnet1
$ ( export DBUS_SESSION_BUS_ADDRESS=; podman run --rm -d --name nmt --network virtnet1 praqma/network-multitool )
(Этот DBUS
взлом — обходной путь дляЭта проблема)
Если я сейчас посмотрю, то iptables -L
увижу цепи CNI-FORWARD
, и я наивно предполагал, что это просто
sudo iptables -A CNI-FORWARD -d 10.10.10.0/24 -j ACCEPT
чтобы иметь возможность доступа к контейнерам из хостовой сети. Но они по-прежнему кажутся строго разделенными и недоступными. (В FORWARD
цепочке есть ACCEPT
политика по умолчанию, так что проблем здесь нет.)
Это в принципе невозможно (примеров я не нашел) или я просто что-то делаю не так?
Могут ли CNI-*
цепочки быть связаны с какими-либо предыдущими корневыми контейнерами, поскольку логически безкорневой контейнер в любом случае не сможет повлиять на что-либо iptables
связанное?