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

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

Введение

ПрипроектированиираспределённыхсистемработающихсDocker-контейнерами、сетевоевзаимодействие Сервис-ориентированнаяархитектура、бесспорно、опираетсянавзаимодействиемеждукомпонентамид

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

Docker

Dockerпредоставляетмногобазовогофункционаласетевоговзаимодействия、необходимогодлясвязей

Docker-процесса、онсоздаетновыйвиртуальногоинтерфейстипа“мост”сназванием docker0 вхост-системе。 ЭтотинтерфейспозволяетDockerсоздатьвиртуальнуюподсетьдляиспользованияконтейнерами、которы Мостбудетслужитьосновнойточкойвзаимодействиямеждусетьювнутриконтейнераисетьюхоста。

Dockerзапускаетконтейнер、создаетсяновыйвиртуальныйинтерфейсиемуназначаетсяадресвди IP-адрессвязансвнутреннейсетьюконтейнера、предоставляяпутьдлясетиконтейнеракмосту docker0 ギボウシ。 Dockerавтоматическиконфигурируетправилав iptables дляобеспеченияпереадресациииконфигурируетNATдлятрафикаиз docker0 вовнешнююсеть。

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

Другиеконтейнерынатомжехостеспособныосуществлятьдоступксервисам、предоставляемымсос Хост-системапростобудетнаправлятьзапросыкинтерфейсу docker0 всоответствующееместо。

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

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

ПрисозданииобразаконтейнераилиегозапускеуВасестьвыбормеждуоткрытиемипубликациейп Разницамеждуэтивариантамизначительная、номожетбытьзаметнанесразу。

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

По умолчанию, контейнеры будут доступны для хост-системы и любых других контейнеров, расположенных на том же хосте, независимо от того, открыты ли порты. 情報は、情報を提供します。情報は、情報を提供します。

Вотличиеотэтого、публикация(出版)портамаппируетегонаинтерфейсхоста、делаяегодоступны Портыконтейнерамогутбытьпривязаныкконкретномупортухоста、илиDockerможетавтоматическивыбр

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

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

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

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

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

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

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

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

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

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

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

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

Дополнительнаяфункциональностьпредоставляетсяприпомощи“встраиваемых”возможностей。 Эти проекты не предоставляют конфигурацию “из коробки”, но при этом позволяют Вам вручную настроек то, что вам необходимо для реализации более сложных сценариев сетевого взаимодействия. Примерами такого “нестандартного” сетевого взаимодействия могут быть настройка приватной сети между определёнными хостами, настройка мостов (bridges), виртуальных локальных сетей, подсетей, шлюзов (gateways).

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

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

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

  • フランネル:ИзначальноразработанкомандойCoreOSдляобеспеченияхоставозможностьюсоздавать Это, в первую очередь, необходимо для функционирования инструмента для оркестровки от Google под названием kubernetes, но полезно и в некоторых других ситуациях.
  • weave :Weaveсоздаетвиртуальнуюсеть、объединяющуюкаждыйхоствединоецелое。 Этоупрощаетмаршрутизацию、посколькуприэтомкаждыйконтейнервыглядиттак、какбудтоот

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

  • pipework: созданный как временное решение до того, как встроенные сетевые средства Docker стали более или менее “продвинутыми”, этот проект предоставляет возможность “продвинутой” настройки сетевой конфигурации для контейнеров.

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

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

Заключение

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

Вследующейстатьемыобсудимкакпланировщики(スケジューラー)исредстваоркестровки(オーケストレーションツール)