2017-01-21 17 views
0

ПроблемаПользовательские Мост в Ubuntu 16.04 с LXD

Я использую два сетевых адаптера на хосте, на котором я хочу, чтобы запустить LXD с профилем Докер. У меня есть DNSMASQ, работающий на интерфейсе 0 (enp0s10f0) и loopback. Я хочу, чтобы контейнеры LXD использовали отдельный сетевой адаптер (enp0s10f1). В это время я не нуждаюсь в контейнерах, которые будут отображаться в сети напрямую. Поэтому я создал мост (lxdbr1) вручную в/etc/network/interfaces с enp0s10f0 в качестве подчиненного. Я хочу использовать ebtables + DNSMASQ с настраиваемой конфигурацией (которая может изменяться для разных экземпляров контейнера) для фильтрации разрешенного исходящего трафика из контейнера. Я пытаюсь не использовать службу lxd-bridge и мост по умолчанию (lxdbr0), который он создает из-за моих требований выше.

я столкнулся с двумя проблемами сейчас:

  1. Я прикрепленными lxdbr1 на профиль по умолчанию LXD. Если я запускаю контейнер с профилями по умолчанию и докере, я вижу интерфейс eth0 внутри контейнера. Однако у этого нет адреса IPv4 и, кажется, есть случайные адреса IPv6. Я считаю, что это потому, что это настройка по умолчанию, которую делает LXD. Я попытался отредактировать конфигурацию сети с помощью lxc-устройства lxdbr1, но после добавления параметров ipv4.address, ipv4.nat, ipv6.address и ipv6.nat и сохранения файла команда редактирования указывает на ошибку с «Ошибка синтаксического анализа: не найдена ». Я подтвердил, что YAML, который я написал, корректен с помощью форматирования. Поэтому не знаю, в чем проблема.
  2. Предполагая, что я могу получить вышеописанную работу, мне нужно что-либо помимо этого? Вики-сеть Debian по маскарадингу указывает, что мне также нужно настроить маршруты по умолчанию из внешнего IP-сети на интерфейс enp0s10f1 на внутренний IP-адрес, выделенный для моста. Эта часть меня тоже сбивает с толку.

Есть ли другие более простые варианты? Могу ли я, например, использовать мост по умолчанию, созданный LXD, сделать это постоянным, а затем использовать мои собственные экземпляры DNSMASQ (у меня может быть несколько) и мои собственные правила трафика?

фон

Я работаю на строительство из непрерывного трубопровода для доставки команд экспедиционных услуг или библиотеки на Linux. По разным причинам мы должны заблокировать хост и среду, в которой выполняются процессы сборки, подписывания и публикации, предоставляя командам максимальную гибкость конвейера для использования любого языка программирования, фреймворков или инструментов по своему усмотрению. Например, предположим, что команда хочет использовать Haskell и Rust (по любой причине) в версиях A и B; Я не хочу заниматься такими заявлениями или предварительно устанавливать их для этой команды. В то же время я хочу убедиться, что они не используют случайные источники пакетов или не публикуют неподписанные пакеты. Поэтому я придумал решение, которое может работать с использованием эфемерных контейнеров LXD (с Docker внутри) для разных этапов (сборка, тестирование, упаковка, публикация, архивирование) с любой работой, требуемой конвейером , выполняемым между ними на хост перед запуском или после запуска каждого контейнера. Рабочий процесс будет примерно таким:

  • Выполняйте предварительные шаги на хосте.
  • Вызвать скрипт сборки пользователя в контейнере.
  • Выполняйте шаги после сборки на хосте.
  • Выполняйте предварительные шаги на хосте.
  • Вызовите скрипт пользовательского сценария в контейнере.
  • Вызовите шаги после теста на хосте.

И так далее.

ответ

0

Прикрепив контейнеры к мосту, который содержит физический сетевой интерфейс, вы фактически открываете контейнеры для этой сети, это то, что делает мост.

Если вы не хотите, чтобы контейнеры, выставленные на уровне уровня 2, в вашу физическую сеть, создайте мост, который не содержит вашу физическую сеть. Затем вы можете запустить dnsmasq на этом мосту, чтобы контейнеры могли получить IP-адрес, и хост будет действовать как шлюз.