Невозможно получить доступ к докерным контейнерам с хоста через сеть 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 для пересылки гостям.