Я использую докер с macvlan, где каждый из моих контейнеров имеет собственное подключение L2 с MAC-адресом и IP. Мне также нужно гарантировать, что контейнеры достигают хоста и наоборот. Я могу добиться этого в данный момент, используя netplan и скрипт для удаления некоторых маршрутов, но мне нужна ваша помощь, чтобы понять, смогу ли я сделать это с помощью netplan.
Моя конфигурация такова:
Пакетный скрипт для создания интерфейса macvlan (пока не поддерживается в netplan)
#! /бин/баш
#! ip link add macvlan link vlan10 type macvlan mode bridge
Интерфейс vlan10 создается с конфигурацией netplan
01-netcfg.yaml
сеть:
версия: 2
визуализатор: сетевой
Ethernet:
эно1:
DHCP4: да
DHCP6: да
адреса:
- аааа:bbbb:cccc:1::11/64
вланы:
влан10:
идентификатор: 10
ссылка: en1
DHCP4: нет
DHCP6: нет
адреса:
- 192.168.10.11/24
- аааа:bbbb:cccc:10::11/64
Это гарантирует, что интерфейс VLAN, созданный только для докера, создан и доступен.
20-докер.yaml
сеть:
версия: 2
визуализатор: сетевой
Ethernet:
маквлан:
DHCP4: нет
DHCP6: нет
адреса:
- 192.168.10.5/24
- аааа:bbbb:cccc:10::5/64
Я бы признал, что, возможно, это не самый эффективный способ настроить нужное мне решение, но он работает, и таким образом я избегаю создания сценариев для запуска при перезагрузке с помощью cron.
Часть маршрутов
Теперь, когда я создал интерфейсы, когда они работают, автоматически создается набор маршрутов, даже я не определяю шлюз4 и шлюз6 директивы и определить netplat для игнорирования маршрутов DHCP по умолчанию. Но, несмотря на это, эти маршруты для IPv4 и IPv6 создаются автоматически, что позволяет избежать доступа к контейнерам в сети vlan10 из-за ограничений сетевых драйверов докеров по дизайну.
Маршруты IPv4 для новых интерфейсов
192.168.10.0/24 dev vlan10 ссылка на область ядра proto src 192.168.10.11
192.168.10.0/24 dev macvlan ссылка на прото-ядро области src 192.168.10.5
192.168.10.0/24 через 192.168.10.5 dev macvlan proto static metric 100
192.168.10.0/24 через 192.168.10.11 dev vlan10 протостатическая метрика 150
Маршруты IPv6 для новых интерфейсов
aaaa:bbbb:cccc:10::/64 dev vlan10 proto kernel metric 256 pref medium
aaaa:bbbb:cccc:10::/64 dev macvlan proto kernel metric 256 pref medium
Чтобы мое решение работало, мне нужно вручную удалить (или использовать загрузочный bash-скрипт), чтобы удалить указанные выше маршруты ядра для устройства vlan10 в IPv4 и IPv6. Выполняя эту задачу, я могу восстановить связь хост-контейнер.
Есть ли способ улучшить это решение и избежать создания этих маршрутов или команду игнорировать этот конкретный маршрут, который мне не нужен на этом конкретном интерфейсе, чтобы гарантировать использование моего решения в сетевом плане?
Мы высоко ценим ваш опыт и доступность. Спасибо
** 20.10.2021 - Редактировать после комментариев и дальнейшего тестирования**
После еще одного просмотра, тестирования и обучения я перешел к следующим изменениям, которые решили мои проблемы и позволили моему хосту обращаться к контейнерам внутри. маквлан
интерфейс.
01-netcfg.yaml
сеть:
версия: 2
визуализатор: сетевой
Ethernet:
эно1:
DHCP4: да
DHCP6: да
адреса:
- аааа:bbbb:cccc:dddd:192:168:1:11/64
вланы:
влан10:
идентификатор: 10
ссылка: en1
DHCP4: нет
DHCP6: нет
адреса:
- 192.168.10.11/32
- аааа:bbbb:cccc:10::11/128
локальная ссылка: []
Маски подсети IPv4 и IPv8 изменены на /32 и /128 соответственно. Это создало правильные правила и заставило мой хост восстановить связь с моей сетью контейнеров докеров. Также включен `link-local: []´, чтобы этот интерфейс не создавал локальный IP-адрес ссылки, который может мешать.
20-докер.yaml
сеть:
версия: 2
визуализатор: сетевой
Ethernet:
маквлан:
DHCP4: нет
DHCP6: нет
адреса:
- 192.168.10.5/24
- аааа:bbbb:cccc:10::5/64
С этой конфигурацией я мог восстановить связь между хостом и контейнерами для IPv4 и IPv6 и избежать внешних сценариев для удаления маршрутов или объявления конкретных маршруты:
и политики маршрутизации:
директивы в нетплане.
Надеюсь, это поможет другим с похожими проблемами. Спасибо