В прошлый раз я рассказал о функциях балансировщика нагрузки NSX ALB, описал его архитектуру и схему работы. Мы посмотрели, как работает глобальная балансировка серверов (GSLB), которая объединяет серверы на географически разнесенных площадках в единый пул. В том числе, так можно распределять нагрузку между серверами в облаке и локальными серверами.
В этой статье поделюсь опытом внедрения системы для тестирования в нашем облаке. Опишу установку NSX ALB в VMware vCenter и основные этапы настройки для тех, кто хочет самостоятельно подключить для глобальной балансировки свою локальную площадку.
Этот шаг необходим на локальной площадке для подключения ее к глобальной балансировке.
Теперь по тому же IP-адресу доступен интерфейс системы. В левом верхнем углу появилось основное меню NSX ALB из 5 разделов:
Если в системе настроено более одного облака, то в разделе Networks сверху появляется выпадающий список Select Cloud. В этом случае перед поиском сети выбираем нужное облако из выпадающего списка:
Если в vCenter более одного кластера, можно задать конкретный кластер и тип хранилищ (только общие), на которых будут размещаться SE. Для этого в разделе Infrastructure –> Service Engine Group откроем для редактирования используемую группу SE (например, Default-Group). В ней на вкладке Advanced в разделе Host & Data Store Scope переключимся на Cluster и выберем нужный, а также выберем Shared в разделе датасторов:
При необходимости можно задать только конкретные хосты: нажать кнопку Host и выбрать их из списка. То же самое с датасторами: можно включить конкретные по кнопке Include и выбрать их из списка.
Для использования функции глобальной балансировки система NSX ALB должна быть развернута на 2 разных площадках. Итак, на локальной площадке мы развернули контроллер, создали и настроили VS. Теперь выполним шаги по развертыванию DNS как VS на каждой площадке – в нашем примере локальной и облачной.
Настройка сервиса DNS
Настройка сайтов
Для настройки самого глобального сервиса сначала нужно создать сайты GSLB. Напомню, что сайты в терминологии Avi – все внедрения NSX ALB с самостоятельным контроллером (или их кластером), которые мы используем в рамках GSLB.
В итоге раздел с сайтами будет выглядеть так:
Создание глобального сервиса
В разделе Applications теперь есть раздел GSLB Services – он появился после включения GSLB в разделе Infrastructure.
На этом настройка GSLB завершена. Теперь балансировка не ограничивается рамками одной площадки: можно добавлять нужное их количество и балансировать между всеми одновременно. Если же самостоятельная настройка кажется трудоемкой, всегда готовы помочь.
В этой статье поделюсь опытом внедрения системы для тестирования в нашем облаке. Опишу установку NSX ALB в VMware vCenter и основные этапы настройки для тех, кто хочет самостоятельно подключить для глобальной балансировки свою локальную площадку.
- развертывание и настройка контроллера;
- предварительная настройка сети;
- создание виртуального сервиса (VS) и подключение серверов для балансировки;
- настройка глобального сервиса балансировки серверов.
Установка контроллера
Этот шаг необходим на локальной площадке для подключения ее к глобальной балансировке.
- Сервисы для балансировки будут жить в VMware vCenter. Создаем там три портгруппы, которые будем использовать как:
- management-сеть для управления и связи между контроллером и служебными виртуальными машинами SE (внутренняя адресация),
- сеть для SE, для внутренних нужд NSX ALB (внутренняя адресация),
- сеть внешних адресов для подключения клиентов к балансируемым сервисам снаружи (внешняя адресация).
- Скачиваем с сайта Avi OVA-образ и разворачиваем контроллер как виртуальную машину (ВМ).
- Запускаем ВМ и открываем веб-интерфейс контроллера по настроенному IP-адресу.
- Следуем шагам мастера для первичной настройки, как описано в документации вендора.
Теперь по тому же IP-адресу доступен интерфейс системы. В левом верхнем углу появилось основное меню NSX ALB из 5 разделов:
Предварительная настройка
- Настроим статический диапазон адресов management-сети. Когда контроллер развернет служебные машины SE, они будут получать адреса из этого диапазона.
В главном меню переходим в раздел Clouds. Выберем наш vCenter и внесем изменения в настройки:
- На вкладке Network в разделе IP Address Management for Management Network заполним поля IP Subnet, Add Static IP Address Pool и Default Gateway:
- Настроим аналогичные статические диапазоны для всех сетей, которые нужны при разворачивании новых SE и VS. В частности, это нужно сделать для служебной сети SE и всех сетей, в которых развернуты серверы для балансировки в рамках VS.
Для этого зайдем в Infrastructure –> Networks, зададим критерии поиска нужной сети и откроем ее свойства:
- Для части сетей система самостоятельно определяет параметры по информации из vCenter. В этом случае в разделе Network IP Subnets сразу появится подсеть с типом Discovered, останется только отредактировать.
Если для нужной подсети параметров нет, добавляем ее кнопкой Add Subnet:
- В разделе Add/Modify Static IP Subnet заполняем для подсети IP Subnet, ставим галку Add Static IP Address Pool и заполняем IP Address Pool:
Если в системе настроено более одного облака, то в разделе Networks сверху появляется выпадающий список Select Cloud. В этом случае перед поиском сети выбираем нужное облако из выпадающего списка:
Создание виртуального сервиса (VS)
- Перейдем в раздел Applications –> Virtual Services и нажмем CREATE VIRTUAL SERVICE:
Выбираем режим создания VS – Basic или Advanced.
- В режиме Basic серверы для балансируемого пула добавляются на самой форме создания VS, пул для них создается автоматически.
- В Advanced пул уже должен быть создан заранее, либо его нужно создать позже вручную в разделе Pools и затем добавлять в свойствах VS.
Мы рассмотрим создание VS в режиме Basic. - В режиме Basic серверы для балансируемого пула добавляются на самой форме создания VS, пул для них создается автоматически.
- Указываем имя сервиса и заполняем поле FQDN or IPv4 Address. В него вносится VIP – виртуальный IP-адрес VS, по которому клиенты могут подключиться к сервису. Если клиенты подключаются снаружи, то это, как правило, внешний адрес.
- Ниже добавляем серверы в разделе Add Servers. Можно добавить серверы перечислением или диапазоном, заполнив поле Server IP Address и нажав Add Server. Мы воспользуемся более наглядным способом и выберем серверы из определенной сети Select Servers by Network:
Во всплывающем окне поиска впишем часть названия сети. Все сети по этому критерию отобразятся в выпадающем списке.
- Выберем сеть из списка. Отобразится список ВМ из этой сети, с их IP- и mac-адресами. Отмечаем нужные серверы, чтобы добавить их в пул для балансировки. Нажимаем ADD SERVERS:
Все отмеченные серверы появятся в разделе Servers. Сохраняем новый VS кнопкой Save справа. Автоматически создастся пул с именем [имя_VS]-pool, в него добавятся выбранные серверы. - Зададим сеть, через которую каждая SE получит доступ к VIP размещенного на ней VS. Откроем свойства VS, перейдем на вкладку Advanced и в разделе Virtual IP Placement Settings нажмем Add Placement Network:
Из выпадающего списка выберем нужную сеть, в поле IPv4 Subnet укажем диапазон этой сети и сохраним:
- Зададим сеть, к которой будет подключаться каждая SE для доступа к сервер-пулу нужного VS. В нашем примере это Test-VS-pool. Откроем Applications –> Pools, затем свойства пула, перейдем на вкладку Advanced и в разделе Placement Settings добавим сеть по ссылке Add Server Network:
Из выпадающего списка выберем нужную сеть, в поле Subnet укажем диапазон сети и сохраним:
Если в vCenter более одного кластера, можно задать конкретный кластер и тип хранилищ (только общие), на которых будут размещаться SE. Для этого в разделе Infrastructure –> Service Engine Group откроем для редактирования используемую группу SE (например, Default-Group). В ней на вкладке Advanced в разделе Host & Data Store Scope переключимся на Cluster и выберем нужный, а также выберем Shared в разделе датасторов:
При необходимости можно задать только конкретные хосты: нажать кнопку Host и выбрать их из списка. То же самое с датасторами: можно включить конкретные по кнопке Include и выбрать их из списка.
Бонус про возможности NSX ALB: решение задачи за счет встроенного анализатора пакетов
Как я уже говорил, в NSX ALB есть разбор HTTP-заголовков проходящих пакетов. Например, запросы от клиентов приходят к нам по http и по https. VS можно настроить на работу с запросами, приходящими по любому набору портов. Но пул может работать только по одному протоколу. Http- и https-запросы должны обрабатывать разные наборы серверов. При этом в свойствах VS можно задать только один пул.
Покажу, как решить эту проблему с использованием Policies.
Покажу, как решить эту проблему с использованием Policies.
- Сначала создадим второй пул, который принимает запросы по порту 443 и содержит серверы для обработки таких запросов:
- Откроем свойства VS, на вкладке Settings добавим порт 443 по ссылке Add Port и удалим выбранный пул:
- Перейдем на вкладку Policies и откроем HTTP Request в ряду ниже. Добавим новое правило:
- Сначала создадим правило для протокола http — так его и назовем в поле с названием Rule Name. В разделе Matching Rules выберем пункт Protocol Type и укажем HTTP. В разделе Action выбираем Content Switch и в выпадающем списке указываем пул для работы с клиентскими запросами по http. Сохраняем:
- Создаём аналогичное правило для https. Итоговый набор правил будет выглядеть так:
Настройка GSLB
Для использования функции глобальной балансировки система NSX ALB должна быть развернута на 2 разных площадках. Итак, на локальной площадке мы развернули контроллер, создали и настроили VS. Теперь выполним шаги по развертыванию DNS как VS на каждой площадке – в нашем примере локальной и облачной.
Настройка сервиса DNS
- В разделе Applications –> Virtual Services создадим новый VS по кнопке CREATE VIRTUAL SERVICE и выберем Advanced Setup.
Укажем имя DNS-сервиса и в поле VIP Address заполним адрес DNS. В выпадающем списке Application Profile выбираем System-DNS, в TCP/UDP Profile выбираем System-UDP-Per-Pkt:
- Ниже в разделе Service Port переходим по ссылке Switch to Advanced:
В поле «Services» появится запись 53 TO 53. Нажимаем Add Port, заполняем новое поле 53 TO 53, затем ставим галку Override TCP/UDP и в выпадающем списке выбираем профиль System-TCP-Proxy. Поле Pool нужно оставить пустым:
На шагах мастера 2 и 3 просто нажимаем Next.
- Для сервиса DNS рекомендуется создать отдельную SE Group со своими настройками, чтобы DNS всегда разворачивался на отдельной SE.
На шаге 4 в разделе Other Settings из выпадающего списка групп создаем новую группу Create SE Group:
- Задаем имя группы в поле Service Engine Group Name. В поле Virtual Services per Service Engine указываем, что у нас будет только 1 сервис на виртуальную машину. Сохраняем:
- Для корректной работы GSLB в корпоративном пространстве имен нужно создать поддомен специально для NSX ALB. В нашем примере мы создали поддомен avi.dtln.cloud.
Соответствующую DNS-зону нужно делегировать развернутым в NSX ALB сервисам DNS. После этого они будут действовать как авторизованные DNS для этого поддомена.
Настроим делегирование на стороне вышестоящего домена. Для этого создадим NS-записи, указывающие на DNS-серверы в NSX ALB.
На шаге 5 Static DNS Records нажимаем Create DNS Record. В поле FQDN укажем название делегированной зоны, укажем тип записей NS Record и добавим имена и адреса сервисов DNS:
Нажимаем Done и завершаем создание сервиса кнопкой Save.
- Созданный сервис DNS указываем в разделе Administration –> Settings –> DNS Service:
Настройка сайтов
Для настройки самого глобального сервиса сначала нужно создать сайты GSLB. Напомню, что сайты в терминологии Avi – все внедрения NSX ALB с самостоятельным контроллером (или их кластером), которые мы используем в рамках GSLB.
- В разделе Infrastructure –> GSLB включим функцию глобального сервиса:
- Откроется окно создания нового сайта GSLB. Вписываем название сайта, имя и пароль администратора на данном контроллере или кластере. Указываем адрес одиночного контроллера или адреса всех контроллеров для кластера. Если этот сайт будет ведущим, ставим галку Active Member, сохраняем:
- На главной странице раздела Infrastructure –> GSLB нажимаем Add New Site:
Откроется такое же окно, в котором аналогично добавляем второй сайт и сохраняем.
- В разделе Subdomains delegated to GSLB в поле GSLB Subdomain указываем делегированную DNS-зону и сохраняем:
- В GSLB обращения к виртуальным IP локальных VS будут поступать не напрямую, а идти от клиентов через FQDN глобального сервиса. Так что нам не нужно использовать в качестве VIP адреса из внешнего диапазона. Перенастроим VS на уровне сайтов.
В качестве VIP зададим адреса из сети с внутренним диапазоном – в начале статьи я указал ее как «сеть для SE».
Мы остаемся в разделе Subdomains delegated to GSLB, но перейдем к Advanced Settings. Для Client Group IP Address Type выберем значение Private, нажмем Add Group IP Address и укажем диапазон этой сети:
Прежние внешние адреса VIP понадобятся нам дальше для настройки пула сервиса GSLB.
- Откроем настройки каждого настроенного сайта и нажмем Save and Set DNS Virtual Services.
В поле DNS Virtual Service выберем созданный сервис DNS, а в поле Subdomains – прописанную DNS-зону. Все сохраним:
В итоге раздел с сайтами будет выглядеть так:
Создание глобального сервиса
В разделе Applications теперь есть раздел GSLB Services – он появился после включения GSLB в разделе Infrastructure.
- В этом разделе нажмем CREATE, в выпадающем списке выберем Basic Setup:
Примечание про тенантыЕсли локальные VS на уровне каждого сайта созданы не в тенанте admin, Global VS на их основе нужно создавать в том же тенанте. Чтобы объединить такие VS с разных сайтов в одном Global VS, нужно задать одинаковые имена тенантов для каждого сайта с этими VS. Нюансы работы с тенантами на сайтах лучше рассматривать отдельно, так что здесь не останавливаюсь подробно.
- Укажем название сервиса в системе, пропишем сетевое имя сервиса в поле Application Name и выберем делегированную DNS-зону в поле Subdomain:
Сочетание Application Name+Subdomain – это и есть FQDN сервиса, по которому обращаются клиенты. В нашем примере у сервиса сформируется адрес testvs.avi.dtln.cloud.
- Перейдем к разделу Pool Member ниже. Как и при создании локального VS в режиме Basic Setup, здесь мы добавляем члены пула прямо в окне создания сервиса. Сам пул создается автоматически. Единственное отличие – членами глобального пула будут не серверы, а локальные VS с GSLB-сайтов.
В поле Site Cluster Controller выберем один из сайтов. В поле Virtual Service выберем созданный локальный VS:
В поле Public IP Address укажем внешний адрес, который раньше служил VIP для локального сервиса (см. п.5 в настройке сайтов GSLB).
- Перейдем по ссылке Add GSLB Pool Member. В появившемся выберем второй сайт и VS на нем. После этого сохраним.
На этом настройка GSLB завершена. Теперь балансировка не ограничивается рамками одной площадки: можно добавлять нужное их количество и балансировать между всеми одновременно. Если же самостоятельная настройка кажется трудоемкой, всегда готовы помочь.