Docker macvlan как настроить

Docker: настройка сети

Docker: настройка сети

Сетевые драйверы

Сетевая подсистема Docker является подключаемой с использованием драйверов.
Несколько драйверов существуют по умолчанию и предоставляют основные сетевые функции:

bridge: сетевой драйвер по умолчанию.
Если вы не указываете драйвер, это тип сети, которую вы создаете.
Мостовые сети обычно используются, когда ваши приложения работают в автономных контейнерах, которые должны взаимодействовать.

host: для автономных контейнеров, удаляет сетевую изоляцию между контейнером и Docker-хостом.
Хост доступен только для служб swarm в Docker версии 17.06 и выше.

overlay: overlay сети соединяют несколько демонов Docker вместе и позволяют сервисам Swarm связываться друг с другом.
Вы также можете использовать overlay сети для облегчения связи между сервисом Swarm и автономным контейнером.
Или между двумя автономными контейнерами на разных демонах Docker.
Эта стратегия устраняет необходимость выполнять маршрутизацию на уровне ОС между этими контейнерами.

macvlan: сети Macvlan позволяют назначать MAC-адрес контейнеру, делая его физическим устройством в вашей сети.
Демон Docker направляет трафик в контейнеры по их MAC-адресам.
Использование драйвера macvlan иногда является лучшим выбором при работе с устаревшими приложениями.
Приложениям, которые ожидают прямого подключения к физической сети, а не маршрутизации через сетевой стек хоста Docker.

none: для этого контейнера отключит все сети.
Обычно используется в сочетании с пользовательским сетевым драйвером. Ни один не доступен для swarm услуг.

Сетевые плагины: вы можете устанавливать и использовать сторонние сетевые плагины с Docker.
Эти плагины доступны в Docker Hub или у сторонних поставщиков.

Обзор сетевого драйвера

bridge подходят, когда вам нужно несколько контейнеров для связи на одном хосте Docker.

host подходят, когда сетевой стек не должен быть изолирован от хоста Docker, но вы хотите, чтобы другие аспекты контейнера были изолированы.

overlay подходят, когда вам нужны контейнеры, работающие на разных хостах Docker, или нескольких приложений, работающих вместе с сервисами Swarm.

macvlan подходят, когда вам нужны контейнеры, чтобы они выглядели как физические хосты в вашей сети, каждый из которых имеет уникальный mac адрес.

Сторонние сетевые плагины позволяют интегрировать Docker со специализированными сетевыми стеками.

Вывести список сетей:
docker network ls
NETWORK ID NAME DRIVER SCOPE
54b6ffe3955d bridge bridge local
bde168a59997 host host local
7154f6acc15b none null local
ee47b212c1eb pd_default bridge local
fff6ee9d1f88 web_default bridge local

Где:
NETWORK ID — Уникальный идентификатор сети.
NAME — Имя сети.
DRIVER — Драйвер сети.
SCOPE — Область использования.

Создание сетей(справка):
docker network create —help

Usage: docker network create [OPTIONS] NETWORK

Create a network

Options:
—attachable Enable manual container attachment
—aux-address map Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
—config-from string The network from which copying the configuration
—config-only Create a configuration only network
-d, —driver string Driver to manage the Network (default «bridge»)
—gateway strings IPv4 or IPv6 Gateway for the master subnet
—ingress Create swarm routing-mesh network
—internal Restrict external access to the network
—ip-range strings Allocate container ip from a sub-range
—ipam-driver string IP Address Management Driver (default «default»)
—ipam-opt map Set IPAM driver specific options (default map[])
—ipv6 Enable IPv6 networking
—label list Set metadata on a network
-o, —opt map Set driver specific options (default map[])
—scope string Control the network’s scope
—subnet strings Subnet in CIDR format that represents a network segment

Читайте также:  Как настроить поворот экрана айпада

Создание сети (типа сетевой мост):
docker network create network_name1
docker network create —driver=bridge network_name2
docker network create —subnet 10.0.3.0/24 —gateway=10.0.3.1 —ip-range 10.0.3.0/24 —driver=bridge —label=my_network network_name3

Создание сети (типа macvlan):
docker network create -d macvlan —subnet=10.0.2.0/24 —gateway=10.0.2.1 -o parent=enp0s3 network_name4

docker network ls | grep network_name
cac21f9f673d network_name1 bridge local
4c884b175844 network_name2 bridge local
93c8fc1c3c01 network_name3 bridge local
640a12029ce8 network_name4 macvlan local

Запуск контейнера с привязкой к сети:
docker run -it —name=debian_network_name2 —net network_name2 debian /bin/bash
docker run -it —name=debian_network_name3 —net network_name3 —ip=10.0.3.12 debian /bin/bash

Отключение\подключение сети к контейнеру:
docker network disconnect NETWORK_ID CONTAINER_ID
docker network connect NETWORK_ID CONTAINER_ID

Получим информацию о сети (network_name3):
docker network inspect network_name3

Удаление сети:
docker network rm NETWORK_ID

Источник

Use macvlan networks

Estimated reading time: 3 minutes

Some applications, especially legacy applications or applications which monitor network traffic, expect to be directly connected to the physical network. In this type of situation, you can use the macvlan network driver to assign a MAC address to each container’s virtual network interface, making it appear to be a physical network interface directly connected to the physical network. In this case, you need to designate a physical interface on your Docker host to use for the macvlan , as well as the subnet and gateway of the macvlan . You can even isolate your macvlan networks using different physical network interfaces. Keep the following things in mind:

It is very easy to unintentionally damage your network due to IP address exhaustion or to “VLAN spread”, which is a situation in which you have an inappropriately large number of unique MAC addresses in your network.

Your networking equipment needs to be able to handle “promiscuous mode”, where one physical interface can be assigned multiple MAC addresses.

If your application can work using a bridge (on a single Docker host) or overlay (to communicate across multiple Docker hosts), these solutions may be better in the long term.

Create a macvlan network

When you create a macvlan network, it can either be in bridge mode or 802.1q trunk bridge mode.

In bridge mode, macvlan traffic goes through a physical device on the host.

In 802.1q trunk bridge mode, traffic goes through an 802.1q sub-interface which Docker creates on the fly. This allows you to control routing and filtering at a more granular level.

Bridge mode

To create a macvlan network which bridges with a given physical network interface, use —driver macvlan with the docker network create command. You also need to specify the parent , which is the interface the traffic will physically go through on the Docker host.

If you need to exclude IP addresses from being used in the macvlan network, such as when a given IP address is already in use, use —aux-addresses :

802.1q trunk bridge mode

If you specify a parent interface name with a dot included, such as eth0.50 , Docker interprets that as a sub-interface of eth0 and creates the sub-interface automatically.

Use an ipvlan instead of macvlan

In the above example, you are still using a L3 bridge. You can use ipvlan instead, and get an L2 bridge. Specify -o ipvlan_mode=l2 .

Читайте также:  Как починить электронный модуль

Use IPv6

If you have configured the Docker daemon to allow IPv6, you can use dual-stack IPv4/IPv6 macvlan networks.

Источник

Русские Блоги

Сетевое решение для контейнеров macvlan

1. Схема анализа

По умолчанию container Время выполнения ( такие как docker) В конфигурации сети все container Пакеты будут проходить по умолчанию bridge Плюс iptables из NAT Вход и выход, для большого трафика или большого TPS Процедуры, основанные на Linux Функция ядра bridge с участием NAT Несомненно, это станет узким местом емкости контейнерной сети, можно использовать macvlan Функция для улучшения container Сетевые возможности.

Перепечатано с https://blog.csdn.net/cloudvtech

Во-вторых, настройте macvlan для контейнера

Контейнер фактически использует функцию сетевого пространства имен, предоставляемую Linux, для установления сетевой функции контейнера, включая стек протоколов, сетевую карту, маршрутизацию, правила iptable и т. Д., Которые не зависят от других сетевых пространств имен. Но если вы используете режим docker container none network, то у этого контейнера не будет никаких сетевых ресурсов, а затем вы можете настроить сеть macvlan для экземпляра контейнера с помощью команд или скриптов инструментов.

можно использоватьhttps://github.com/jpetazzo/pipework/ Этот инструмент настраивает сеть для контейнера:
docker run -d —name=nginx1 —net=none chr:nginx
pipework eno16777736 nginx1 192.168.166.224/[email protected]
Эта команда на самом деле

  • Субинтерфейс macvlan установлен на физической сетевой карте eno16777736
  • Создайте сетевое пространство имен для контейнера
  • Поместите субинтерфейс macvlan в сетевое пространство имен контейнера.
  • Настроить IP и маршрутизацию в пространстве имен сети

После настройки каждый экземпляр контейнера будет иметь независимый MAC-адрес, который находится в той же подсети, что и сетевая карта хоста eno16777736, и имеет независимый IP-адрес подсети, который может восприниматься другими хостами и коммутирующими устройствами в подсети:

Перепечатано с https://blog.csdn.net/cloudvtech

Три: преимущества и недостатки macvlan

Перепечатано с https://blog.csdn.net/cloudvtech

В-четвертых, интеграция контейнера macvlan и IPVS.

IPVS — это решение для загрузки, основанное на ядре Linux.Режим прямой маршрутизации IPVS особенно подходит для сетевых служб балансировки нагрузки (таких как службы потокового видео) с небольшими запросами и большими ответами. После настройки macvlan для контейнера вы можете использовать командную строку для настройки контейнера как серверной службы для балансировки нагрузки IPVS:

Внутренняя сеть контейнера после присоединения к VIP:

Затем вы можете добавить IP-адрес контейнера к директору IPVS в качестве внутреннего сервера для балансировки нагрузки:

Источник

linux-notes.org

Я довольно давно работаю с docker, не все время, а переодически, но тем-не-менее я проникся докер технологией. Порой не было времени освоить\ познать глубины докера и написать статью для заметок. Сейчас много чего изменилось, у меня появилось желание и время, по этому — я могу рассказать о «Работа с сетью (Networking) в Docker».

Надеюсь что у вас уже имеется докер на хостевой машине, если нет, вот полезные статьи:

И так, приступим.

Работа с сетью (Networking) в Docker

Сетевая Docker подсистема подключается используя драйверы. По умолчанию существует несколько драйверов которые обеспечивают основные сетевые функции:

  • bridge: Мост, — это сетевой драйвер по умолчанию. Бридж сеть используется, когда ваши приложения запускаются в автономных контейнерах, которые должны взаимодействовать между собой (Наглядный пример Nginx + MySQL).
  • host: Хост, — это сетевой драйвер для автономных контейнеров (удаленная сетевая изоляция между контейнером и Docker хостом). Данный драйвер доступен только для docker-swarm с поддержкой Docker 17.06 и выше.
  • overlay/overlay2: Оверлей (Наложенная сеть), — это сетевой драйвер для соединения несколько демонов Docker между собой и которые позволяют docker-swarm службам взаимодействовать друг с другом. Вы также можете использовать оверлейные сети для облегчения связи между docker-swarm и автономным контейнером или между двумя отдельными контейнерами на разных Docker демонах. Эта стратегия устраняет необходимость выполнения маршрутизации на уровне ОС между этими контейнерами.
  • macvlan: Маквлан,- это сетевой драйвер, который позволяют назначать MAC-адрес контейнеру, делая его отображаемым как физическое устройство в вашей сети. Docker демон направляет трафик на контейнеры по их MAC-адресам. Использование macvlan драйвера иногда является лучшим выбором при работе с устаревшими приложениями, которые ожидают, что они будут напрямую подключены к физической сети.
  • none: Нон,- это сетевой драйвер, который умеет отключать всю сеть для контейнеров. Обычно используется в сочетании с пользовательским сетевым драйвером.
  • Network plugins: Вы можете установить и использовать сторонние сетевые плагины с Docker контейнерами. Эти плагины доступны в Docker Store или у сторонних поставщиков услуг.
Читайте также:  Почему не работает setbounds java

Где и что лучше использовать?

  • Мост (bridge) лучше всего использовать для связи нескольких контейнеров на одном и том же Docker хосте. Можно юзать docker-compose и выберать даную сеть для такой связки.
  • Хост (host) сети лучше всего юзать, когда сетевой стек не должен быть изолирован от хоста Docker, но вы хотите, чтобы другие аспекты контейнера были изолированы.
  • Овердейная сеть (overlay/overlay2) или наложение сетей лучше всего заюзать, когда вам нужны контейнеры, работающие на разных Docker хостах для связи, или, когда несколько приложений работают вместе, используя docker-swarm.
  • Маквлан (macvlan) сети лучше всего использовать, когда вы переходите с VM/дедикейта на контейнеры или хотите, чтобы ваши контейнеры выглядели как физические хосты в вашей сети, каждый с уникальным MAC-адресом.
  • Сторонние сетевые плагины позволяют интегрировать Docker со специализированными сетевыми стеками.

Просмотреть Network в Docker

Чтобы проверить какие сети имеются, выполните следующую команду:

  • NETWORK ID — При создании сети, ей присваивается ID. Так это собственно индификатор сети.
  • NAME — Имя сети. Можно задать произвольное имя.
  • DRIVER — Используемый драйвер для созданной сети.
  • SCOPE — Где используется.

Если посмотреть на поле «DRIVER», то можно понять что я использую стандартную сеть, которую предоставляет сам докер.

Создать Network в Docker

Давайте создадим сеть, самый простой способ это:

Вы можете создавать bridge, overlay, host, none или кастомный network-инг. По дефолту, — создается мост. Проверяем что вышло:

Как я и говорил, создался бридж с указанным названием сети. Давайте рассмотрим пример создания оверлей-сети:

Можно создать macvlan сеть, например:

Еще один пример создания сети:

Проверим созданную сеть на примере, какого-то контейнера:

PS: Если нужно, то контейнеру можно выделить статик ИП:

При создании сети, можно задавать дополнительные параметры, с ними можно ознакомится:

Подключить/Отключить контейнер(ы) к/от сети в Docker

Чтобы законектить контейнер к сети, нужно выполнить следующую команду:

  • YOUR_NETWORK — Сеть.
  • YOUR_CONTAINER — Контейнер.

Для отключения служит обратная команда:

  • YOUR_NETWORK — Сеть.
  • YOUR_CONTAINER — Контейнер.

Инспектор Network в Docker

Можно получить подробную информацию о той или иной сети, например:

Довольно много полезной информации можно получить из данной команды.

Так же, можно получить инфу со следующей команды:

Или если есть необходимость в форматировании и выводе нужных полей, то можно заюзать следующий формат:

Удаление Network в Docker

Для удаления сети, используйте:

Или если нужно удалить все созданные сети которые не используются вами:

Если появится хороший материал, обязательно добавлю в данную статью. Вот и все, тема «Работа с сетью (Networking) в Docker» подошла к завершению.

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Источник

Оцените статью