Используем контейнеры Podman вместо виртуальных машин

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Появилась цель предоставить пользователям изолированную среду для выполнения задач в сегменте локальной сети. Поднимать гипервизор для виртуализации машин и выделять каждому пользователю ВМ — это слишком расточительный подход, требующий определенных ресурсов. С увеличением числа виртуальных машин, разница в расходах ресурсов становится очевидной.

Контейнеризация — эффективный способ виртуализации на уровне ядра ОС. В системах контейнеризации гипервизора нет, но есть 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://developers.redhat.com/blog/2018/10/22/introduction-to-linux-interfaces-for-virtual-networking

https://www.redhat.com/sysadmin/leasing-ips-podman

https://habr.com/ru/company/redhatrussia/blog/468931/

Источник: https://habr.com/ru/company/timeweb/blog/585758/


Интересные статьи

Интересные статьи

Данная статья мотивирована необходимостью построить более общую картину, что такое жизнь (и какой она может быть) по отношению к остальным явлениям во Вселенной.(Является...
ML на основе нейросетей открывает для программного обеспечения новые возможности в области логического вывода. Как правило, ML-модели выполняются в облаке, а это означает, что для кла...
Недавно благодаря предсказательной мощи машинного обучения (machine learning, ML) мы обеспечили экономию 1,7 миллионов долларов в год на инфраструктурных тратах, оптимизировав процесс...
Я давно знаком с Битрикс24, ещё дольше с 1С-Битрикс и, конечно же, неоднократно имел дела с интернет-магазинами которые работают на нём. Да, конечно это дорого, долго, местами неуклюже...
Терминалы сбора данных уже давно используются в роли помощника складского работника. Они незаменимы при сборке заказов, проведении инвентаризации и в прочих задачах, делая складского сотрудника м...