Требования: Я хочу назначить независимый локальный IP-адрес Docker-контейнеру через DHCP-сервис маршрутизатора, чтобы разработанное ASP.NET Core приложение могло быть развернуто на нескольких серверах (приложение должно быть развернуто на нескольких серверах для достижения высокой доступности), а затем их можно было передавать друг другу. Некоторые приложения, особенно устаревшие или те, что отслеживают сетевой трафик, ожидают прямого подключения к физической сети. В этом случае вы можете использовать драйвер сети macvlan, чтобы назначить MAC-адрес виртуальному сетевому интерфейсу каждого контейнера, чтобы он выглядел как физический сетевой интерфейс, который напрямую подключается к физической сети. В этом случае нужно указать физический интерфейс на вашем Docker-хосте для macvlan. И. подсети и шлюзы Macvlan. Вы даже можете изолировать свою сеть с помощью другого физического сетевого интерфейса.
Сначала нужно установить физическую сетевую карту хост-машиныРазрешает режим «промискуитетного режима»Например, используя ESXI в качестве примера, настройте виртуальный коммутатор следующим образом:
Системная среда выглядит следующим образом:
CentOS Linux релиз 7.9.2009 (Core) Docker версии 20.10.20, сборка 9fdeb9c
Установите сервис Docker на хост CentOS 7. (опущено)
Устанавливатьnet.ipv4.ip_forward = 1, вы можете посмотреть текущую конфигурацию через sysctl -a, если это не 1, пожалуйста, измените её на 1, туториал опущен. Основная цель — определить, может ли полученная с одной сетевой карты информация, полученная одной сетевой картой, передаваться другим сетевым картам, если у Linux-хоста несколько сетевых карт, и если установлено в 1, можно выполнять пересылку пакетов.
Когда сервис Docker установлен, создайте сеть macvlan с помощью следующей команды:
--ip-range: Принято решение присвоить подмножество Docker 192.168.50.192/27, что представляет собой диапазон из 32 адресов, начинающийся с 192.168.50.192 и заканчивающийся 192.168.50.223. --шлюз: Установите адрес шлюза, обычно IP-адрес маршрутизатора, пожалуйста, настройте его в соответствии с вашей реальной ситуацией -o parent: родительский интерфейс, то есть название физической NIC-карты хоста, может просматриваться через IP A в зависимости от реальной ситуации.
После завершения создания вы можете просмотреть его следующей командой:
Попробуйте запустить контейнер busybox и настроить сеть с недавно созданным macvlan с помощью следующей команды:
Совет: если нужно, отдайте контейнерДля установки IP-адреса используйте параметр --ip, например: --ip=192.168.50.210
Вы можете просмотреть IP-адрес контейнера с помощью следующей команды:
Конечно, вы также можете зайти внутрь контейнера, чтобы посмотреть его, выполнив следующую команду:
МыИспользуя другие машины в локальной сети, попробуйте пинговать IP-адрес контейнера, вы можете найти пинг, как показано на рисунке ниже:
Посмотрев на таблицу отображения IP и MAC роутера, видно, что MAC/IP-адрес контейнера Docker совпадает с адресом роутера, как показано на рисунке ниже:
Попробуйте снова запустить контейнер Redis и настроить новую сеть MacVLAN с помощью следующей команды:
Сам хост CentOS также имеет запущенное приложение redis и использует порт 6379, а мы создаём контейнерное приложение Redis, которое также использует порт 6379, то естьОдин и тот же хост-порт 6379 прослушивается двумя разными IP-адресами, попробуй проверить, работает ли это.
Результаты теста работают нормально, как показано на рисунке ниже:
Ресурсы
Вход по гиперссылке виден.
|