Как настроить контейнеры LXD, которые общаются по локальной сети

У меня есть набор серверов, подключенных к локальной сети. Я могу установить и работать с контейнерами LXD на машине, но я не могу видеть контейнеры в сети. Я пытался следовать этим URL, но безрезультатно:

Мои серверы настроены следующим образом:

  1. eth0 - Аппаратная сетевая карта, подключенная к Интернету
  2. eth1 - аппаратная сетевая карта, подключенная к локальной сети

Если я пытаюсь настроить мост на устройстве eth1 через lxdbr0, контейнеры не отображаются в локальной сети. Если я попытаюсь настроить мост br0 устройство вручную, подключенное к eth1 и использующее DHCP, устройство не запускается.

Мой /etc/network/interfaces выглядит так:

iface lo inet loopback

# The primary network interface
iface eth0 inet static
    address x.x.x.x
    netmask 255.255.255.224
    gateway x.x.x.x

iface eth1 inet static
    address 192.168.0.61/23

iface br0 inet dhcp
    bridge_ports eth1
    bridge-ifaces eth1
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

auto lo eth0 eth1 br0

Можно ли создавать контейнеры, которые видны в локальной сети и могут подключаться к Интернету?

LXD v2.7 в Ubuntu 16.04

1 ответ

Да, это очень возможно. Я не играл со всеми новыми сетевыми функциями, представленными в LXD 2.3, поэтому я не могу говорить ни о чем из этого, но похоже, что вы хотите довольно простую сетевую разметку, поэтому эти функции могут даже не войти в игру, Я делаю что-то похожее на ваш сетевой макет. У меня есть 4 сетевых карты на всех моих серверах. Первые два я помещаю в связку и включаю в свою сеть управления, а вторые два я помещаю в группу LAG (еще одну связку) и использую ее для всего трафика LXD. У меня несколько VLAN, поэтому моя LAG настроена как магистральный порт, и я создаю устройства VLAN для каждой VLAN, к которой я хочу подключиться. Затем я помещаю эти устройства VLAN в мост, который использует реальный контейнер.

Удалите все связывающие и необработанные устройства VLAN, и у вас, по сути, будут одинаковые настройки: один сетевой адаптер для управления хостом LXD, один мост для трафика контейнера LXD. Я не использую устройство lxcbr0 по умолчанию, но все концепции должны быть одинаковыми.

Простой пример

Сначала определите NIC или NIC, которые будут частью вашего моста. В вашем случае похоже, что вы используете только один сетевой адаптер (eth1). Вам нужно установить NIC на ручной. Не назначайте ему адрес.

auto eth1
iface eth1 inet manual

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

auto br0
iface br0 inet manual
  bridge_ports eth1
  bridge_stp off
  bridge_fd 0
  bridge_maxwait 0

Теперь все, что вам нужно сделать, это использовать этот мост в профиле вашего контейнера.

lxduser@lxdhost:~$ lxc profile show default
name: default
config: {}
description: ""
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0

Теперь запустите свой контейнер и отредактируйте конфигурацию сети. Например, в системах на основе Debian вы должны отредактировать /etc/network/interfaces (в контейнере). В системах на основе Red Hat вы должны отредактировать /etc/sysconfig/network-scripts/ifcfg-eth0 (в контейнере). Вот пример Debian.

auto eth0
iface eth0 inet dhcp

Пока DHCP работает в сети, к которой подключен eth1 (на вашем хосте LXD), контейнер должен получить адрес и быть маршрутизируемым в этой сети. Чтобы получить доступ к Интернету, eth1 должен быть подключен к подсети, которая имеет доступ к Интернету, он не зависит от контейнера.

Более сложная сеть

Если вы хотите разместить контейнеры в разных VLAN, хотите отказоустойчивости на вашем хосте или обоих, тогда это требует немного большей настройки. Я использую файл конфигурации ниже на моем хосте LXD.

############################
# PHYSICAL NETWORK DEVICES #
############################

# Management network interface
auto enp2s0f0
iface enp2s0f0 inet static
    address 10.1.31.36/24
    gateway 10.1.31.1
    dns-nameserver 10.1.30.2 10.1.30.3 75.75.75.75
    dns-search harmonywave.com

#iface enp2s0f0 inet6 dhcp

# Second network interface
auto enp2s0f1
iface enp2s0f1 inet manual

# LXD slave interface (1)
auto enp3s0f0
iface enp3s0f0 inet manual
    bond-master bond1

# LXD slave interface (2)
auto enp3s0f1
iface enp3s0f1 inet manual
    bond-master bond1

##########################
# BONDED NETWORK DEVICES #
##########################

# Bond network device
auto bond1
iface bond1 inet manual
    bond-mode 4
    bond-miimon 100
    bond-lacp-rate 1
    bond-slaves enp3s0f0 enp3s0f1
    bond-downdelay 400
    bond-updelay 800

####################
# RAW VLAN DEVICES #
####################

# Tagged traffic on bond1 for VLAN 10
iface bond1.10 inet manual
    vlan-raw-device bond1

# Tagged traffic on bond1 for VLAN 20
iface bond1.20 inet manual
    vlan-raw-device bond1

# Tagged traffic on bond1 for VLAN 30
iface bond1.30 inet manual
    vlan-raw-device bond1

# Tagged traffic on bond1 for VLAN 31
iface bond1.31 inet manual
    vlan-raw-device bond1

# Tagged traffic on bond1 for VLAN 42
iface bond1.42 inet manual
    vlan-raw-device bond1

# Tagged traffic on bond1 for VLAN 50
iface bond1.50 inet manual
    vlan-raw-device bond1

# Tagged traffic on bond1 for VLAN 90
iface bond1.90 inet manual
    vlan-raw-device bond1

##########################
# BRIDGE NETWORK DEVICES #
##########################

# Bridged interface for VLAN 10
auto br0-10
iface br0-10 inet manual
    bridge_ports bond1.10
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0    

# Bridged interface for VLAN 20
auto br0-20
iface br0-20 inet manual
    bridge_ports bond1.20
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0    

# Bridged interface for VLAN 30
auto br0-30
iface br0-30 inet manual
    bridge_ports bond1.30
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

# Bridged interface for VLAN 31
auto br0-31
iface br0-31 inet manual
    bridge_ports bond1.31
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

# Bridged interface for VLAN 42
auto br0-42
iface br0-42 inet manual
    bridge_ports bond1.42
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

# Bridged interface for VLAN 50
auto br0-50
iface br0-50 inet manual
    bridge_ports bond1.50
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

# Bridged interface for VLAN 90
auto br0-90
iface br0-90 inet manual
    bridge_ports bond1.90
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

Давайте разберемся с этим. Сначала я определяю физические сетевые карты. Это PHYSICAL NETWORK DEVICES раздел. Ничто не отличается между моим и вашим для этого первого сетевого адаптера (eth0 для вас enp2s0f0 для меня). Я просто определяю это статически и даю адрес. Я назначаю адрес в моей сети управления для этого сетевого адаптера. Третий и четвертый NIC я использую для контейнерного трафика. Я хотел использовать LACP в LAG, поэтому я определил устройства как ручные и сделал их подчиненными для "bond1".

Затем я определяю свои устройства связи. Это BONDED NETWORK DEVICES раздел. В этом случае только одна связь для контейнерных перевозок. Опять же, я установил ручной режим и определил режим связывания как 4 (LACP). С таким же успехом может быть установлен другой тип связи (активный-пассивный, активный-активный и т. Д.).

Далее, поскольку у меня есть третий и четвертый NIC, физически подключенные к транковому порту на коммутаторе, я должен указать dot1Q, чтобы трафик фактически был помечен. Я создаю необработанное устройство VLAN для каждой VLAN, в которой может находиться контейнер. Я добавляю.XX, где "XX" - это идентификатор VLAN. Это больше не нужно, я просто делаю это для легкой идентификации. Затем пометьте устройство разделом "vlan-raw-device". Это RAW VLAN DEVICES раздел.

Наконец, в BRIDGE NETWORK DEVICES раздел я создаю мосты для каждого устройства VLAN. Это то, что контейнер будет использовать на самом деле. Опять же, я установил это вручную и не определяю IP-адрес, который определен внутри контейнера.

Теперь все, что мне нужно сделать, это назначить какой-либо мост в VLAN, который я хочу, контейнеру. Для простоты и во избежание настройки каждого контейнера я просто создаю профиль для каждого моста /VLAN. Например, вот мой профиль для VLAN 31.

lxduser@lxdhost:~$ lxc profile show 31_vlan_int_server
name: 31_vlan_int_server
config: {}
description: ""
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0-31
    type: nic

Затем я просто назначаю этот профиль любому контейнеру, который мне нужен в VLAN 31. На этом этапе я могу либо настроить файл / etc / network / interfaces моего контейнера как dhcp (если DHCP включен в этой VLAN), либо присвоить ему статический IP-адрес, который является частью этой VLAN.

Вся схема сети выглядит примерно так.

Настройка LXD Multi-VLAN

Контейнер использует ve th-устройство внутри моста (который создает LXD). Хост добавляет необработанное устройство vlan к мосту, и они оба используют фактическое связующее устройство, которое, в свою очередь, использует физические сетевые адаптеры.

По вопросам с подключением

Наконец, что касается ваших проблем с невозможностью подключиться к Интернету, убедитесь, что мост, используемый вашими контейнерами, имеет доступ в Интернет. Мне нравится пошаговый подход к устранению неполадок.

  1. Убедитесь, что у eth1 есть доступ к интернету. Временно удалите все соединения и настройки моста и используйте eth1 непосредственно на хосте. Измените его с ручного на статический и присвойте ему IP-адрес.
    • На хосте вы можете пропинговать IP-адрес сетевой карты?
      • Да? NIC работает, продолжить поиск неисправностей. Нет? NIC не настроен должным образом, все остальное не удастся.
    • На хосте вы можете пропинговать другой хост в той же подсети?
      • Да? Переключение настроено правильно, продолжить поиск неисправностей. Нет? Проблема подключения к сети. Возможная проблема статической маршрутизации на самой коробке, возможная проблема с коммутатором.
    • На хосте вы можете пропинговать машину в другой подсети (попробуйте ping 8.8.8.8)?
      • Да? Маршрутизация работает правильно, продолжайте устранение неполадок. Нет? Возможна неправильная настройка шлюза на хосте. Возможна проблема с роутером. Возможна проблема со статической маршрутизацией на коробке (проверьте шлюзы последней инстанции).
    • Можете ли вы разрешить адрес DNS (попробуйте ping www.google.com)?
      • Да? Разрешение DNS настроено правильно, продолжайте устранение неполадок. Нет? Проблема с разрешением DNS. Проверьте /etc/resolv.conf или resolvconf setup.
  2. Если все работает на eth1, когда он статически настроен, то вы знаете, что NIC работает правильно. Следующим шагом будет изменение eth1 обратно на ручной, удаление статического IP-адреса с него и воссоздание вашего моста. Теперь назначьте статический IP-адрес на самом мосту и повторите все подэтапы с шага 1.

Если все работает успешно, вы сможете соединиться с вашим контейнером (после того, как ваш мост вернется к ручному режиму и будет удален статический IP). Если нет, то получите адрес на контейнере (статический или DHCP) и повторите подэтапы с шага 1.

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