Как настроить контейнеры LXD, которые общаются по локальной сети
У меня есть набор серверов, подключенных к локальной сети. Я могу установить и работать с контейнерами LXD на машине, но я не могу видеть контейнеры в сети. Я пытался следовать этим URL, но безрезультатно:
- https://www.simpleprecision.com/ubuntu-16-04-lxd-networking-simple-bridge/
- https://www.stgraber.org/2016/10/27/network-management-with-lxd-2-3/
- https://www.simpleprecision.com/ubuntu-16-04-lxd-networking-simple-bridge/
Мои серверы настроены следующим образом:
- eth0 - Аппаратная сетевая карта, подключенная к Интернету
- 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.
Вся схема сети выглядит примерно так.
Контейнер использует ve th-устройство внутри моста (который создает LXD). Хост добавляет необработанное устройство vlan к мосту, и они оба используют фактическое связующее устройство, которое, в свою очередь, использует физические сетевые адаптеры.
По вопросам с подключением
Наконец, что касается ваших проблем с невозможностью подключиться к Интернету, убедитесь, что мост, используемый вашими контейнерами, имеет доступ в Интернет. Мне нравится пошаговый подход к устранению неполадок.
- Убедитесь, что у eth1 есть доступ к интернету. Временно удалите все соединения и настройки моста и используйте eth1 непосредственно на хосте. Измените его с ручного на статический и присвойте ему IP-адрес.
- На хосте вы можете пропинговать IP-адрес сетевой карты?
- Да? NIC работает, продолжить поиск неисправностей. Нет? NIC не настроен должным образом, все остальное не удастся.
- На хосте вы можете пропинговать другой хост в той же подсети?
- Да? Переключение настроено правильно, продолжить поиск неисправностей. Нет? Проблема подключения к сети. Возможная проблема статической маршрутизации на самой коробке, возможная проблема с коммутатором.
- На хосте вы можете пропинговать машину в другой подсети (попробуйте
ping 8.8.8.8
)?- Да? Маршрутизация работает правильно, продолжайте устранение неполадок. Нет? Возможна неправильная настройка шлюза на хосте. Возможна проблема с роутером. Возможна проблема со статической маршрутизацией на коробке (проверьте шлюзы последней инстанции).
- Можете ли вы разрешить адрес DNS (попробуйте
ping www.google.com
)?- Да? Разрешение DNS настроено правильно, продолжайте устранение неполадок. Нет? Проблема с разрешением DNS. Проверьте /etc/resolv.conf или resolvconf setup.
- На хосте вы можете пропинговать IP-адрес сетевой карты?
- Если все работает на eth1, когда он статически настроен, то вы знаете, что NIC работает правильно. Следующим шагом будет изменение eth1 обратно на ручной, удаление статического IP-адреса с него и воссоздание вашего моста. Теперь назначьте статический IP-адрес на самом мосту и повторите все подэтапы с шага 1.
Если все работает успешно, вы сможете соединиться с вашим контейнером (после того, как ваш мост вернется к ручному режиму и будет удален статический IP). Если нет, то получите адрес на контейнере (статический или DHCP) и повторите подэтапы с шага 1.