![](https://habrastorage.org/getpro/habr/upload_files/6ec/bd5/345/6ecbd5345fab2ed8ffac516b8892dd41.jpg)
Появилась цель предоставить пользователям изолированную среду для выполнения задач в сегменте локальной сети. Поднимать гипервизор для виртуализации машин и выделять каждому пользователю ВМ — это слишком расточительный подход, требующий определенных ресурсов. С увеличением числа виртуальных машин, разница в расходах ресурсов становится очевидной.
Контейнеризация — эффективный способ виртуализации на уровне ядра ОС. В системах контейнеризации гипервизора нет, но есть Container Engine, который создаёт контейнеры и управляет ими. В качестве движка контейнеризации мы будем использовать Podman.
Почему не Docker?
Основная причина — это запуск системы инициализации systemd в контейнерах, чтобы пользователи могли подключаться по SSH и устанавливать необходимые службы обычным способом, как в случае с виртуальными машинами. Podman знает, что надо делать, чтобы systemd нормально работал в контейнере. Также поговорим о том, как пробросить контейнер в локальную сеть.
Большинство традиционных сетей контейнеров обрабатываются мостами bridge, преобразованием сетевых адресов (NAT) или путем привязки к сети хоста. Если вы хотите, чтобы ваши контейнеры выглядели как физические хосты в вашей сети и каждый с уникальным MAC-адресом, то самый простой способ — это использовать плагины macvlan и dhcp, которые поставляются с пакетом containernetworking-plugins.
![](https://habrastorage.org/getpro/habr/upload_files/2ab/31e/39b/2ab31e39bb4d0639d37ca149dca85389.png)
Macvlan похож на коммутатор, который подключен к сетевому интерфейсу хоста. Используя виртуальные интерфейсы в сочетании с интерфейсом хоста, каждое устройство может иметь отдельный MAC-адрес. Этот факт позволяет существующим DHCP-серверам в существующей сети взаимодействовать с устройствами и назначать адреса.
Итак, приступим
Для начала установим движок контейнеризации Podman:
dnf install podman -y
Создание файла конфигурации CNI
Теперь необходимо создать новый файл конфигурации сетевого интерфейса контейнера (CNI). Перед созданием файла вы должны знать, какой интерфейс хоста будет использоваться для привязки. Эту информацию можно найти с помощью инструментов ip или ifconfig.
vi /etc/cni/net.d/90-infranet.conflist
{
"cniVersion": "0.4.0",
"name": "infranet",
"plugins": [
{
"type": "macvlan",
"master": "ens33",
"ipam": {
"type": "dhcp"
}
}
]
}
Запуск DHCP плагина
Плагин dhcp является прокси-клиентом DHCP для контейнера, поскольку в большинстве образов контейнеров отсутствует DHCP-клиент для взаимодействия с DHCP-сервером.
Чтобы запустить плагин dhcp, введите:
/usr/libexec/cni/dhcp daemon &
Собираем образ
Наш кастомный образ для пользователей будет на основе AlmaLinux версии 8.4, также назначим пароль суперпользователю “toor”, установим необходимые пакеты для работы с сетью и службу SSH для подключения пользователей:
cat Dockerfile
FROM almalinux:8.4
RUN echo 'root:toor' | chpasswd; dnf -y install bind-utils iproute net-tools nmap-ncat openssh-server; dnf clean all; systemctl enable sshd
CMD [ "/sbin/init" ]
Собираем кастомный образ:
podman build -t almalinux:custom .
Запускаем контейнер:
podman run -d --name test --network infranet almalinux:custom
Проверяем получение IP-адреса:
podman exec -it test ifconfig
Источники:
https://www.redhat.com/sysadmin/leasing-ips-podman
https://habr.com/ru/company/redhatrussia/blog/468931/
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud - в нашем Telegram-канале ↩
![Жамкнуть Жамкнуть](https://habrastorage.org/webt/b5/pj/of/b5pjofdoxth14ro-rjsrn7sbmiy.png)