Виртуальная сеть DC/OS не работает между агентами

Я успешно создал марафонские приложения в режиме хоста и моста без проблем и использовал l4lb и marathon-lb для их размещения. То все работает без проблем.

Теперь я пытаюсь использовать сеть в режиме ПОЛЬЗОВАТЕЛЯ, используя сеть по умолчанию «dcos» 9.0.0.0/8. В этом режиме мои приложения могут общаться только с другими контейнерами на том же агенте. Хост-ОС могут общаться только с контейнерами, размещенными на них самих. Похоже, что узлы не могут маршрутизировать трафик между собой в виртуальной сети.

Для тестирования я использую контейнер docker «nginx:alpine» с двумя экземплярами на разных хостах. Их IP-адреса 9.0.6.130 и 9.0.3.130. Нет конфигурации L4LB или Marathon-LB, нет конечных точек службы, нет открытых портов в хост-сети. В принципе:

"container": {
    "docker": {
      "image": "nginx:alpine",
      "forcePullImage": false,
      "privileged": false,
      "network": "USER"
    }
  },
  "labels": null,
  "ipAddress": {
    "networkName": "dcos"
  },
}

в оболочке в одном из них у меня есть:

/ # ip addr list | grep 'inet 9'
inet 9.0.6.130/25 scope global eth0

/ # nc -vz 9.0.6.130:80
9.0.6.130:80 (9.0.6.130:80) open

/ # nc -vz 9.0.3.130:80
nc: 9.0.3.130:80 (9.0.3.130:80): Operation timed out

/ # traceroute to 9.0.3.130 (9.0.3.130), 30 hops max, 46 byte packets
traceroute to 9.0.3.130 (9.0.3.130), 30 hops max, 46 byte packets
 1  9.0.6.129 (9.0.6.129)  0.006 ms  0.002 ms  0.001 ms
 2  44.128.0.4 (44.128.0.4)  0.287 ms  0.272 ms  0.100 ms
 3  *  *  *
 4  *  *  *

С другой стороны:

/ # ip addr list | grep 'inet 9'
inet 9.0.3.130/25 scope global eth0
/ # nc -vz 9.0.3.130:80
9.0.3.130:80 (9.0.3.130:80) open
/ # nc -vz 9.0.6.130:80
/ # traceroute 9.0.6.130
traceroute to 9.0.6.130 (9.0.6.130), 30 hops max, 46 byte packets
 1  9.0.3.129 (9.0.3.129)  0.005 ms  0.003 ms  0.001 ms
 2  44.128.0.7 (44.128.0.7)  0.299 ms  0.241 ms  0.098 ms
 3  *  *  *
 4  *  *  *

Интересно, что я могу пропинговать то, что, по моему мнению, должно быть следующим (виртуальным) прыжком, и все промежуточные прыжки, несмотря на то, что traceroute этого не показывает. Единственное, что не пингуется, это виртуальный IP-адрес конечного контейнера. (Это внутри одного из контейнеров)

64 bytes from 44.128.0.7: seq=0 ttl=63 time=0.269 ms
64 bytes from 44.128.0.4: seq=0 ttl=64 time=0.094 ms
64 bytes from 9.0.3.129: seq=0 ttl=64 time=0.072 ms
64 bytes from 9.0.6.129: seq=0 ttl=63 time=0.399 ms
PING 9.0.6.130 (9.0.6.130): 56 data bytes (no response)

Любые идеи?


person jakem    schedule 09.02.2017    source источник


Ответы (1)


Выяснил это с помощью списка рассылки сообщества DC/OS.

RHEL7 по умолчанию устанавливает firewalld, который необходимо отключить в DC/OS. Я сделал это, но это по-прежнему оставляет политику FORWARD как DROP, пока узел не будет перезагружен. Манипуляции с брандмауэром DC/OS изменяют только правила, а не политику по умолчанию.

Это исправляет это:

iptables -P FORWARD ACCEPT

В любом случае это значение по умолчанию при перезагрузке, если только оно не указано где-то (например, firewalld), поэтому оно должно сохраняться при перезагрузке без каких-либо дальнейших действий.

person jakem    schedule 25.02.2017