В прошлый раз я рассказал о функциях балансировщика нагрузки NSX ALB, описал его архитектуру и схему работы. Мы посмотрели, как работает глобальная балансировка серверов (GSLB), которая объединяет серверы на географически разнесенных площадках в единый пул. В том числе, так можно распределять нагрузку между серверами в облаке и локальными серверами.

В этой статье поделюсь опытом внедрения системы для тестирования в нашем облаке. Опишу установку NSX ALB в VMware vCenter и основные этапы настройки для тех, кто хочет самостоятельно подключить для глобальной балансировки свою локальную площадку. 




Установка контроллера 


Этот шаг необходим на локальной площадке для подключения ее к глобальной балансировке.  

  1. Сервисы для балансировки будут жить в VMware vCenter. Создаем там три портгруппы, которые будем использовать как:
    • management-сеть для управления и связи между контроллером и служебными виртуальными машинами SE (внутренняя адресация),
    • сеть для SE, для внутренних нужд NSX ALB (внутренняя адресация),
    • сеть внешних адресов для подключения клиентов к балансируемым сервисам снаружи (внешняя адресация).

  2. Скачиваем с сайта Avi OVA-образ и разворачиваем контроллер как виртуальную машину (ВМ). 
  3. Запускаем ВМ и открываем веб-интерфейс контроллера по настроенному IP-адресу. 
  4. Следуем шагам мастера для первичной настройки, как описано в документации вендора

Теперь по тому же IP-адресу доступен интерфейс системы. В левом верхнем углу появилось основное меню NSX ALB из 5 разделов:



Предварительная настройка 


  1. Настроим статический диапазон адресов management-сети. Когда контроллер развернет служебные машины SE, они будут получать адреса из этого диапазона.

    В главном меню переходим в раздел Clouds. Выберем наш vCenter и внесем изменения в настройки:


  2. На вкладке Network в разделе IP Address Management for Management Network заполним поля IP Subnet, Add Static IP Address Pool и Default Gateway:

  3. Настроим аналогичные статические диапазоны для всех сетей, которые нужны при разворачивании новых SE и VS. В частности, это нужно сделать для служебной сети SE и всех сетей, в которых развернуты серверы для балансировки в рамках VS.

    Для этого зайдем в Infrastructure –> Networks, зададим критерии поиска нужной сети и откроем ее свойства:


  4. Для части сетей система самостоятельно определяет параметры по информации из vCenter. В этом случае в разделе Network IP Subnets сразу появится подсеть с типом Discovered, останется только отредактировать.
    Если для нужной подсети параметров нет, добавляем ее кнопкой Add Subnet:

  5. В разделе Add/Modify Static IP Subnet заполняем для подсети IP Subnet, ставим галку Add Static IP Address Pool и заполняем IP Address Pool:


Если в системе настроено более одного облака, то в разделе Networks сверху появляется выпадающий список Select Cloud. В этом случае перед поиском сети выбираем нужное облако из выпадающего списка:



Создание виртуального сервиса (VS)


  1. Перейдем в раздел Applications –> Virtual Services и нажмем CREATE VIRTUAL SERVICE: 



    Выбираем режим создания VS – Basic или Advanced.

    • В режиме Basic серверы для балансируемого пула добавляются на самой форме создания VS, пул для них создается автоматически.
    • В Advanced пул уже должен быть создан заранее, либо его нужно создать позже вручную в разделе Pools и затем добавлять в свойствах VS.

    Мы рассмотрим создание VS в режиме Basic.
  2. Указываем имя сервиса и заполняем поле FQDN or IPv4 Address. В него вносится VIP – виртуальный IP-адрес VS, по которому клиенты могут подключиться к сервису. Если клиенты подключаются снаружи, то это, как правило, внешний адрес.


  3. Ниже добавляем серверы в разделе Add Servers. Можно добавить серверы перечислением или диапазоном, заполнив поле Server IP Address и нажав Add Server. Мы воспользуемся более  наглядным способом и выберем серверы из определенной сети Select Servers by Network:



    Во всплывающем окне поиска впишем часть названия сети. Все сети по этому критерию отобразятся в выпадающем списке.


  4. Выберем сеть из списка. Отобразится список ВМ из этой сети, с их IP- и mac-адресами. Отмечаем нужные серверы, чтобы добавить их в пул для балансировки. Нажимаем ADD SERVERS:



    Все отмеченные серверы появятся в разделе Servers. Сохраняем новый VS кнопкой Save справа. Автоматически создастся пул с именем [имя_VS]-pool, в него добавятся выбранные серверы.
  5. Зададим сеть, через которую каждая SE получит доступ к VIP размещенного на ней VS. Откроем свойства VS, перейдем на вкладку Advanced и в разделе Virtual IP Placement Settings нажмем Add Placement Network:



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


  6. Зададим сеть, к которой будет подключаться каждая 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.

  1. Сначала создадим второй пул, который принимает запросы по порту 443 и содержит серверы для обработки таких запросов:


  2. Откроем свойства VS, на вкладке Settings добавим порт 443 по ссылке Add Port и удалим выбранный пул:


  3. Перейдем на вкладку Policies и откроем HTTP Request в ряду ниже. Добавим новое правило:


  4. Сначала создадим правило для протокола http — так его и назовем в поле с названием Rule Name. В разделе Matching Rules выберем пункт Protocol Type и укажем HTTP. В разделе Action выбираем Content Switch и в выпадающем списке указываем пул для работы с клиентскими запросами по http. Сохраняем:


  5. Создаём аналогичное правило для https. Итоговый набор правил будет выглядеть так:



Настройка GSLB


Для использования функции глобальной балансировки система NSX ALB должна быть развернута на 2 разных площадках. Итак, на локальной площадке мы развернули контроллер, создали и настроили VS. Теперь выполним шаги по развертыванию DNS как VS на каждой площадке – в нашем примере локальной и облачной.

Настройка сервиса DNS

  1. В разделе Applications –> Virtual Services создадим новый VS по кнопке CREATE VIRTUAL SERVICE и выберем Advanced Setup. 

    Укажем имя DNS-сервиса и в поле VIP Address заполним адрес DNS. В выпадающем списке Application Profile выбираем System-DNS, в TCP/UDP Profile выбираем System-UDP-Per-Pkt:


  2. Ниже в разделе Service Port переходим по ссылке Switch to Advanced:  



    В поле «Services» появится запись 53 TO 53. Нажимаем Add Port, заполняем новое поле 53 TO 53, затем ставим галку Override TCP/UDP и в выпадающем списке выбираем профиль System-TCP-Proxy. Поле Pool нужно оставить пустым:



    На шагах мастера 2 и 3 просто нажимаем Next.
  3. Для сервиса DNS рекомендуется создать отдельную SE Group со своими настройками, чтобы DNS всегда разворачивался на отдельной SE.

    На шаге 4 в разделе Other Settings из выпадающего списка групп создаем новую группу Create SE Group:


  4. Задаем имя группы в поле Service Engine Group Name. В поле Virtual Services per Service Engine указываем, что у нас будет только 1 сервис на виртуальную машину. Сохраняем:


  5. Для корректной работы 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.
  6. Созданный сервис DNS указываем в разделе Administration –> Settings –> DNS Service:


Настройка сайтов 

Для настройки самого глобального сервиса сначала нужно создать сайты GSLB. Напомню, что сайты в терминологии Avi – все внедрения NSX ALB с самостоятельным контроллером (или их кластером), которые мы используем в рамках GSLB.

  1. В разделе Infrastructure –> GSLB включим функцию глобального сервиса: 


  2. Откроется окно создания нового сайта GSLB. Вписываем название сайта, имя и пароль администратора на данном контроллере или кластере. Указываем адрес одиночного контроллера или адреса всех контроллеров для кластера. Если этот сайт будет ведущим, ставим галку Active Member, сохраняем:


  3. На главной странице раздела Infrastructure –> GSLB нажимаем Add New Site:



    Откроется такое же окно, в котором аналогично добавляем второй сайт и сохраняем.
  4. В разделе Subdomains delegated to GSLB в поле GSLB Subdomain указываем делегированную DNS-зону и сохраняем:


  5. В 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.
  6. Откроем настройки каждого настроенного сайта и нажмем Save and Set DNS Virtual Services. 

    В поле DNS Virtual Service выберем созданный сервис DNS, а в поле Subdomains – прописанную DNS-зону. Все сохраним:



В итоге раздел с сайтами будет выглядеть так:



Создание глобального сервиса

В разделе Applications теперь есть раздел GSLB Services – он появился после включения GSLB в разделе Infrastructure. 

  1. В этом разделе нажмем CREATE, в выпадающем списке выберем Basic Setup:



    Примечание про тенанты
    Если локальные VS на уровне каждого сайта созданы не в тенанте admin, Global VS на их основе нужно создавать в том же тенанте. Чтобы объединить такие VS с разных сайтов в одном Global VS, нужно задать одинаковые имена тенантов для каждого сайта с этими VS. Нюансы работы с тенантами на сайтах лучше рассматривать отдельно, так что здесь не останавливаюсь подробно. 

  2. Укажем название сервиса в системе, пропишем сетевое имя сервиса в поле Application Name и выберем делегированную DNS-зону в поле Subdomain:



    Сочетание Application Name+Subdomain – это и есть FQDN сервиса, по которому обращаются клиенты. В нашем примере у сервиса сформируется адрес testvs.avi.dtln.cloud.
  3. Перейдем к разделу Pool Member ниже. Как и при создании локального VS в режиме Basic Setup, здесь мы добавляем члены пула прямо в окне создания сервиса. Сам пул создается автоматически. Единственное отличие – членами глобального пула будут не серверы, а локальные VS с GSLB-сайтов.

    В поле Site Cluster Controller выберем один из сайтов. В поле Virtual Service выберем созданный локальный VS:



    В поле Public IP Address укажем внешний адрес, который раньше служил VIP для локального сервиса (см. п.5 в настройке сайтов GSLB).
  4. Перейдем по ссылке Add GSLB Pool Member. В появившемся выберем второй сайт и VS на нем. После этого сохраним. 

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