Это дополнение к вопросу о том, как настроить VLAN на CoreOS [Сеть vlan без операционной системы CoreOS. Мой вопрос после того, как вы это настроите, как вы его используете?
Как запустить контейнер, который помещает интерфейс Ethernet этого контейнера в одну из этих конкретных VLAN?
ВНИМАНИЕ: НАПРАВЛЯЙТЕ ВПЕРЕД!
Сеть (сегодня) внутри Docker немного неудобна, поэтому нам нужно компенсировать множество предположений, сделанных от имени пользователей. Для этого вам нужно создать мостовой интерфейс, чтобы интерфейсы действительно работали, а затем передать конфигурацию через --lxc-conf
варианты в стиле, аналогичном этот ответ.
В качестве примера (Предостережения, это, скорее всего, не будет напрямую копироваться / вставляться. Я извергаю это из памяти):
Сначала мы настраиваем вспомогательный интерфейс на eth0
который находится на VLAN800:
/etc/sysconfig/network/05-eth0.netdev
:
[Match]
Name=eth0.800
[Network]
Address=192.168.20.25/24
Gateway=192.168.20.1
DNS=192.168.1.1
VLAN=800
Далее мы создаем мост для Другой устройства, которым потребуется доступ к этой VLAN:
/etc/sysconfig/network/20-br800.netdev
:
[NetDev]
Name=br800
Kind=bridge
Затем мы присоединяем созданный ранее подинтерфейс к мосту:
/etc/sysconfig/network/50-eth0-800.netdev
:
[Match]
Name=eth0.800
[Network]
Bridge=br800
Теперь мы находимся в состоянии, когда у нас есть сеть, которую мы хотим настроить на хосте, и мы можем делать что-то вроде:
docker run \
--net="none" \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.ipv4 = 192.168.20.30/24" \
--lxc-conf="lxc.network.ipv4.gateway = 192.168.20.1" \
--lxc-conf="lxc.network.link = br800" \
--lxc-conf="lxc.network.name = eth0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
В идеале нам не нужно было бы так много взламывать, чтобы настроить сеть таким образом, но это приводит к возможности создавать несколько мостов, подключенных к разным VLAN, и сегментировать трафик из разных контейнеров и заставлять его проходить через какой-то восходящий маршрутизатор. .