Настройка сетевых режимов контейнера#
В данном разделе представлена информация по установке различных сетевых режимов.
Запуск контейнеров со статическим IP-адресом#
Команда podman run с опцией --ip устанавливает сетевой интерфейс контейнера на определенный IP-адрес. Чтобы убедиться в правильной установке IP-адреса, запустите команду podman inspect.
Установите сетевой интерфейс контейнера на IP-адрес хх.хх.х.хх:
podman run -d --name=myubi --ip=xx.xx.x.xx registry.example.ru/ubi9/ubi
Пример вывода команды:
efde5f0a8c723f70dd5cb5dc3d5039df3b962fae65575b08662e0d5b5f9fbe85
Можете проверить корректность установки IP-адреса при помощи команды:
podman inspect --format='{{.NetworkSettings.IPAddress}}' myubi
Пример вывода команды:
hh.hh.hh.hh
Где hh.hh.hh.hh – IP-адрес.
Запуск плагина DHCP без systemd#
Используйте команду podman run --network для подключения к пользовательской сети. В то время как большинство образов контейнеров не имеют DHCP-клиента, плагин dhcp действует как прокси-клиент DHCP для взаимодействия контейнеров с DHCP-сервером.
Примечание
Данный сценарий применим только к контейнерам пользователей с административными полномочиями. Контейнеры пользователей без административных полномочий не используют плагин dhcp.
Вручную запустите плагин
dhcp:/usr/libexec/cni/dhcp daemon &Пример вывода команды:
[1] 4966Проверьте работу плагина:
ps -a | grep dhcpПример вывода команды:
4966 pts/1 00:00:00 dhcpЗапустите контейнер
alpine:podman run -it --rm --network=example alpine ip addr show enp1s0Пример вывода команды:
Resolved "alpine" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf) Trying to pull docker.io/library/alpine:latest... ... Storing signatures 2: eth0@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether f6:dd:1b:a7:9b:92 brd ff:ff:ff:ff:ff:ff inet hh.hh.hh.hh/24 brd hh.hh.hh.hh scope global eth0 ...В данном примере:
Опция
--network=exampleопределяет сеть с именемexampleдля дальнейшего подключения;Команда
ip addr show enp1s0внутри контейнераalpineпроверяет IP-адрес сетевого интерфейсаenp1s0;Сеть хоста - hh.hh.hh.hh/24;
Интерфейс
eth0арендует IP-адрес hh.hh.hh.hh для контейнераalpine.
Примечание
Эта конфигурация может исчерпать доступные DHCP-адреса при наличии большого количества контейнеров с коротким временем работы и DHCP-сервера с длительной арендой.
Запуск плагина DHCP с помощью systemd#
Можно использовать юнит-файл systemd для запуска плагина dhcp:
Создайте юнит-файл сокета:
cat /usr/lib/systemd/system/io.podman.dhcp.socketПриер вывода команды:
[Unit] Description=DHCP Client for CNI [Socket] ListenStream=%t/cni/dhcp.sock SocketMode=0600 [Install] WantedBy=sockets.targetСоздайте юнит-файл службы:
cat /usr/lib/systemd/system/io.podman.dhcp.serviceПример вывода команды:
[Unit] Description=DHCP Client CNI Service Requires=io.podman.dhcp.socket After=io.podman.dhcp.socket [Service] Type=simple ExecStart=/usr/libexec/cni/dhcp daemon TimeoutStopSec=30 KillMode=process [Install] WantedBy=multi-user.target Also=io.podman.dhcp.socketПосле запустите службу:
systemctl --now enable io.podman.dhcp.socketДля проверки состояния сокета используйте команду:
systemctl status io.podman.dhcp.socketПример вывода команды:
io.podman.dhcp.socket - DHCP Client for CNI Loaded: loaded (/usr/lib/systemd/system/io.podman.dhcp.socket; enabled; vendor preset: disabled) Active: active (listening) since Mon 2022-01-03 18:08:10 CET; 39s ago Listen: /run/cni/dhcp.sock (Stream) CGroup: /system.slice/io.podman.dhcp.socket
Плагин macvlan#
Хост-система не имеет сетевого доступа к контейнеру. Чтобы разрешить сетевые соединения извне, контейнер должен иметь IP-адрес в той же сети, что и хост. Плагин macvlan разрешает подключение к общей сети.
Примечание
Данный сценарий применим только к контейнерам пользователей с административными полномочиями. Контейнеры пользователей без административных полномочий не используют плагины dhcp и macvlan.
Примечание
Можно создать сеть macvlan с помощью команды podman network create --macvlan.
Переключение сетевого набора средств с CNI на Netavark#
Ранее контейнеры могли использовать DNS только при подключении к одному плагину контейнерного сетевого интерфейса (CNI). Netavark - это сетевой набор средств для контейнеров, который можно использовать с Podman и другими приложениями для управления контейнерами Open Container Initiative (OCI). С его помощью контейнеры в нескольких сетях получают доступ к контейнерам в любой из этих сетей.
Основные возможности Netavark:
Создание, управление и удаление сетевых интерфейсов, включая интерфейсы bridge и MACVLAN;
Изменение настроек брандмауэра, таких как преобразование сетевых адресов (NAT) и правил отображения портов;
Поддержка IPv4 и IPv6;
Улучшенная поддержка контейнеров в нескольких сетях.
Сценарий#
При отсутствии файла
/etc/containers/containers.confскопируйте файл/usr/share/containers/containers.confв каталог/etc/containers/:cp /usr/share/containers/containers.conf /etc/containers/Измените файл
/etc/containers/containers.conf, добавив следующее значение в раздел[network]:network_backend="netavark"При наличии контейнеров или pods сбросьте хранилище в исходное состояние:
podman system resetПерезагрузите систему:
rebootУбедитесь, что сетевой набор средств изменен на
Netavark:cat /etc/containers/containers.confПример вывода команды:
... [network] network_backend="netavark" ...Примечание
При работе с Podman 4.0.0 или более поздней версией используйте команду
podman info, чтобы проверить настройки сетевого набора средств.
Переключение сетевого набора средств с Netavark на CNI#
Можно переключить сетевой набор средств с Netavark на CNI.
Внимание
Сетевой набор средств CNI устарел. Используйте вместо него Netavark.
При отсутствии файла
/etc/containers/containers.confскопируйте файл/usr/share/containers/containers.confв каталог/etc/containers/:cp /usr/share/containers/containers.conf /etc/containers/Измените файл
/etc/containers/containers.conf, добавив следующее значение в раздел[network]:network_backend="cni"При наличии контейнеров или pods сбросьте хранилище в исходное состояние:
podman system resetПерезагрузите систему:
rebootУбедитесь, что сетевой набор средств изменен на CNI:
cat /etc/containers/containers.confПример вывода команды:
... [network] network_backend="cni" ...Примечание
При работе с Podman 4.0.0 или более поздней версией используйте команду
podman info, чтобы проверить настройки сетевого набора средств.