podman: зачем нужен режим сети хоста

Вопрос или проблема

Согласно man podman-run, сеть контейнера можно настроить в режиме хоста:

--network=mode, --net
...

host: Не создавать пространств имен сети, контейнер будет использовать сеть хоста. Примечание: Режим хоста предоставляет контейнеру полный доступ к местным системным службам, таким как D-bus, и поэтому считается небезопасным.

Какой может быть случай использования, когда мы не хотим, чтобы контейнер имел собственное пространство имен сети, а вместо этого делил пространство сети хоста?

Рассмотрим контейнерное административное приложение, которое вы, системный администратор, хотите запустить с управляющего хоста. Например, окружение на основе ansible-runner, которое уже является контейнером, чтобы получить нужные версии Python и различные библиотеки. Ему нужно делать SSH-запросы к различным хостам.

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

И это даже не очень умно. Всегда есть интересные случаи использования, о которых я не думал, особенно в области, такой как IP-сеть.

Если вычислительный стек может поддерживать простые варианты, такие как “не беспокойтесь о пространстве имен сети для этого контейнера”, это хорошая опция. Надеюсь, это покрыто набором тестов. Мое главное беспокойство по поводу множества опций заключается в том, что они остаются функциональными, когда что-то меняется.

Еще один интересный случай использования, с которым я сталкиваюсь прямо сейчас: нам нужно обрабатывать данные через интерфейсы CAN¹

Это ужасная технология, используемая в автомобилях, коротко говоря, вы получаете интерфейс (как eth0), который не является Ethernet. Затем вы можете читать и записывать данные через сокетный API

Чтобы сделать это через Podman, вы должны использовать сеть хоста, так как в контейнерном движке нет встроенного прокси для CAN

[1] https://www.kernel.org/doc/html/latest/networking/can.html

Ответ или решение

Podman: Почему необходим режим сетевого хоста

В контексте использования контейнеров, одним из ключевых аспектов является управление их сетевыми настройками. Среди возможных режимов сети, режим хоста (--network=host) выделяется особым образом, так как он обеспечивает контейнеру доступ к сетевому стеку хоста, без создания отдельного сетевого пространства имен. Этот подход имеет несколько значительных преимуществ и применений, которые мы рассмотрим более подробно.

Безопасность и удобство

Поскольку контейнер использует сетевой стек хоста, в этом режиме обеспечивается более простой и быстрый доступ к локальным сетевым сервисам. Например, если система требует взаимодействия с локальными системными службами, такими как D-Bus, то использование режима хоста минимизирует сложность конфигурации и потенциальные ошибки. Это особенно полезно для административных приложений, таких как ansible-runner, которые предполагают наличие необходимого программного обеспечения и библиотек.

Примеры использования

1. Административные сценарии

При запуске внутри контейнера инструмента управления, такого как ansible, зачастую возникает необходимость доступа к другим устройствам через SSH. Используя сеть хоста, администраторы могут избежать настройки сложных маршрутов и правил доступа, позволяя Ansible беспрепятственно связываться с удаленными узлами. Это особенно актуально, когда безопасность не является первоочередной задачей, и администратор работает в контролируемом окружении.

2. Специальные интерфейсы, такие как CAN

Другим примером является использование контейнеров для работы с интерфейсами CAN (Controller Area Network), которые часто применяются в автомобилестроении. Поскольку CAN не является частью стандартного стека Ethernet, использование стандартного сетевого пространства в контейнерах может быть неэффективным или невозможным. В данном случае, режим сетевого хоста предоставляет необходимую возможность для чтения и записи данных через сокеты непосредственно к интерфейсу CAN, так как контейнер имеет прямой доступ к этому ресурсу.

Гибкость и разработка

Режим сетевого хоста может быть особенно полезен в рамках разработки и тестирования, позволяя разработчикам проверять сетевые взаимодействия без необходимости сложной настройки сети. Это помогает сосредоточиться на функциональности приложения, не отвлекаясь на проблемы конфигурации сетевого окружения.

Заключение

Режим сетевого хоста в Podman предоставляет множество преимуществ, начиная от упрощения настройки сетевых взаимодействий приложения до специфических сценариев работы с уникальными сетевыми интерфейсами, такими как CAN. Несмотря на вопросы безопасности, этот режим может быть бесценным инструментом для системных администраторов и разработчиков, обеспечивая удобство и гибкость в управлении сетевыми задачами в контейнеризированной среде.

Использование режима сетевого хоста — это вопрос выбора подхода к архитектуре системы, который основывается на конкретных потребностях и задачах, стоящих перед разработчиком или администратором.

Оцените материал
Добавить комментарий

Капча загружается...