6 Профілі
У цій главі ви повинні запускати команди як непривілейований користувач ("incusadmin", якщо ви стежите за цим із початку цієї книги).
Коли ви інсталюєте Incus, вам надається профіль за замовчуванням, який ви не можете видалити чи змінити. Якщо вам потрібен більш детальний доступ до послуги, використовуйте натомість вихідні IP-адреси.
Якщо ви перевірите свій список контейнерів, ви помітите, що IP-адреса в кожному випадку походить з мостового інтерфейсу. У виробничому середовищі ви можете використовувати щось інше. Це може бути призначена DHCP адреса з інтерфейсу локальної мережі або статично призначена адреса з вашої глобальної мережі.
Якщо ви налаштуєте свій сервер Incus із двома інтерфейсами та призначите кожному IP-адресу у своїй WAN та LAN, ви зможете призначити IP-адреси свого контейнера на основі інтерфейсу, до якого контейнер має бути спрямований.
Починаючи з Rocky Linux версії 9.4 (і будь-якої помилки копії помилок Red Hat Enterprise Linux), метод статичного або динамічного призначення IP-адрес із профілями не працює.
Є способи обійти це, але це не дуже приємно. Схоже, це якось пов’язано зі змінами, внесеними в Менеджер мережі, які впливають на macvlan
. macvlan
дозволяє створювати багато інтерфейсів з різними адресами рівня 2.
Майте на увазі, що це має недоліки під час вибору зображень контейнерів на основі RHEL.
Створення профілю macvlan
і його призначення¶
Щоб створити свій профіль macvlan
, скористайтеся цією командою:
incus profile create macvlan
Якщо ви користуєтеся багатоінтерфейсним комп’ютером і вам потрібен більше одного шаблону macvlan
на основі мережі, яку ви хочете охопити, ви можете використати «lanmacvlan» або «wanmacvlan» або будь-яке інше ім’я, яке ви намагалися використати для ідентифікації профілю. Використання "macvlan" у вашій заяві про створення профілю залежить від вас.
Ви хочете змінити інтерфейс macvlan
, але перед тим, як це зробити, вам потрібно знати, що таке батьківський інтерфейс для вашого сервера Incus. Цьому інтерфейсу буде призначено IP-адресу локальної мережі (у цьому випадку). Щоб дізнатися, що це за інтерфейс, використовуйте:
ip addr
Шукайте інтерфейс із призначенням IP LAN у мережі 192.168.1.0/24:
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 40:16:7e:a9:94:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.106/24 brd 192.168.1.255 scope global dynamic noprefixroute enp3s0
valid_lft 4040sec preferred_lft 4040sec
inet6 fe80::a308:acfb:fcb3:878f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
В цьому випадку інтерфейс буде "enp3s0".
Далі змініть профіль:
incus profile device add macvlan eth0 nic nictype=macvlan parent=enp3s0
Ця команда додає всі параметри до профілю macvlan
, необхідні для використання.
Перевірте, що створила ця команда за допомогою команди:
incus profile show macvlan
Що дасть вам результат, подібний до цього:
config: {}
description: ""
devices:
eth0:
nictype: macvlan
parent: enp3s0
type: nic
name: macvlan
used_by: []
Профілі можна використовувати для багатьох інших речей, але призначення статичної IP-адреси контейнеру або використання власного сервера DHCP є звичайними потребами.
Щоб призначити rockylinux-test-8 профіль macvlan
, вам потрібно зробити наступне:
incus profile assign rockylinux-test-8 default,macvlan
Зробимо те саме для rockylinux-test-9:
incus profile assign rockylinux-test-9 default,macvlan
Це означає, що вам потрібен профіль за замовчуванням, а також потрібно застосувати профіль macvlan
.
Rocky Linux macvlan
¶
У дистрибутивах і клонах RHEL мережевий менеджер постійно змінюється. Через це спосіб роботи профілю macvlan
не працює (принаймні в порівнянні з іншими дистрибутивами) і вимагає додаткової роботи для призначення IP-адрес через DHCP або статично.
Пам’ятайте, що все це не має нічого спільного з Rocky Linux, а лише з реалізацією пакунка вгору.
Якщо ви хочете запустити контейнери Rocky Linux і використовувати macvlan
для призначення IP-адреси з вашої мережі LAN або WAN, процес буде відрізнятися залежно від версії контейнера операційної системи (8.x або 9.x).
Rocky Linux 9.0 macvlan – виправлення DHCP¶
Спочатку давайте проілюструємо, що відбувається під час зупинки та перезапуску двох контейнерів після призначення профілю macvlan
.
Однак призначення профілю не змінює конфігурацію за замовчуванням, якою за замовчуванням є DHCP.
Щоб перевірити це, просто виконайте такі дії:
incus restart rocky-test-8
incus restart rocky-test-9
Перелічіть свої контейнери ще раз і зауважте, що rockylinux-test-9 більше не має IP-адреси:
incus list
+-------------------+---------+----------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-8 | RUNNING | 192.168.1.114 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-9 | RUNNING | | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
| ubuntu-test | RUNNING | 10.146.84.181 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
Як бачите, ваш контейнер Rocky Linux 8.x отримав IP-адресу від інтерфейсу LAN, тоді як контейнер Rocky Linux 9.x ні.
Щоб детальніше продемонструвати проблему, ви повинні запустити dhclient
на контейнері Rocky Linux 9.0. Це покаже нам, що застосовується профіль macvlan
:
incus exec rockylinux-test-9 dhclient
Інший список контейнерів тепер показує наступне:
+-------------------+---------+----------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-8 | RUNNING | 192.168.1.114 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-9 | RUNNING | 192.168.1.113 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
| ubuntu-test | RUNNING | 10.146.84.181 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
Це мало статися з простою зупинкою та запуском контейнера, але цього не відбувається. Якщо припустити, що ви хочете щоразу використовувати IP-адресу, призначену DHCP, ви можете виправити це простим записом у crontab. Для цього вам потрібно отримати доступ до контейнера, ввівши:
incus shell rockylinux-test-9
Далі визначимо шлях до dhclient
. Для цього, оскільки цей контейнер створено з мінімального образу, вам потрібно спочатку встановити which
:
dnf install which
А потім запустіть:
which dhclient
Що поверне:
/usr/sbin/dhclient
Далі змінимо crontab користувача root:
crontab -e
І додайте цей рядок:
@reboot /usr/sbin/dhclient
Введена команда crontab використовує vi. Використовуйте ++shift+двокрапка+"w"+"q"++, щоб зберегти зміни та вийти.
Вийдіть із контейнера та перезапустіть rockylinux-test-9:
incus restart rockylinux-test-9
Інший список показує, що контейнеру призначено адресу DHCP:
+-------------------+---------+----------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-8 | RUNNING | 192.168.1.114 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-9 | RUNNING | 192.168.1.113 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
| ubuntu-test | RUNNING | 10.146.84.181 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
Rocky Linux 9.x macvlan
– виправлення статичної IP-адреси¶
При статичному призначенні IP-адреси все стає ще заплутанішим. Оскільки network-scripts
тепер застарілий у Rocky Linux 9.x, єдиним способом зробити це є статичне призначення. Оскільки контейнери використовують мережу, ви не зможете встановити маршрут за допомогою звичайного оператора ip route
. Проблема полягає в тому, що інтерфейсом, призначеним під час застосування профілю macvlan
(у цьому випадку eth0), не можна керувати за допомогою Network Manager. Виправлення полягає в перейменуванні мережевого інтерфейсу контейнера після перезапуску та призначенні статичної IP-адреси. Ви можете зробити це за допомогою сценарію та запустити (ще раз) у crontab root. Зробіть це за допомогою команди ip
.
Для цього вам потрібно знову отримати доступ оболонки до контейнера:
incus shell rockylinux-test-9
Далі ви збираєтеся створити сценарій bash у /usr/local/sbin
під назвою "static":
vi /usr/local/sbin/static
Зміст цього сценарію не є складним:
#!/usr/bin/env bash
/usr/sbin/ip link set dev eth0 name net0
/usr/sbin/ip addr add 192.168.1.151/24 dev net0
/usr/sbin/ip link set dev net0 up
sleep 2
/usr/sbin/ip route add default via 192.168.1.1
Що саме ви тут робите?
- ви перейменовуєте eth0 на нове ім'я, яким можете керувати ("net0")
- ви призначаєте новий статичний IP, який ви виділили для свого контейнера (192.168.1.151)
- ви відкриваєте новий інтерфейс "net0"
- ви додаєте 2-секундне очікування, поки інтерфейс стане активним, перш ніж додати маршрут за замовчуванням
- вам потрібно додати маршрут за замовчуванням для вашого інтерфейсу
Зробіть свій сценарій виконуваним за допомогою наступного:
chmod +x /usr/local/sbin/static
Додайте це до crontab кореневого користувача для контейнера з часом @reboot:
@reboot /usr/local/sbin/static
Нарешті, вийдіть з контейнера та перезапустіть його:
incus restart rockylinux-test-9
Зачекайте кілька секунд і знову виведіть список контейнерів:
incus list
Ви повинні побачити успіх:
+-------------------+---------+----------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-8 | RUNNING | 192.168.1.114 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-9 | RUNNING | 192.168.1.151 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
| ubuntu-test | RUNNING | 10.146.84.181 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
Ubuntu macvlan¶
На щастя, реалізація Network Manager в Ubuntu не порушує стек macvlan
, що значно полегшує розгортання!
Як і у випадку з вашим контейнером rockylinux-test-9, вам потрібно призначити профіль для вашого контейнера:
incus profile assign ubuntu-test default,macvlan
Щоб дізнатися, чи DHCP призначає адресу контейнеру, зупиніть і знову запустіть контейнер:
incus restart ubuntu-test
Потім знову перерахуйте контейнери:
+-------------------+---------+----------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-8 | RUNNING | 192.168.1.114 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-9 | RUNNING | 192.168.1.151 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
| ubuntu-test | RUNNING | 192.168.1.132 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
Успішно!
Налаштування статичної IP-адреси трохи відрізняється, але не складно. Ви повинні змінити файл .yaml
, пов’язаний із підключенням контейнера (10-incus.yaml
). Для цього статичного IP ви будете використовувати 192.168.1.201:
vi /etc/netplan/10-incus.yaml
Змініть те, що є, на таке:
network:
version: 2
ethernets:
eth0:
dhcp4: false
addresses: [192.168.1.201/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8,8.8.4.4]
Будь ласка, збережіть зміни та залиште контейнер.
Перезапустіть контейнер:
incus restart ubuntu-test
Коли ви знову перерахуєте свої контейнери, ви побачите нашу нову статичну IP-адресу:
+-------------------+---------+----------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-8 | RUNNING | 192.168.1.114 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
| rockylinux-test-9 | RUNNING | 192.168.1.151 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
| ubuntu-test | RUNNING | 192.168.1.201 (eth0) | | CONTAINER | 0 |
+-------------------+---------+----------------------+------+-----------+-----------+
Успішно!
У прикладах, які тут використовуються, навмисно було обрано складний контейнер для налаштування та два менш складних. У списку зображень багато інших версій Linux. Якщо у вас є улюблений, спробуйте встановити його, призначити шаблон macvlan
і налаштувати IP-адреси.
Author: Steven Spencer
Contributors: Ezequiel Bruni, Ganna Zhyrnova