Статьи

TCP-маршрутизация в решетке

Lattice — это проект с открытым исходным кодом для запуска контейнерных рабочих нагрузок в кластере. Решетка включает в себя встроенную http-балансировку нагрузки, планировщик кластера, агрегацию журналов с потоковой передачей журналов и управление работоспособностью. Он построен с использованием компонентов Cloud Foundry, а именно diego (следующего поколения CF), gorouter (http router), loggregator .

До сих пор в Lattice поддерживалась только http маршрутизация / балансировка нагрузки. Это ограничивало приложения / микро-сервисы (рабочую нагрузку), которые были развернуты в Lattice, чтобы использовать только протокол http / s. Однако с   выпуском 0.4.0 мы добавили возможность маршрутизации tcp / балансировки нагрузки в Lattice. Теперь ваши приложения / микро сервисы, развернутые в Lattice, могут получать трафик по любому протоколу на основе tcp.

В этой статье я собираюсь показать типичный рабочий процесс разработчика, использующий Lattice, с особым акцентом на том, как использовать tcp маршрутизацию. Все инструкции ниже, учитывая, что вы используете Lattice 0.4.0 и выше.

Перейдите на https://github.com/cloudfoundry-incubator/lattice/releases и загрузите пакет, специфичный для вашей ОС (в настоящее время поддерживаются только linux и OSX). Убедитесь, что у вас установлен Vagrant 1.6+ и выполните следующие действия:

unzip lattice-bundle-VERSION-PLATFORM.zip
cd lattice-bundle-VERSION-PLATFORM/vagrant
vagrant up

Это раскручивает виртуальную среду, которая доступна в 192.168.11.11.

Вы можете взаимодействовать с этой средой с помощью Lattice CLI ( ltc ), который доступен в загруженном пакете. Чтобы использовать эту недавно развернутую среду Lattice:

cd lattice-bundle-VERSION-PLATFORM/vagrant
./ltc target 192.168.11.11.xip.io

Есть ошибки? Если да, пожалуйста, обратитесь к https://github.com/cloudfoundry-incubator/lattice#trou устранение неполадок , если нет, давайте посмотрим, как развернуть ваше приложение / микро-сервис в Lattice.

С этого момента я буду предполагать, что вы поместили ltc в свой PATH, чтобы мы могли выполнить команду ltc из любого каталога.

Lattice работает с образами докеров (также есть поддержка капель, но это тема для другого поста). Поэтому создайте образ докера приложения, которое вы хотите развернуть, и загрузите его в докер-хаб (в настоящее время Lattice не поддерживает локальные образы докера, но поддерживает частный реестр докеров — http://lattice.cf/docs/private- Docker-Registry / ). Затем вы можете запустить этот образ (приложение), выполнив команду следующим образом (я собираюсь использовать образ докера rabbitmq):

ltc create rabbit rabbitmq --run-as-root --tcp-routes 5672:5672 --monitor-port 5672

Давайте разберемся с этим:

команда create : сообщает Lattice о необходимости создания / запуска приложения
rabbit : имя приложения, которое вы запускаете . изображение
rabbitmq : docker, которое будет использоваться для запуска приложения. Это должно быть в формате изображения докера.
—run-as-root : запускает команду в процессе от имени пользователя root. По умолчанию Lattice использует пользователя без полномочий root, созданного во время создания контейнера.
—tcp-маршруты 5672: 5672: (—tcp-route EXTERNAL_PORT: CONTINER_PORT) Направляет Lattice резервировать внешний порт и перенаправлять запросы на внешний порт на связанный порт контейнера. Контейнерные порты должны быть среди тех, которые указаны с помощью —ports или с помощью директивы EXPOSE Docker image. Некоторые внешние порты зарезервированы и не должны использоваться для приложений. Список этих портов можно найти здесь .

С помощью вышеуказанной команды мы достигли следующего:

  1. Решетка создает контейнер, поддерживаемый корневым fs образа докера
  2. Запускает команду, закодированную в метаданных образа Docker
  3. Сопоставляет внешний порт (5672) 192.168.11.11 с контейнерным портом

Теперь у вас есть приложение, работающее на Lattice, доступное по адресу 192.168.11.11 через внешний порт, который вы зарезервировали с помощью —tcp-route . Клиенты вашего приложения могут подключаться и взаимодействовать с вашим приложением по любому протоколу, а не только по http / s. В случае rabbitmq этот протокол будет amqp. 

Теперь давайте посмотрим, что еще мы можем сделать с решеткой.

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

ltc list

Вы можете просмотреть подробную информацию о вашем приложении, работающем в Lattice, следующим образом:

ltc status rabbit

Lattice также позволяет обновлять ваши tcp-маршруты после запуска приложения. Это можно сделать следующим образом:

ltc update rabbit --tcp-routes=15672:5672

С помощью этой решетки будет сопоставлен внешний порт 15672 с контейнерным портом 5672 для rabbitmq. Клиенты rabbitmq теперь подключаются к rabbitmq через 192.168.11.11:15672.

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

ltc remove rabbit

Это краткий обзор того, как вы можете использовать Lattice для запуска приложений, нуждающихся в поддержке протокола не-http. Если вы новичок в Lattice, вы можете прочитать больше о Lattice по адресу http://lattice.cf/docs.

Я рекомендую вам попробовать Lattice и множество функций, которые он предоставляет, включая маршрутизацию tcp. Мы всегда ищем отзывы, чтобы сделать этот продукт лучше и полезнее для сообщества. Вы можете связаться с нами в списке рассылки cf-Lattice ( https://lists.cloudfoundry.org/archives/list/cf-lattice@lists.cloudfoundry.org/ ) или в списке рассылки cf-dev ( https: //lists.cloudfoundry). .org / archives / list / cf-dev @ lists.cloudfoundry.org / ).