问题描述

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. Win32编程之控制线程

    0x01. 如何让线程停下来 让自己停下来: Sleep() 函数 当程序执行到某段代码的时候可以使用sleep() 函数进行暂停 使用sleep()函数挂起的时候会自动恢复过来的 让别人停下来: S ...

  2. 从创建进程到进入main函数,发生了什么?

    前几天,读者群里有小伙伴提问:从进程创建后,到底是怎么进入我写的main函数的? 今天这篇文章就来聊聊这个话题. 首先先划定一下这个问题的讨论范围:C/C++语言 这篇文章主要讨论的是操作系统层面上对 ...

  3. ASP.NET Core Authentication系列(二)实现认证、登录和注销

    前言 在上一篇文章介绍ASP.NET Core Authentication的三个重要概念,分别是Claim, ClaimsIdentity, ClaimsPrincipal,以及claims-bas ...

  4. 838. Push Dominoes —— weekly contest 85

    Push Dominoes There are N dominoes in a line, and we place each domino vertically upright. In the be ...

  5. springboot + post 中文乱码

    去检查你的 filter 配置,是否配置了一个最高优先级的 filter, 这个最高优先级的 filter 会影响 springboot 自动配置的 CharacterEncodingFilter.原 ...

  6. ElasticSearch初步了解和安装(windows上安装)

    ElasticSearch是什么 ElasticSearch(一般简称es)是一个基于Lucene的分布式搜索和数据分析引擎.它提供了REST api 的操作接口.它可以快速的存储.搜索.分析海量数据 ...

  7. Grafana+Prometheus+node_exporter监控,Grafana无法显示数据的问题

    环境搭建: 被测linux机器上部署了Grafana,Prometheus,node_exporter,并成功启动了它们. Grafana中已经创建了Prometheus数据源,并测试通过,并且导入了 ...

  8. mybatis拦截器 修改mybatis返回结果集中的字段的值

    项目中使用了shardingJDBC,业务库做了分库,公共库没在一起,所以导致做码值转换的时候,需要在实现类里面做转码,重复的代码量大,故考虑用mybatis拦截器,将码值转换后再做返回给实现类.   ...

  9. 09线程隔离的g对象

    1,g是global的意思. g对象再一次请求中的所有的代码的地方,都是可以使用的. 同一次请求,那么在这个项目的所有地方都可以用了. from flask import Flask,request, ...

  10. vbox复制虚拟机之后修改ethx号使得可以上网

    vbox复制虚拟机之后修改ethx号使得可以上网: (1).改硬件mac编号[此项需要重启] vi /etc/udev/rules.d/70-persistent-net.rules 然后删掉上面一行 ...