Azure 如何设置两个都使用https端口的微服务?

Azure 如何设置两个都使用https端口的微服务?,azure,asp.net-core,https,microservices,kestrel,Azure,Asp.net Core,Https,Microservices,Kestrel,我有一个微服务是Asp.Net核心无状态服务。服务运行良好,我可以访问 我的ServiceManifest.xml是: <Resources> <Endpoints> <Endpoint Protocol="https" Name="EndpointHttps" Type="Input" Port="443" /> </Endpoints> </Resources> 但我得到一个异常,它无法绑定,因为它正在

我有一个微服务是Asp.Net核心无状态服务。服务运行良好,我可以访问

我的ServiceManifest.xml是:

<Resources>
  <Endpoints>
    <Endpoint Protocol="https" Name="EndpointHttps" Type="Input" Port="443" />      
  </Endpoints>
</Resources>
但我得到一个异常,它无法绑定,因为它正在重写并使用UseKestrel端点。然后我尝试了PreferHostingUrls(true),但出现了一个错误,您必须使用UsePathBase

然后我尝试:

.UsePathBase("myservice")
然后我得到一个错误,它没有有效的https证书。但它只使用一个微服务

1。有人知道要让两个微服务同时工作需要做什么吗?

2。另一方面(出于好奇),我一直想知道为什么要使用动态端口。如果服务正在选择端口,您如何知道要向客户提供什么url?


谢谢你的帮助。

我会回答这个问题,以防其他人有同样的问题。不确定这是唯一的方法,但我解决它的方法是使用反向代理。您也可以使用更强大的应用程序网关,但出于我的需要,我只需要反向代理

我不得不重新创建我的服务结构(事后无法让它使用反向代理)。创建服务结构时选择反向代理

注意:如果需要https,请首先创建密钥库并添加两个证书。在证书页面上,选择“自定义”,并对群集和反向代理使用不同的证书。如果使用相同的Azure部署,则Azure部署失败

另外,请至少选择一台D1_s2大小的计算机,否则Azure将在部署时无限期挂起,并且不会告诉您任何信息。这之后我就没有头发了

调用反向代理时,指定结构和服务:

https://.eastus2.cloudapp.azure.com:19081/MyFabric/MyService/Controller/route

从一个服务到另一个服务时,可以使用localhost:19081而不是url

在servicemanifest.xml中,将端点设置为:

<Resources>
  <Endpoints>
    <Endpoint Protocol="http" UriScheme="http" Name="EndpointHttp" Type="Input" />
  </Endpoints>
</Resources>

代理知道发送到哪里。我设置了一个应用程序管理API,将请求转发给代理。注意,这是针对单个分区集群的。如果有多个分区,还需要在url中指定分区id


回答您的问题:

  • 是的,有一种在役织物 你可以用。当你在红隼上时,使用反向代理将是 建议的方法,尽管不是必需的。这看起来 比如:

    Kestrel用作没有反向代理服务器的边缘服务器 不支持在多个服务器之间共享同一IP和端口 过程。当Kestrel配置为监听端口时,Kestrel 处理该端口的所有流量,而不考虑请求的大小
    主机
    标题。可以共享端口的反向代理具有以下功能 在唯一的IP和端口上将请求转发给Kestrel

    以下是一些参考资料:

  • 在分布式系统中,服务可能会随着时间的推移从一台机器移动到另一台机器。这可能是由于各种原因造成的,包括资源平衡、升级、故障切换或扩展。这意味着随着服务移动到具有不同IP地址的节点,服务端点地址会发生变化,并且可能在不同的端口上打开

    服务结构提供了一种称为命名服务的发现和解析服务。命名服务维护一个表,该表将命名服务实例映射到它们侦听的端点地址。服务结构中的所有命名服务实例都具有表示为URI的唯一名称,例如,“结构:/MyApplication/MyService”服务的名称在服务的生命周期内不会更改,只有端点地址可以在服务移动时更改。这类似于具有恒定URL但IP地址可能更改的网站。与将网站URL解析为IP地址的web DNS类似,ServiceFabric有一个注册器,将服务名称映射到其端点地址。这样,我们就不必担心服务发现和解析,因为它被卸载到反向代理或负载平衡器

    以下是一些很棒的文章供您参考:

    • (再次;))

  • 希望这能有所帮助。

    必须有人使用kestrel设置两个微服务,对吗?!?如果没有,我可以使用什么?你能分享一下你是如何配置反向代理的吗?就像我也有两项服务一样。当客户端发送请求时,如反向代理如何路由到具有该控制器的正确服务?更新了我的响应…如果需要更多信息,请告诉我
    .UsePathBase("myservice")
    
    <Resources>
      <Endpoints>
        <Endpoint Protocol="http" UriScheme="http" Name="EndpointHttp" Type="Input" />
      </Endpoints>
    </Resources>