Публичный IP-адрес для контейнера LXC

Хорошо, поэтому я хочу знать, как создавать сети на контейнерах LXC. Не только расплывчатая информация, которую вы получаете с других веб-сайтов, но и настоящее руководство для начинающих, как заставить их работать. Поскольку большинство примеров в основном предназначены для людей, с которыми можно проводить тестирование, я хочу запустить службу на одном ... как веб-сервер, например.

Я использую Ubuntu 12.04 LTS и у меня установлен LXC, и я могу создать, запустить и остановить контейнер. Очевидно, мой сервер имеет открытый IP-адрес, и я хотел бы знать, как настроить контейнер, чтобы он тоже мог иметь открытый IP-адрес. Поскольку, похоже, уже существует мост от моего текущего контейнера, может показаться, что мне нужно либо предоставить контейнерам общедоступный для них диапазон DHCP, либо вручную назначить статический IP-адрес моему контейнеру.

Если я хочу статически назначить IP для контейнера, как мне это сделать? Нужно ли вносить какие-либо изменения в мою конфигурацию моста на хосте? На самом деле лучше сделать это с опцией MACVLAN?

Любая помощь будет признательна.

26
задан 12 June 2013 в 21:43

3 ответа

Мой подход предполагает, что Ваш сервер имеет единственный NIC, и необходимо совместно использовать тот NIC между хостом и гостями LXC. Это включает использование моста. Мост владеет и справляется eth0. Хост теперь настраивает свои собственные сети на br0 вместо eth0. Гости LXC настроены для подключений к мосту.

  1. На хосте, sudo apt-get install bridge-utils.

  2. На хосте, замене eth0 с мостом:

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

    В /etc/network/interfaces:

    1. Замена auto eth0 с auto br0.
    2. Замена:

      iface eth0 inet dhcp
      

      с:

      iface br0 inet dhcp
          bridge_ports eth0
      

      Если бы у Вас была статическая конфигурация сети, то Вы заменили бы:

      iface eth0 inet static
          address ...
          netmask ...
          gateway ...
          etc.
      

      с:

      iface br0 inet static
          bridge_ports eth0
          address ...
          netmask ...
          gateway ...
          etc.
      

      Вы просто изменяетесь eth0 для br0 и добавление bridge_ports eth0 строка.

    3. Перезагрузите хост. Если Вы делали это локально, то выполнение sudo ifdown eth0 перед запуском, и sudo ifup br0 впоследствии также сделал бы. Обратите внимание, что мост может занять немного времени для подъема, поэтому дайте его спустя пять минут после перезагрузки, прежде чем Вы предположите, что все потеряно.

  3. Перемещать названный контейнер LXC, которому передают, в общедоступный IP:

    1. Остановите контейнер.
    2. На хосте, редактировании /var/lib/lxc/container_name/config и изменение lxc.network.link кому: br0.
    3. На хосте, редактировании /var/lib/lxc/container_name/rootfs/etc/network/interfaces и настройте свой общедоступный IP, как Вы обычно были бы (DHCP или статическая конфигурация по мере необходимости). Обратите внимание, что интерфейс все еще называют eth0 с точки зрения контейнера.
    4. Перезапустите контейнер.
  4. Изменить значение по умолчанию для новых контейнеров LXC, редактирования /etc/lxc/default.conf на хосте и изменении lxc.network.link кому: br0.

  5. Если Вам не нужен обеспеченный LXC мост NAT вообще (т.е. все Ваши контейнеры будут использовать новый мост вместо этого), то на редактировании хоста /etc/default/lxc и изменение USE_LXC_BRIDGE кому: "false", и затем на выполненном хосте sudo service lxc restart.

23
ответ дан 12 June 2013 в 21:43

У меня была та же проблема, и у меня есть это решение (быстрое и грязное).

server: eth0 = 10.1.0.77/24
server: lxdbr0 (lxd bridge) = 10.255.255.77/24

container: eth0 = 10.255.255.100/24 (same network as lxdbr0)
container: eth0:0 = 194.99.99.99/28  (public ip address on eth0 alias)

На сервере: route add -host 194.99.99.99 gw 10.255.255.100 dev lxdbr0

Также при необходимости добавьте маршрут к вышестоящим маршрутизаторам.

Возможно, не лучшее решение, но не требует больших усилий! Приветствия.

0
ответ дан 12 June 2013 в 21:43

Роби, большое спасибо за публикацию этого ответа, я старался изо всех сил пытаться добиться этого, и это был единственный метод, который сработал!

Я подумал, что должен упомянуть несколько вещи, которые я выяснил, чтобы помочь прояснить инструкции для других администраторов.

У моего хоста было несколько статических псевдонимов IP, назначенных для гостя eth0, например:

iface eth0:1 inet static
  address 5.5.5.5
  netmask 255.255.255.5
  gateway 5.5.5.1
etc.

Теперь мы не хотим настраивать br0 таким же образом, мы просто хотим один IP без псевдонимы, такие как Роби, указанные выше.

Допустим, вы хотите, чтобы 5.5.5.5 был назначен контейнеру debian8.

Отредактируйте /var/lib/lxc/debian8/etc/network/interfaces и добавьте:

iface eth0 inet static 
      address 5.5.5.5
      netmask 255.255.255.5
      gateway 5.5.5.1
    etc.

Затем выполните эту команду: route add default gw <gateway-ip, in my case 5.5.5.1>

После этого перезагрузите контейнер, и все должно наконец заработать! :)

0
ответ дан 12 June 2013 в 21:43

Другие вопросы по тегам:

Похожие вопросы: