问题描述

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 元素:

  1. 打开一个浏览器窗口,并导航到 http://localhost:19080 以打开 Service Fabric Explorer 工具。
  2. 选择“群集”->“清单”。
  3. 记下 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

【Azure微服务 Service Fabric 】Service Fabric中应用开启外部访问端口及微服务之间通过反向代理端口访问问题的更多相关文章

  1. Kubernetes服务发现之Service详解

    一.引子 Kubernetes Pod 是有生命周期的,它们可以被创建,也可以被销毁,然后一旦被销毁生命就永远结束.通过ReplicationController 能够动态地创建和销毁Pod(列如,需 ...

  2. 浅析Kubernrtes服务类型(Service Types)

    先上图 在Kubernetes集群中,service通过标签选择器选着对应的pod,然后对请求进行转发,看个动画,能直接了当体会到便签选择器 pod,endpoints,service三者关系 1.举 ...

  3. 14 微服务电商【黑马乐优商城】:day06-使用nginx反向代理并掌握cors解决跨域

    本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...

  4. 【应用服务 App Service】 App Service Rewrite 实例 - 反向代理转发功能

    问题描述 在使用Azure App Service(应用服务)时,有时候需要在不同的站点之间进行跳转,但是希望通过通过访问同一个域名的方式来实现反向代理.如果创建应用时候选择的是Window服务,这时 ...

  5. SpringCloud微服务笔记-Nginx实现网关反向代理

    背景 当前在SpringCloud微服务架构下,网关作为服务的入口尤为重要,一旦网关发生单点故障会导致整个服务集群瘫痪,为了保证网关的高可用可以通过Nginx的反向代理功能实现网关的高可用. 项目源码 ...

  6. Nginx(http协议代理 搭建虚拟主机 服务的反向代理 在反向代理中配置集群的负载均衡)

    Nginx 简介 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务.Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点(俄文:Рамблер)开 ...

  7. 初试 Kubernetes 集群中使用 Traefik 反向代理

    初试 Kubernetes 集群中使用 Traefik 反向代理 2017年11月17日 09:47:20 哎_小羊_168 阅读数:12308    版权声明:本文为博主原创文章,未经博主允许不得转 ...

  8. Nginx设置Https反向代理,指向Docker Gitlab11.3.9 Https服务

    目录 目录 1.GitLab11.3.9的安装 2.域名在阿里云托管,申请免费的1年证书 3.Gitlab 的 https 配置 4.Nginx 配置 https,反向代理指向 Gitlab 配置 目 ...

  9. Net Core中 使用Middleware 实现反向代理

    有这样的一个需求,我们要拦截某些特定的请求,并将它们重新定向到另一台服务器中,然而客户端并不知情. 在NetCore中我们可以用中间件来实现, 首先创建项目: 我这里只有2.1 Version 的 添 ...

随机推荐

  1. Layui treeSelect 回写与对应选中

    今天遇到个问题就是Layui treeSelect 的回写与特定选中,网络上居然没啥资料,有的也是不全的,于是花了点时间处理好了,这里写一下,方便以后有遇到的朋友借鉴. 一.父页面 二.Form编辑框 ...

  2. 通过两行代码即可调整苹果电脑 Launchpad 图标大小

    之前用 13 寸 Mac 的时候我还没觉得,后来换了 16 寸就发现有点不对劲了.因为 Mac 的高分辨率,当你进入 Launchpad 界面,应用图标的大小可能会让你怀疑:这特么是苹果的设计吗?有点 ...

  3. oracle索引失效情况(转)

    1.隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.   由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Orac ...

  4. 微信小程序picker组件两列关联使用方式

    在使用微信小程序picker组件时候,可以设置属性   mode = multiSelector   意为多列选择,关联选择,当第一列发生改变时侯,第二列甚至第三列发生相应的改变.但是官方文档上给的只 ...

  5. webpack 单独打包指定JS文件

    背景 最近接到一个需求,因为不确定打出的前端包所访问的后端IP,需要对项目中IP配置文件单独拿出来,方便运维部署的时候对IP做修改.因此,需要用webpack单独打包指定文件. CommonsChun ...

  6. B. Kay and Snowflake 解析(思維、DFS、DP、重心)

    Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...

  7. C# 实现十六进制Unicode编码字符串转换为汉字

    网上找了几个方法,但是运行之后会报错,提示要解析的字符串格式不正确.然后我猜想可能是传入的字符串 \u60a8\u4eca\u65e5\u5df2\u7b7e\u5230 中带"\" ...

  8. Redis事务使用方法

    Redis事务 Redis事务是一组命令的集合,也是Redis的最小执行单位之一.一个事务的所有命令,要么都执行,要么都不执行.Redis能保证事务执行期间不会有其他命令插入. 相关命令 命令 格式 ...

  9. 《Clojure编程》笔记 第5章 宏

    目录 背景简述 第5章 宏 5.0 术语 5.1 宏到底是什么 5.1.1 宏不是什么 5.1.2 有什么是宏能做而函数不能做的 5.1.3 宏vsRuby的eval 5.2 编写你的第一个宏 5.3 ...

  10. js——事件循环

    JS-事件循环 js运行的环境称之为宿主环境. 执行栈 :call stack ,一个数据结构,用于存放各种函数的执行环境,每一个函数执行之前他的相关信息会加入到执行栈中,函数调用之前,创建执行环境, ...