How to Wiki Database (change log)
http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
9.9 KiB
144 lines
9.9 KiB
9 months ago
|
====== Yggdrasil в контейнере LXC ======
|
||
|
|
||
|
Linux containers (LXC) - облегченная технология виртуализации, больше похожая на [[wpru>chroot]], нежели на полноценную виртуализацию, типа [[wpru>QEMU]] или [[wpru>VMware]]. Контейнеры linux не эмулируют оборудование, а используют в режиме разделения то же, что и основная система. Это позволяет запустить несколько контейнеров на одной [даже относительно слабой] машине с минимальными потерями в производительности (менее 1%). Этого невозможно было бы достичь, используя полноценную виртуализацию.
|
||
|
|
||
|
До 2015 года [[wpru>docker]] использовал технологию lxc.
|
||
|
|
||
|
Контейнеры lxc удобно использовать на хостинг-серверах для изоляции динамических контейнеров, а так же, для упрощения разворачивания каких-то приложений, сред разработки и тестирования, их переноса, резервного копирования и других операций.
|
||
|
|
||
|
В этой статье будет приведен простой пример разворачивания контейнера lxc и установки в него [[yggdrasil:Yggdrasil]].
|
||
|
Таким образом, в целях эксперимента, мы получим два экземпляра Yggdrasil, запущенных на одном устройстве и работающих, как полноценные узлы.
|
||
|
|
||
|
===== Установка =====
|
||
|
<code>sudo apt-get install lxc</code>
|
||
|
В других (отличных от [[wpru>Debian]]) дистрибутивах установка выполняется аналогично.
|
||
|
|
||
|
===== Конфигурирование =====
|
||
|
|
||
|
Немного поправим конфиги-по-умолчанию.
|
||
|
|
||
|
В файле ''%%/etc/lxc/default.conf%%'' заменим строку
|
||
|
<code>lxc.net.0.type = empty</code>
|
||
|
на
|
||
|
<code>lxc.net.0.type = veth</code>
|
||
|
|
||
|
Так мы создадим veth-туннель к хост-системе.
|
||
|
|
||
|
И добавим две строчки:
|
||
|
<code>lxc.net.0.link = lxcbr0 # задается мост, к которому будут подсоединяться туннели
|
||
|
lxc.net.0.flags = up # требуется для проверки того, что сетевой интерфейс поднят</code>
|
||
|
|
||
|
В файле ''%%/etc/default/lxc%%'' заменим строку
|
||
|
<code>USE_LXC_BRIDGE="false"</code>
|
||
|
на
|
||
|
<code>USE_LXC_BRIDGE="true" # мост с именем lxcbr0 создается в процессе старта</code>
|
||
|
|
||
|
И добавим такой кусок с сетевыми параметрами:
|
||
|
<code>LXC_BRIDGE="lxcbr0"
|
||
|
LXC_ADDR="10.0.3.1"
|
||
|
LXC_NETMASK="255.255.255.0"
|
||
|
LXC_NETWORK="10.0.3.0/24"
|
||
|
LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
|
||
|
LXC_DHCP_MAX="253"
|
||
|
LXC_DHCP_CONFILE=""
|
||
|
LXC_DHCP_PING="true"
|
||
|
LXC_DOMAIN=""
|
||
|
|
||
|
LXC_IPV6_ADDR=""
|
||
|
LXC_IPV6_MASK=""
|
||
|
LXC_IPV6_NETWORK=""
|
||
|
LXC_IPV6_NAT="false"</code>
|
||
|
|
||
|
Убедитесь, что отсутствует файл ''%%/etc/default/lxc-net%%''. Если он существует, то строки, начиная с ''%%USE_LXC_BRIDGE="true"%%'' перенесите в него.
|
||
|
|
||
|
После того, как сделали эти настройки перезапустим сервис lxc-net:
|
||
|
<code>systemctl restart lxc-net.service</code>
|
||
|
|
||
|
===== Использование =====
|
||
|
Создание контейнера:
|
||
|
<code>lxc-create -t debian -n deb_ygg</code>
|
||
|
|
||
|
Будет создан контейнер на основе шаблона debian с настройками по-умолчанию, с единственным veth-сетевым интерфейсом, подключенным к мосту хоста lxcbr0. ''%%deb_ygg%%'' - имя контейнера, располагается он по-умолчанию в ''%%/var/lib/lxc%%''.
|
||
|
|
||
|
Разрешим использование в контейнере tun-интерфейса. Для этого в конфигурационный файл контейнера ''%%/var/lib/lxc/deb_ygg/config%%'' добавим строки:
|
||
|
<code>lxc.mount.entry = /dev/net dev/net none bind,create=dir
|
||
|
lxc.cgroup.devices.allow = c 10:200 rwm</code>
|
||
|
|
||
|
Запуск контейнера в фоне (флаг -d):
|
||
|
|
||
|
<code>lxc-start -n deb_ygg -d</code>
|
||
|
|
||
|
Для запуска с отображением процесса запуска нужно вместо флага -d использовать флаг -F (foreground). Это полезно в случае возникновения каких-то проблем при запуске, чтобы сразу видеть ошибки.
|
||
|
|
||
|
Убедимся, что контейнер запустился, выведем список запущенных контейнеров:
|
||
|
|
||
|
<code>lxc-ls -f</code>
|
||
|
|
||
|
Подключаемся к консоли контейнера:
|
||
|
|
||
|
<code>lxc-attach -n deb_ygg</code>
|
||
|
|
||
|
**Далее действия выполняются в консоли контейнера!**
|
||
|
|
||
|
В файле ''%%/etc/apt/sources.list%%'' заменим строку:
|
||
|
<code>deb http://security.debian.org/ stable/updates main</code>
|
||
|
на:
|
||
|
<code>deb http://security.debian.org/debian-security bullseye-security main contrib non-free</code>
|
||
|
(необходимость этого связана с тем, что в релизе изменился путь к репозиторию (Debian 11))
|
||
|
|
||
|
Устанавливаем в контейнер gpg и другие необходимые пакеты:
|
||
|
<code>apt install gpg wget iputils-ping vim</code>
|
||
|
|
||
|
Добавляем ключи и репозиторий yggdrasil (в соответствии с [[https://yggdrasil-network.github.io/installation-linux-deb.html|инструкцией для нашего дистрибутива]]):
|
||
|
<code>gpg --fetch-keys https://neilalexander.s3.dualstack.eu-west-2.amazonaws.com/deb/key.txt
|
||
|
gpg --export 569130E8CA20FBC4CB3FDE555898470A764B32C9 | apt-key add -
|
||
|
echo 'deb http://neilalexander.s3.dualstack.eu-west-2.amazonaws.com/deb/ debian yggdrasil' | tee /etc/apt/sources.list.d/yggdrasil.list</code>
|
||
|
|
||
|
Устанавливаем yggdrasil:
|
||
|
<code>apt-get update && apt install yggdrasil</code>
|
||
|
|
||
|
Установим редактор для редактирования конфигурационного файла (vim | nano):
|
||
|
<code>apt install vim</code>
|
||
|
|
||
|
Генерируем новый конфигурационный файл Yggdrasil:
|
||
|
<code>yggdrasil -genconf >/etc/yggdrasil.conf</code>
|
||
|
|
||
|
Редактируем ''%%/etc/yggdrasil.conf%%'', добавляем [[yggdrasil:public_peer|пиры]] и запускаем:
|
||
|
<code>systemctl enable yggdrasil && systemctl start yggdrasil</code>
|
||
|
|
||
|
Если всё сделано правильно, по команде ''%%systemctl status yggdrasil%%'' увидим информацию о том, что сервис успешно запущен и IP-адрес yggdrasil внутри контейнера.
|
||
|
При этом, на хостовой машине, одновременно с этим, yggdrasil так же может быть запущен и работать корректно.
|
||
|
|
||
|
Для автозапуска контейнера при загрузке хост-системы добавьте в ''%%/var/lib/lxc/deb_ygg/config%%'' строку:
|
||
|
<code>lxc.start.auto = 1</code>
|
||
|
|
||
|
===== Дополнительно =====
|
||
|
|
||
|
Другие полезные команды lxc:
|
||
|
<code>lxc-stop -n deb_ygg # остановка контейнера
|
||
|
lxc-destroy -n deb_ygg # полное удаление контейнера
|
||
|
lxc-clone -n deb_ygg # создание копии контейнера
|
||
|
lxc-snapshot -n deb_ygg # создание снапшота
|
||
|
lxc-snapshot -n deb_ygg -L # список снапшотов контейнера
|
||
|
lxc-snapshot -n deb_ygg -r snap0 # восстановление из снапшота
|
||
|
lxc-ls # получение списка всех контейнеров
|
||
|
lxc-netstat # netstat в запущенном контейнере
|
||
|
lxc-ps # процессы в запущенном контейнере</code>
|
||
|
|
||
|
''%%deb_ygg%%'' - имя конкретного контейнера
|
||
|
|
||
|
Так же, стоит добавить, что под OS Ubuntu существует [[https://lxc-webpanel.github.io/index.html|LXC Web Panel]], которая позволяет управлять контейнерами LXC c помощью GUI.
|
||
|
|
||
|
А еще, существует целая система виртуализации [[wpru>Proxmox_Virtual_Environment|Proxmox VE]], которая с версии 4.0 так же поддерживает работу с LXC.
|
||
|
|
||
|
И напоследок рекомендую ознакомиться со статьями, посвященными безопасности LXC (см. [[yggdrasil:yggdrasil_in_lxc#Ссылки]]).
|
||
|
|
||
|
====== Ссылки ======
|
||
|
|
||
|
Контейнеры LXC в Linux: https://losst.ru/kontejnery-linux-ustanovka-i-nastrojka-lxc \\
|
||
|
Офиц. документация Ubuntu: [[https://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/lxc|https://help.ubuntu.ru/wiki/руководство_по_ubuntu_server/виртуализация/lxc]] \\
|
||
|
LXC 1.0: Безопасность - http://vasilisc.com/lxc-1-0-security-features \\
|
||
|
LXC 1.0: Непривилегированные контейнеры - http://vasilisc.com/lxc-1-0-unprivileged-containers \\
|
||
|
Настройка Apparmor в Ubuntu - https://losst.ru/nastrojka-apparmor-v-ubuntu-16-04 \\
|
||
|
LXC Web Panel - https://lxc-webpanel.github.io/index.html
|