Назад | Перейти на главную страницу

Хост-докер CoreOS не может получить доступ к контейнерам по IP; другие компьютеры в локальной сети могут

У нас есть проблема в том, что наш сервер, на котором размещены наши контейнеры, не может получить к ним доступ по своему IP-адресу, в то время как другие компьютеры в сети могут. У нас есть следующая настройка нашей локальной сети:

Итак, наша сеть выглядит так, очень просто:

    |---------|           |---------|           |---------|
    | Docker  |-----------| Router  |-----------| Other computers/
    | Host    |-----------|         |           | NAS/etc |
    |---------|           |---------|           |---------|

Чтобы сделать наши контейнеры доступными для нашей сети, мы последовали этому ответу: https://stackoverflow.com/a/35799206

Т.е. мы использовали следующие команды:

 docker network create \
  --subnet 192.168.0.0/16 \
  --aux-address "DefaultGatewayIPv4=192.168.0.1" \
  --gateway=192.168.1.1 \
  -o com.docker.network.bridge.name=br-internal_lan internal_lan

 sudo brctl addif br-internal_lan eno1
 sudo ip a del 192.168.1.1/16 dev br-internal_lan

Все идет нормально. Наш сервер имеет IP 192.168.0.3 на eno3, чего мы и хотим. eno1 подключается отдельным кабелем к роутеру и используется для моста. Мост получает IP 192.168.0.83. Если мы запустим наш контейнер с:

docker run --net=internal_lan -d --ip 192.168.1.0 serverimage:latest

Получаем следующий сценарий:

Вот несколько примеров настроек с нашего сервера:

ifconfig

br-internal_lan: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.0.83  netmask 255.255.0.0  broadcast 192.168.255.255
    inet6 fe80::42:8cff:fe30:3b4a  prefixlen 64  scopeid 0x20<link>
    ether 02:42:8c:30:3b:4a  txqueuelen 0  (Ethernet)
    RX packets 430214  bytes 62591783 (59.6 MiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 4244  bytes 546612 (533.8 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet6 fe80::225:90ff:fe5d:6b80  prefixlen 64  scopeid 0x20<link>
    ether 00:25:90:5d:6b:80  txqueuelen 1000  (Ethernet)
    RX packets 829691  bytes 296523943 (282.7 MiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 78684  bytes 87560787 (83.5 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    device memory 0xdf400000-df47ffff

eno3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.0.3  netmask 255.255.0.0  broadcast 192.168.255.255
    inet6 fe80::225:90ff:fe5d:6b82  prefixlen 64  scopeid 0x20<link>
    ether 00:25:90:5d:6b:82  txqueuelen 1000  (Ethernet)
    RX packets 1744808  bytes 1583970565 (1.4 GiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 1019186  bytes 1085667196 (1.0 GiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    device memory 0xdf200000-df27ffff

<other interfaces omitted>

маршрут

default         router.asus.com 0.0.0.0         UG    1024   0        0 eno3
default         router.asus.com 0.0.0.0         UG    1024   0        0 br-internal_lan
172.17.0.0      *               255.255.0.0     U     0      0        0 docker0
192.168.0.0     *               255.255.0.0     U     0      0        0 eno3
192.168.0.0     *               255.255.0.0     U     0      0        0 br-internal_lan
router.asus.com *               255.255.255.255 UH    1024   0        0 eno3
router.asus.com *               255.255.255.255 UH    1024   0        0 br-internal_lan

Мы пробовали изменить /proc/sys/net/ipv4/[eno1,eno3,br-internal_lan]/rp_filter на 2, но это ничего не изменило (не знаю, должно ли). /proc/sys/net/ipv4/ip_forward установлен на 1.

Что может быть не так с нашей настройкой? Как мы можем получить доступ к нашим контейнерам по IP? Любая помощь приветствуется, если мне нужно предоставить дополнительную информацию, сообщите нам об этом.

(Обратите внимание, что в настоящее время мы используем Docker 1.10.3 (который является последней версией Docker при использовании стабильной версии CoreOS), поэтому macvlan не подходит для нас.)