Хост Docker с несколькими VLAN

Общие сведения

У меня есть сервер с одним физическим сетевым интерфейсом, на котором работает 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

0
задан 24 January 2019 в 15:40
2 ответа

для параметра -p , вы можете использовать формат ip: hostPort: containerPort , например

docker run -p 192.168.1.199:9000:9000 ...

Подробнее о доступных форматах см. doc

0
ответ дан 24 November 2019 в 01:08

Возможно, уже слишком поздно, но я публикую то, что сработало на моей стороне, когда транк 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. Удачи :-)

0
ответ дан 16 April 2020 в 10:56

Теги

Похожие вопросы