【Azure微服务 Service Fabric 】Service Fabric中应用开启外部访问端口及微服务之间通过反向代理端口访问问题
问题描述
1) 当成功的在Service Fabric集群中部署了应用后,如何来访问呢?如果是一个Web服务,它的URL又是什么呢?
2) 当Service Fabric集群中,服务之间如需要相互访问?如何来设置反向代理的端口呢?如果在创建Service Fabric时没有设定方向代理端口,如何来添加呢?
问题解释
问题一:默认情况下,访问应用的URL通过Service Fabric的集群endpoint + 在发布应用时候,所设定的端口号。 如http://sfdnstest01.chinanorth2.cloudapp.chinacloudapi.cn:8080
Service Fabric集群的Endpoint可以从Azure门户中获取:
应用的端口号:则由发布文件ServiceManifest.xml中设定。如果已经发布后,可以在Service Fabric Explorer中查看Application的Minifest文件中发现
<Resources> <Endpoints> <!-- This endpoint is used by the communication listener to obtain the port on which to listen. Please note that if your service is partitioned, this port is shared with replicas of different partitions that are placed in your code. --> <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="8080" /> </Endpoints> </Resources>
还有非常重要的一步:在SF的Load Balance中开启访问此端口的规则。否则,通过浏览器访问时,就会得到“This site can’t be reached”的错误。在LB中配置规则非常简单。
进入Load Balance的Azure 门户页面,导航到“Load balancing rules” 一栏,添加对应的端口规则即可,如下图:
以上,及可以设定完成SF集群中应用的外部访问端口。
Azure Service Fabric的参考文档部分:https://docs.azure.cn/zh-cn/service-fabric/service-fabric-tutorial-create-dotnet-app#configure-the-listening-port
创建 VotingWeb 前端服务后,Visual Studio 会随机选择服务侦听的端口。 VotingWeb 服务充当此应用程序的前端并接受外部流量,因此让我们将此服务绑定到已知的固定端口。 服务清单声明服务终结点。
在解决方案资源管理器中,打开“VotingWeb/PackageRoot/ServiceManifest.xml”。 在“Resources”部分中查找“Endpoint”元素,并将“Port”值更改为 8080。 若要在本地部署和运行应用程序,应用程序侦听端口必须为打开状态且在你的计算机上可用。
<Resources> <Endpoints> <!-- This endpoint is used by the communication listener to obtain the port on which to listen. Please note that if your service is partitioned, this port is shared with replicas of different partitions that are placed in your code. --> <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="8080" /> </Endpoints> </Resources>
此外,更新投票项目中的应用程序 URL 属性值,使 Web 浏览器在调试应用程序时打开到正确的端口。 在解决方案资源管理器中,选择“Voting”项目并将“应用程序 URL”属性更新为 8080 。
问题二:如何查看反向代理端口是否已经配置,使用Service Fabric Explorer,查看Cluster节点中的Minifest。如截图中的红色框中是否有HttpApplicationGatewayEndpoint
节点。如图中配置的反向代理端口为19081
如果查看到当前的Service Fabric集群中没有配置反向代理端口,那如何来开启呢?
Service Fabric反向代理端口开启步骤
1) 找到部署Service Fabric的模板。如没有,则可以到Azure 门户中改Service Fabric的资源组中,查看部署历史记录,选择正确的部署模板(此模板中包含SF集群所有配置和参数)
- 导航路径 (Azure Home -> Service Fabric Clusters -> Resource Group -> Deployment -> Template)
2) 在模板文件中查找nodeTypes节点并在其内添加 "reverseProxyEndpointPort":"19081" (可以根据自己需要调整端口号)
3) 重新部署,可以使用第一步中下载模板是自带的Powershell命令,也可以使用以下命令
az login az account set --subscription "your subscription id" az deployment group create --name deployment --resource-group "your resource group " --template-file .\exsitsf.json
4)部署完成后,通过Service Fabric Explorer工具查看结果。
Service Fabric中反向代理端口设置参考文档:https://docs.azure.cn/zh-cn/service-fabric/service-fabric-tutorial-create-dotnet-app#connect-the-services
下一步是连接这两个服务,使前端 Web 应用程序获取并设置来自后端服务的投票信息。
在如何与 Reliable Services 通信方面,Service Fabric 是十分灵活的。 在单个应用程序中,可能会有通过 TCP 访问的服务。 其他服务也许可以通过 HTTP REST API 访问,以及可通过 Web 套接字访问。 有关可用选项和相关权衡取舍的背景信息,请参阅与服务通信。
本教程使用 ASP.NET Core Web API 和 Service Fabric 反向代理,以便 VotingWeb 前端 Web 服务能够与后端 VotingData 服务通信。 反向代理默认配置为使用端口 19081,应适用于本教程。 反向代理端口是在用于设置群集的 Azure 资源管理器模板中设置的。 若要确定使用哪个端口,请在 Microsoft.ServiceFabric/clusters 资源中搜索群集模板:
"nodeTypes": [ { ... "httpGatewayEndpointPort": "[variables('nt0fabricHttpGatewayPort')]", "isPrimary": true, "vmInstanceCount": "[parameters('nt0InstanceCount')]", "reverseProxyEndpointPort": "[parameters('SFReverseProxyPort')]" } ],
若要查找在本地开发群集中使用的反向代理端口,请查看本地 Service Fabric 群集清单中的 HttpApplicationGatewayEndpoint 元素:
- 打开一个浏览器窗口,并导航到 http://localhost:19080 以打开 Service Fabric Explorer 工具。
- 选择“群集”->“清单”。
- 记下 HttpApplicationGatewayEndpoint 元素端口。 默认情况下,此端口应是 19081。 如果不是 19081,则需要更改以下 VotesController.cs 代码的 GetProxyAddress 方法中的端口。
参考资料
使用 ASP.NET Core Web API 前端服务和有状态后端服务创建并部署应用程序: https://docs.azure.cn/zh-cn/service-fabric/service-fabric-tutorial-create-dotnet-app#connect-the-services
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!