У меня есть VLAN сервера 10.101.10.0/24, а мой хост Docker - 10.101.10.31. Как настроить сеть моста на моем хосте Docker (VM), чтобы все контейнеры могли напрямую подключаться к локальной сети LAN, не перенаправляя порты по умолчанию по умолчанию 172.17.0.0/16? Я попытался выполнить поиск, но все howtos, которые я нашел до сих пор, привели к потере сеанса SSH, который мне пришлось переходить в виртуальную машину с консоли, чтобы вернуть те шаги, которые я сделал.
Докер на CentOS с мостом в сеть LAN
Ответ 1
Существует несколько способов сделать это. Два из них, с которыми я столкнулся, - это маршрутизация подсети на мост докеров и использование настраиваемого моста в локальной сети хоста.
Мост докеров, маршрутизируемая сеть
Это полезно только для использования встроенных инструментов докеров для настройки докеров. У него есть сторона, нуждающаяся в том, чтобы добавить маршрут к вашей сети, который находится за пределами докеров, и обычно является ручным (или полагается на "сетевого парня" ).
-
Включить переадресацию IP-адресов
/etc/sysctl.conf: net.ipv4.ip_forward = 1 sysctl -p /etc/sysctl.conf
Создайте мост-докер с новой подсетью в вашей сети VM, скажем
10.101.11.0/24
docker network create routed0 --subnet 10.101.11.0/24
-
Расскажите остальной сети, что
10.101.11.0/24
должен быть перенаправлен через10.101.10.X
, где X - IP вашего хост-докера. Это конфигурация внешнего маршрутизатора/шлюза/ "сетевого парня". На шлюзе linux вы можете добавить маршрут с помощью:ip route add 10.101.11.0/24 via 10.101.10.31
-
Создайте контейнеры на мосту с адресами 10.101.11.0/24.
docker run --net routed0 busybox ping 10.101.10.31 docker run --net routed0 busybox ping 8.8.8.8
Тогда сделай. Контейнеры имеют маршрутизируемые IP-адреса. Если вы согласны с сетевой стороной или запускаете что-то вроде RIP/OSPF, который заботится о маршрутизации, то это самое чистое решение.
Пользовательский мост, существующая сеть (и интерфейс)
Это может не потребовать установки внешней сети. Недостатком является то, что настройка на хосте docker сложнее. Основной интерфейс требует этого моста во время загрузки, поэтому он не является нативной установкой docker network
. Pipework или требуется ручная настройка контейнера.
Использование виртуальной машины может сделать это немного сложнее, поскольку вы используете дополнительные интерфейсы с дополнительными MAC-адресами по основному интерфейсу VM, который нуждается в дополнительном "Promiscuous" сначала настройте конфигурацию, чтобы это могло работать.
Постоянная сетевая конфигурация для мостовых интерфейсов зависит от дистрибутива. Следующие команды описывают, как настроить интерфейс и исчезнуть после перезагрузки. Вам понадобится консольный доступ или отдельный маршрут в вашу виртуальную машину при изменении конфигурации основного сетевого интерфейса.
-
Создайте мост на хосте.
ip link add name shared0 type bridge ip link set shared0 up
В
/etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=shared0 TYPE=Bridge BOOTPROTO=static DNS1=8.8.8.8 GATEWAY=10.101.10.1 IPADDR=10.101.10.31 NETMASK=255.255.255.0 ONBOOT=yes
-
Прикрепите основной интерфейс к мосту, обычно
eth0
ip link set eth0 up ip link set eth0 master shared0
В
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 ONBOOT=yes TYPE=Ethernet IPV6INIT=no USERCTL=no BRIDGE=shared0
-
Переконфигурируйте свой мост, чтобы иметь
eth0
ip config.ip addr add dev shared0 10.101.10.31/24 ip route add default via 10.101.10.1
-
Прикрепите контейнеры к мосту с адресами
10.101.10.0/24
.CONTAINERID=$(docker run -d --net=none busybox sleep 600) pipework shared1 $CONTAINERID 10.101.10.43/[email protected]
Или используйте клиент DHCP внутри контейнера
pipework shared1 $CONTAINERID dhclient