Невозможно получить доступ к докерным контейнерам с хоста через сеть Macvlan

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

Таким образом, в основном установка:

DOCKER1       eth0  172.0.0.1 (default)
  |           eth1  10.0.0.1  (macvlan)
  CONTAINER1        10.0.0.11 (macvlan)

DOCKER2       eth0  172.0.0.2 (default)
  |           eth1  10.0.0.2  (macvlan)
  CONTAINER2        10.0.0.12 (macvlan)
  • Хост DOCKER1 не может связаться с CONTAINER1
  • Хост DOCKER2 не может связаться с CONTAINER2
  • Хост DOCKER1 может связаться с DOCKER2
  • Хост DOCKER1 может связаться с CONTAINER2
  • Хост DOCKER2 может связаться с DOCKER1
  • Хост DOCKER2 может связаться с CONTAINER1
  • Все контейнеры могут достигать друг друга
  • Все остальные устройства в физической сети могут достигать всех
  • Все могут добраться до шлюза / интернета

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

Мне нужны конкретные приложения для взаимодействия по этой сети, поэтому использование docker exec не решит мою проблему;).

1 ответ

Вы можете сделать это, выполнив следующие действия:

ip link add foobar link enp7s0 type macvlan mode bridge
ip addr add 192.168.9.252/32 dev foobar
ip link set foobar up
ip route add 192.168.9.228/32 dev foobar

Где:

enp7s0 - Имя вашего физического адаптера

192.168.9.252/32 - Настоящий новый IP в вашей сети

192.168.9.228/32 - IP контейнера, использующего macvlan

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

Хост не может связываться с локальными устройствами Macvlan без специальной поддержки от внешнего коммутатора. Смотрите, например, эту документацию Red Hat, в которой обсуждается использование устройств macvlan для виртуальных машин:

Однако, когда гостевая виртуальная машина настроена на использование сетевого интерфейса type='direct', такого как macvtap, несмотря на то, что она может взаимодействовать с другими гостями и другими внешними хостами в сети, гость не может связываться с собственным хостом.

Эта ситуация на самом деле не является ошибкой - это определенное поведение macvtap. Из-за способа, которым физический Ethernet хоста подключен к мосту macvtap, трафик на этот мост от гостей, который перенаправляется на физический интерфейс, не может быть возвращен обратно в стек IP хоста. Кроме того, трафик из стека IP-адресов хоста, который отправляется на физический интерфейс, не может быть возвращен обратно на мост macvtap для пересылки гостям.

Другие вопросы по тегам