У нас есть инфраструктура микросервисов API, размещенная на Azure VM. На каждой виртуальной машине будет несколько API-интерфейсов, которые являются отдельными сайтами, работающими на Kestrel. Весь внешний трафик поступает через RP (работает на IIS).Как настроить балансировку нагрузки Azure для микросервисов?
У нас есть некоторые API, которые предназначены для приема внешних запросов, а некоторые - только для внутренних API.
Внутренние API-интерфейсы размещаются на шкалах с каждым виртуальным шкафом, который является репликой, на которой размещаются все внутренние API. Перед шкалой имеется внутренний балансировщик нагрузки (ILB)/vip. Корневая проблема заключается в том, что у нас есть внутренние API, которые вызывают другие внутренние API-интерфейсы, размещенные на одном и том же шкале. В идеале эти вызовы будут поступать в VIP (используя внутренний DNS), и VIP отправится на одну из машин в шкале. Но, похоже, Azure не позволяет это ... в документации:
You cannot access the ILB VIP from the same Virtual Machines that are being load-balanced
Так как люди установить это с микро-услуг? Я вижу три способа, ни один из которых не идеален:
- Отделить API от разных шкалеров. Не идеально, так как услуги очень легкие, и я не хочу втрое увеличивать расходы на Azure VM .
- Преобразование внутреннего LB в внешний LB (добавьте публичный IP-адрес). Затем поместите этот LB в свою собственную сетевую безопасность group/subnet, чтобы разрешать только вызовы из нашего диапазона Azure IP. Я бы ожидал здесь большего латентного времени и выставлял конечные точки извне в в любом случае, создавая большую площадь поверхности атаки, а также более сложность конфигурации.
- Настройте виртуальную машину на шлейф, если ему нужен вызов в ILB ... что означает, что любые запросы, исходящие от виртуальной машины, будут , обрабатываемые той же виртуальной машиной. Это нарушает цель микро-услуг за VIP. По какой-то причине внутренняя микросервис может быть отключена на той же машине и доступна на другой ... вот почему причина мы настроили медицинские зонды на ILB для каждой услуги отдельно. Если он просто возвращается к той же машине, вы теряете отказоустойчивость.
Любые указатели на то, как другие подошли к этому, будут оценены.
Спасибо!
Посмотрите на Azure Service Fabric. Мы также используем это поведение для масштабирования конечных точек VM, и оно работает как шарм. Отрицательным моментом является то, что конфигурация в настоящее время работает только через ARM. – Ben