Azure 负载均衡器如何支持服务结构集群的动态端口?

How does azure load balancer support dynamic ports for service fabric cluster?

在 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>

service fabric 运行 时间将为该服务分配一个动态端口。

由于所有端口都被相关的负载均衡器自动阻塞,我该如何配置负载均衡器,以便从外部访问服务?

您可以为每个服务更新 Azure 负载均衡器,但由于端口是动态的,这不是一个好主意。

最好使用反向代理,例如为此内置 reverse proxy。它将接收所有传入呼叫(在固定端口,如 80)并将它们转发到集群内的 HTTP 端点。

因为端点是在命名服务内部注册的,所以内置的反向代理可以找到它们。

您也可以自己搭建代理,使用FabricClient.QueryManager解析服务端点。

根据 Microsoft 的说法,内置的反向代理并不安全。它公开所有端点甚至系统服务。他们的文档中有一个警告。 https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy

我们一直在开发 .Net Core 无状态服务作为来宾可执行文件,我们现在面临的问题是安全性。微软顾问建议不要使用内置的反向代理。我们现在正在编写自己的代理,它将只公开我们想要公开的端点。

我们编写了一个 ARM 模板,它使用 public IP 和 Azure Service Fabric 集群配置 Azure 应用程序网关。对于每个 Web API,我们配置一个 Azure 流量管理器配置文件。传入呼叫从 TM 路由到 APP 网关,然后通过负载均衡器路由到 VM 规模集。