Экосистема Docker: сетевое взаимодействие

Серия туториалов

Этот туториал является 4-й частью из 5-ти серии статей * Экосистема Докер *.

Введение

Docker-контейнеры, сетевое взаимодействие становится крайне важными. Сервисно-ориентированная архитектура, основанная на взаимодействии между компонентами для корректного функционирования системы в целом.

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

Встроенная реализация сетевого взаимодействия от Docker

Сам Docker предоставляет множество базовых функциональных возможностей для взаимодействия по сети, «контейнер-контейнер» и «контейнер-хост».

При запуске Docker-процесса он создает новый виртуальный интерфейс типа «мост» с названием + docker0 + в хост-системе. Этот интерфейс позволяет Docker создавать виртуальные подсети для использования в контейнерах. Мост будет служить основной точкой взаимодействия между сетью внутри контейнера и сетью хоста.

Когда Docker запускает контейнер, создается новый виртуальный интерфейс. IP-адрес, связанный с внутренним сетевым контейнером, + docker0 + в системе хоста. Docker автоматически конфигурирует правила в `+ iptables + для обеспечения переадресации и конфигурирования * NAT * для трафика из + docker0 + во внешней сети.

Как контейнеры делают свои услуги доступными для потребителей?

Доступны сервисы для доступа к сервису, без каких-либо дополнительных настроек. + Docker0 + `в соответствующем месте.

Они могут принимать трафик, приходить из внешнего мира. Открытые порты могут быть отображены (отображены) на хост-системе либо с помощью выбора порта, либо с помощью разрешения Docker выбрать случайный неиспользуемый порт с большим адресом. Docker использует все правила переадресации и настройки + iptables + для корректной маршрутизации пакетов.

В чем разница между открытием (публикацией) порта?

У вас есть выбор между открытием и публикацией портов. Разница между этими вариантами значительна, но может быть заметна не сразу.

Открытие (разоблачение) порта означает, что данный порт используется контейнером. Это используется в целях обнаружения и связи. Например, проверка (осмотр) контейнера даст вам информацию об открытых портах. Когда контейнеры связаны, переменные окружения в новом контейнере будут установлены соответствующим образом, в соответствии с открытыми портами исходного контейнера.

По умолчанию контейнеры будут доступны для хост-системы и любых других контейнеров. Открытие порта просто документирует доступ к автоматическому маппированию и соединениям.

В отличие от этого, публикация (публикация) обеспечивает его доступ к внешнему миру. Докер может автоматически выбирать высокий неиспользуемый порт с большим адресом.

Docker предоставляет механизм под названием Docker-связи для конфигурации взаимодействия между контейнерами. Докер-связи, новый контейнер получит информацию о существующем через переменные окружения.

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

Проекты, расширяющие сетевое взаимодействие Docker

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

Тем не менее, многие приложения требуют особых условий сетевого взаимодействия из соображений безопасности или для их правильного функционирования в целом. Для этих случаев нативных решений Docker недостаточно. По этой причине существует множество проектов, расширяющих функциональность экосистемы Docker.

Создание оверлейных сетей для абстрагирования от топологии сети

Сразу несколько проектов сфокусировали свои усилия на создании оверлейных сетей. Оверлейная сеть - это виртуальная сеть, построенная поверх существующей сети.

Создание оверлейной сети позволяет вам создать более предсказуемую и единую сетевую среду между хостами. Это упрощенное сетевое взаимодействие между контейнерами вне зависимости от того, где они физически запущены. Одна виртуальная сеть может охватывать множество хостов или отдельных физических подсетей.

Одним из примеров использования оверлейных сетей является создание полносвязной вычислительной среды (кластеры вычислительных сетей). В полносвязной вычислительной среде множество хостов представляются в виде более абстрактной и высокоуровневой сущности. Реализация полносвязной вычислительной среды позволяет конечному пользователю управлять кластером. Организация сетевого взаимодействия играет при этом ключевую роль.

Организация продвинутого сетевого взаимодействия

Существуют проекты, расширяющие сетевые возможности Docker и увеличивают гибкость его использования.

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

Дополнительная функциональность предоставляется при помощи «встраиваемых» возможностей. Эти проекты не имеют доступа к конфигурации «из коробки». Настройка мостов (мосты), виртуальных локальных сетей, подсетей, шлюзов (шлюзы).

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

Самые популярные проекты для улучшения сетевых возможностей Docker

Существует несколько проектов, направленных на построение оверлейных сетей для Docker-хостов. Наиболее распространенными являются:

  • * фланель *: Изначально разработанная команда CoreOS позволяет создавать свои собственные подсети в общей сети. Это, в первую очередь, необходимо для использования инструмента для оркестровок в Google под названием kubernetes, но полезно и в некоторых других ситуациях.

  • * weave *: Weave создает виртуальную сеть, объединяющую каждый хост в единое целое. Это упрощает маршрутизацию, поэтому каждый контейнер выглядит так, как будто он подключен к единой сети.

Для «продвинутого» управления сетью используются следующие проекты:

  • * pipework *: возможность использования в Docker стали более или менее «продвинутыми».

Еще одним примером существующего программного обеспечения для добавления функциональности в Docker является:

  • * tinc *: Tinc - это «лёгкое» средство для построения VPN, реализующее туннелирование и шифрование. Tinc представляет собой надёжное решение для построения частных сетей «прозрачных» для любых приложений.

Заключение

Предоставление внутренних и внешних сервисов с помощью контейнерных компонентов представляет собой очень мощную модель создания программного обеспечения, но в этом случае особенное значение приобретает сетевое взаимодействие. Несмотря на то, что Docker предоставляет определенную встроенную функциональность для настройки виртуальных интерфейсов, подсети, + iptables + и настройки NAT-таблиц, существует множество проектов, созданных для расширения сетевых возможностей Docker.

В следующей stasure мы обсуждаем как планировщики (планировщики) и средства оркестровки (инструменты оркестровки) позволяют создавать кластерами контейнеров.

Related