2014-01-08 3 views
5

Редактировать: По состоянию на май 2015 года SocketPlane (см. website и repo) присоединился к команде Docker, и они находятся в процессе интеграции своего решения OVS в ядро ​​Docker. Похоже, что они станут победителями различных сетевых решений Docker.Как использовать Docker (или Linux Containers) для эмуляции сети?


Так я использую Mininet для выполнения тестов на моем сетевом программном обеспечении. Кажется, он достиг своего предела, поскольку контейнеры Mininet представляют собой контейнеры linux с только сетевым стеком. Я бы хотел, чтобы каждый контейнер имел свой собственный сетевой стек, файловую систему и набор процессов - в основном я хотел бы, чтобы контейнер был как можно ближе к виртуальной машине. Который подводит меня к Докеру, как я понимаю, Docker противоположно Минетне, его контейнеры имеют файловую систему и свои собственные процессы, но не свой собственный сетевой стек. Я склоняюсь к Docker, поскольку у него есть хороший API для разметки контейнеров, используя дисковое пространство только diff. Мой вопрос: возможно ли создать набор контейнеров linux (с Docker или аналогичным) со следующей компоновкой контейнера + настройка сетевого интерфейса?

enter image description here

ответ

2

Вы можете использовать Pipework для этой цели. Это, в частности, один из сценариев, которые он реализует (частные сети между контейнерами, в дополнение к стандартной сети Docker).

+0

Спасибо, я уже нашел его, и мы даем ему попробовать сейчас :) – jpillora

2

Я знаю два сетевых эмуляторов с открытым исходными кодом, которые используют Linux контейнеры:

CORE Network Emulator использует контейнеры и каждый контейнер имеет свою собственную файловую систему (или частичную файловую систему, так как она создает только смонтировать пространство имен для каталогов, требуемых услуги, выполняемые на каждом узле).

Сетевой эмулятор VNX - это еще один вариант. Он использует либо KVM, либо LXC для создания виртуальных узлов (но я еще не пробовал вариант LXC).

+0

Спасибо за ссылки @Brian, мы в настоящее время надеемся запустить программный переключатель Openflow 1.3, который ведет нас к чему-то OVS- но мы будем исследовать их и посмотреть, что мы можем сделать. – jpillora

1

@jpillora IMUNES Сетевой эмулятор использует Docker для своих L3 (ПК, маршрутизатор, хост) и Open vSwitch для узлов L2 (концентратор, коммутатор). Например, узел Router на самом деле является контейнером Docker с системой Debian Jessie, которая автоматически запускает Quagga, поэтому вам просто нужно нарисовать узлы внутри графического интерфейса. Затем вы можете получить доступ к этим контейнерам, дважды щелкнув по ним и сделайте все, что вы сделали бы в системе Linux. Он использует «специальное» изображение Docker, доступное на концентраторе под названием imunes/vroot, которое использует фиктивный процесс инициализации, поэтому он не заканчивается. Технически, с небольшим количеством настроек вы можете заменить его тем, что хотите. Его исходный код доступен по адресу Github. Я думаю, было бы удобно использовать случай.

2

У CORE Network Emulator есть служба Docker, которую я внес и написал article about. Первоначальная версия, которая находится в 4.8, в основном сломана, но я исправил ее и улучшил. Запрос на растяжение находится на GitHub.

Служба позволяет пометить Docker Images с помощью «core», а затем они отображаются как опция в настройках служб. Вы должны выбрать изображение Docker, которое запускает службу докера в контейнере. Затем вы выбираете контейнер или контейнеры, которые вы хотите запустить в этом узле. Он масштабируется достаточно хорошо, и у меня было более 2000 узлов на моей машине 16Gb.

Вы упомянули OVS также. Это еще не встроено в CORE, но может использоваться вручную. Я просто ответил на вопрос о списке рассылки CORE. Он дает краткий обзор переключения стандартного переключателя CORE (мост) с OVS.Приведенный ниже текст, если он полезен:

Не используется openvswitch раньше, но имел быстрый взгляд.

Я установил openvswitch через мой менеджер пакетов (Ubuntu 15.04):

Sudo APT-получить установку openvswitch-переключатель

я построил очень простую сеть в CORE 4.8. 2 ПК, подключенных к коммутатору. Я начал эмуляцию в CORE. Затем на хосте я посмотрел на мостах, которые были созданы:

sudo brctl show 

bridge name  bridge id    STP enabled  interfaces 
b.3.76   8000.42c789ce95e9  no    veth1.0.76 
                 veth2.0.76 
docker0   8000.56847afe9799  no 
lxcbr0   8000.000000000000  no 

Я вижу мост, который представляет коммутатор называется b.3.76 и имеет интерфейсы veth1.0.76 и veth2.0.76 прилагается к нему. Я удаляю мост:

sudo ip link set b.3.76 down 
sudo brctl delbr b.3.76 

я затем установите openvswitch мост:

sudo ovs-vsctl add-br b.3.76 
sudo ovs-vsctl add-port b.3.76 veth1.0.76 
sudo ovs-vsctl add-port b.3.76 veth2.0.76 

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

При остановке эмуляции CORE это не очевидно, удалить openvswitch мост или порты, так что вы должны сделать это вручную:

sudo ovs-vsctl del-port veth2.0.76 
sudo ovs-vsctl del-port veth1.0.76 
sudo ovs-vsctl del-br b.3.76 

Это было бы относительно легко автоматизировать с помощью сценария или с небольшим бит работы может быть интегрирован в докер.

Надеется, что это помогает

0

Я попытался CORE и несколько других, но нашел их трудно установить и запустить (особенно в AWS или Mac). Они, вероятно, мощные, но излишние, если вы просто хотите имитировать простые сети.

Следовательно, я написал YANS (еще один сетевой симулятор). YANS основана на Docker. Даже я сам удивляюсь, как быстро он работает. Дать ему шанс!