
Появилась цель предоставить пользователям изолированную среду для выполнения задач в сегменте локальной сети. Поднимать гипервизор для виртуализации машин и выделять каждому пользователю ВМ — это слишком расточительный подход, требующий определенных ресурсов. С увеличением числа виртуальных машин, разница в расходах ресурсов становится очевидной.
Контейнеризация — эффективный способ виртуализации на уровне ядра ОС. В системах контейнеризации гипервизора нет, но есть Container Engine, который создаё�� контейнеры и управляет ими. В качестве движка контейнеризации мы будем использовать Podman.
Почему не Docker?
Основная причина — это запуск системы инициализации systemd в контейнерах, чтобы пользователи могли подключаться по SSH и устанавливать необходимые службы обычным способом, как в случае с виртуальными машинами. Podman знает, что надо делать, чтобы systemd нормально работал в контейнере. Также поговорим о том, как пробросить контейнер в локальную сеть.
Большинство традиционных сетей контейнеров обрабатываются мостами bridge, преобразованием сетевых адресов (NAT) или путем привязки к сети хоста. Если вы хотите, чтобы ваши контейнеры выглядели как физические хосты в вашей сети и каждый с уникальным MAC-адресом, то самый простой способ — это использовать плагины macvlan и dhcp, которые поставляются с пакетом containernetworking-plugins.

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-канале ↩

