在ServiceManifest.xml文件中的服务的端点配置中,visual studio通常会创建以下信息:
<Resources>
<Endpoints>
<Endpoint Protocol="http" Name="ServiceEndpointHttp" Type="Input" Port="8304" />
</Endpoints>
</Resources>
如果我删除了Port属性及其值(如下所示),
<Resources>
<Endpoints>
<Endpoint Protocol="http" Name="ServiceEndpointHttp" Type="Input" />
</Endpoints>
</Resources>
服务结构运行时将为此服务分配动态端口。
由于相关负载均衡器会自动阻止所有端口,因此如何配置负载均衡器以便可以从外部访问服务?
答案 0 :(得分:2)
您可以为每项服务更新Azure负载均衡器,但由于端口是动态的,这不是一个好主意。
最好使用反向代理,例如内置reverse proxy。它将接收所有传入呼叫(在固定端口上,如80)并将它们转发到群集中的HTTP端点。
由于端点是在命名服务内部注册的,因此内置的反向代理可以找到它们。
您也可以自己构建代理并使用FabricClient.QueryManager来解析服务端点。
答案 1 :(得分:0)
根据微软的说法,内置的反向代理并不安全。它公开所有端点甚至系统服务。他们的文档中有警告。 https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy
我们一直在开发.Net Core无状态服务作为客户可执行文件,我们现在面临的问题是安全性。微软顾问建议不要使用内置的反向代理。我们现在正在编写自己的代理,它只公开我们想要公开的端点。
我们编写了一个ARM模板,用于为Azure Application Gateway配置公共IP和Azure Service Fabric集群。对于每个Web API,我们配置Azure Traffic Manager配置文件。来电从TM路由到APP网关,然后通过负载均衡器路由到VM Scale Set。