Общие сведения
У меня есть сервер с одним физическим сетевым интерфейсом, на котором работает Docker. Этот интерфейс настроен как магистраль 802.1Q. Чтобы избежать асимметричной маршрутизации, я настроил таблицы маршрутизации для каждой подсети. Это мои интерфейсы / etc / network / interfaces:
auto enp3s0
iface enp3s0 inet dhcp
post-up ip route add 192.168.1.0/24 dev enp3s0 table 1
post-up ip route add default via 192.168.1.1 table 1
post-up ip rule add from 192.168.1.0/24 table 1 priority 101
post-up ip route flush cache
pre-down ip rule del from 192.168.1.0/24 table 1 priority 101
pre-down ip route flush table 1
pre-down ip route flush cache
auto enp3s0.2
iface enp3s0.2 inet dhcp
hwaddress ether 00:11:22:33:44:55
post-up ip route add 192.168.2.0/24 dev enp3s0.2 table 2
post-up ip route add default via 192.168.2.1 table 2
post-up ip rule add from 192.168.2.0/24 table 2 priority 102
post-up ip route flush cache
pre-down ip rule del from 192.168.2.0/24 table 2 priority 102
pre-down ip route flush table 2
pre-down ip route flush cache
auto enp3s0.4
iface enp3s0.4 inet dhcp
hwaddress ether 00:11:22:33:44:56
post-up ip route add 192.168.4.0/24 dev enp3s0.4 table 4
post-up ip route add default via 192.168.4.1 table 4
post-up ip rule add from 192.168.4.0/24 table 4 priority 104
post-up ip route flush cache
pre-down ip rule del from 192.168.4.0/24 table 4 priority 104
pre-down ip route flush table 4
pre-down ip route flush cache
...
Эта настройка работает нормально, если я запускаю контейнер с параметром --net = host. Контейнеры доступны из каждой подсети / vlan.
Проблема
Я хотел бы иметь больше контроля над портами и доступностью (не все докеры должны быть доступны в каждой подсети). Если я использую параметр -p (например, -p 3777: 3777), докеры больше не будут доступны.
Это руководство https://hicu.be/docker-networking-macvlan-vlan-configuration решить аналогичную проблему, но я не хочу расширять свои vlan до докера и назначать IP для каждого экземпляра докера. Это слишком.
Желаемое решение
У моего сервера есть IP в каждой подсети / vlan, 192.168.1.199 (родной vlan / mgmt) 192.168.2.199 (vlan2) 192.168.4.199 (vlan4)
Я хотел бы запустить докеры с параметром -p и выбрать, на каком интерфейсе они доступны. например docker run --p 9000: 9000 --name portainer ... и он должен быть доступен только через 192.168.1.199:9000
Может быть, мои настройки маршрута ip / ip неправильно настроены или / и мне нужен мост докеров для каждой подсети ... но это тот момент, когда я не могу получить никаких в дальнейшем. До сих пор, если я выбираю параметр --p и докер подключается к мосту докеров по умолчанию ... докер вообще недоступен.
Есть ли у вас какие-нибудь идеи?
Приветствую, Марка
Править: Контейнер portainer_test недоступен через 192.168.4.199:9001[1296 visible
Возможно, уже слишком поздно, но я публикую то, что сработало на моей стороне, когда транк VLAN входит в мой работающий докер NAS....
Вам нужно создать собственную сеть BRIDGE = > https://docs.docker.com/network/network-tutorial-standalone/#use-user-defined-bridge-networks Созданный мост по умолчанию привязывается ко всем IP-адресам хоста (0.0.0.0), что является вашей проблемой.
Убедитесь, что вы используете этот параметр во время его создания: com.docker.network.bridge.host_binding_ipv4 с желаемым IP-адресом сервера (в вашем случае 192.168.1.199, чтобы созданный мост привязывался только к этому IP-адресу)
Затем просто укажите (в вашем примере), что контейнер Portainer использует эту определяемую пользователем сеть моста (-- сети при создании/запуске контейнера).
В противном случае вы также можете изучить тип сети macvlan. Удачи :-)