Упражнения с vmWare vCloud Director

Oct 31, 2019 22:53


... Продолжаю решать крайне долбанутые задачи. Жизнь идёт, ничего не меняется.

Дано. Облако vmWare vCloud. Внутри несколько виртуалок с разными сервисами. Каждый сервис (и каждая виртуалка) хочет что-то отдавать внаружу по HTTPS, прикрываясь своим собственным X509-сертификатом. Но вот внешний честный (белый) IP-адрес у всего это добра только один...

У этого vCloud есть так называемый Edge, к которому прикручен Load Balancer, который, в свою очередь, представляет из себя самый обыкновенный HAProxy. Который вполне себе умеет поставленную задачу решать. Но! Нельзя просто так взять и ручками подправить его конфиг. Всё это обвешано разухабистой веб-мордой и раскидано по разным разделам, менюшечкам, рюшечкам, кнопочкам, переключателям. Так, что хрен вообще проссышь куда надо тыкать для достижения требуемого эффекта. Да и в целом интерфейс этого vCloud Director делает меня сильно грустить. Хотя бы одним только фактом того, что кнопки "OK" и "Cancel" здесь называются "Keep" и "Discard".

После полудня мудохания методом научного тыка таки выяснил, в каком порядке что куда надо писать.
  • Сначала "Load Balancer", "Application Profile", создать профиль с типом "TCP" (всё).
  • Потом "Load Balancer", "Pools", создать N пулов по количеству сервисов, добавить в эти пулы нужные виртуалки. Если виртуалка всего одна, всё равно создавать пул и выбирать "Round Robin" в качестве метода распределения нагрузки, включить опцию "Transparent".
  • "Load Balancer", "Application Rules", создать N правил (можно и всё в одно запихнуть). Про правила чуть ниже. И да, дальше совсем прикол. Официальная документация от vCloud тупо отсылает к вики HAProxy за разъяснением синтаксиса скриптов этих правил. Причём, в моем случае, ещё и на тухлую версию этой вики. При полной невозможности посмотреть хотя бы версию этого самого HAProxy.
  • "Load Balancer", "Virtual Server". Создаем новый "виртуальный сервер", говорим чтобы он слушал на TCP:443 на внешнем IP-адресе. Протокол обязательно должен совпадать с профилем приложения, созданным на первом шаге. Говорим "Enable Acceleration", выбираем Pool по умолчанию, идём на вкладку "Advanced" и там привязываем созданные на предыдущем шаге правила, причём их порядок имеет значение.

Если мы сделали что-то неправильно, об этом никто не скажет. Просто задуманное не будет работать, всё уйдёт в Default Pool независимо от наших манипуляций. Где там у него прикопаны логи чтобы почитать их, я так и не разобрался...

Правила выглядят примерно так.
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
acl is_site1 req_ssl_sni -i site1.mycompany.com
use_backend pool_1 if is_site1
acl is_site2 req_ssl_sni -i site2.mycompany.com
use_backend pool_2 if is_site2
Можно это всё впихнуть в одно правило, можно разбить на несколько. В последнем случае надо внимательно смотреть в каком порядке они привязываются к Virtual Server. Первые две инструкции всегда должны идти первыми. И да, без них ничего не работает.

Вот же ж блин. Если бы можно было тупо вписать всё это безобразие прямо в конфиг HAProxy, получилось бы семь строчек текста. Но нет же, это было бы слишком просто...

Эти корпоративные продукты такие корпоративные...

работа, виртуализация, сети, it

Previous post Next post
Up