Как балансировщик нагрузки Azure поддерживает динамические порты для кластера сервисных сетей?
В конфигурации конечной точки для службы в файле ServiceManifest.xml Visual Studio обычно создает следующую информацию:
<Resources>
<Endpoints>
<Endpoint Protocol="http" Name="ServiceEndpointHttp" Type="Input" Port="8304" />
</Endpoints>
</Resources>
Если я удалю атрибут порта и его значение (как показано ниже),
<Resources>
<Endpoints>
<Endpoint Protocol="http" Name="ServiceEndpointHttp" Type="Input" />
</Endpoints>
</Resources>
во время выполнения сервисной фабрики этому сервису будет назначен динамический порт.
Поскольку все порты автоматически блокируются соответствующим балансировщиком нагрузки, как я могу настроить балансировщик нагрузки так, чтобы к сервису можно было обращаться извне?
2 ответа
Вы можете обновить Azure Load Balancer для каждой службы, но поскольку порты динамические, это не очень хорошая идея.
Для этого лучше использовать Обратный прокси, например встроенный обратный прокси. Он будет принимать все входящие вызовы (на фиксированный порт, например, 80) и перенаправлять их на конечные точки HTTP в кластере.
Поскольку конечные точки регистрируются внутри службы именования, встроенный обратный прокси-сервер может их найти.
Вы также можете создать прокси-сервер самостоятельно и использовать FabricClient.QueryManager для разрешения конечных точек службы.
По словам Microsoft, встроенный обратный прокси-сервер не является безопасным. Он предоставляет все конечные точки, даже системные службы. В их документации есть предупреждение. https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy
Мы разрабатывали службу.Net Core без сохранения состояния в качестве гостевого исполняемого файла, и проблема, с которой мы сталкиваемся сейчас, заключается в безопасности. Консультанты Microsoft посоветовали не использовать встроенный обратный прокси. Сейчас мы пишем наш собственный прокси, который будет предоставлять только конечную точку, которую мы хотим раскрыть.
Мы написали шаблон ARM, который обеспечивает шлюз приложений Azure общедоступным IP-адресом и кластером Azure Service Fabric. Для каждого веб-API мы настраиваем профиль диспетчера трафика Azure. Входящий вызов направляется от TM к шлюзу APP и через балансировщик нагрузки к VM Scale Set.