如何在Azure的服务结构中的同一端口上托管多个Web API服务

时间:2019-01-09 18:48:23

标签: azure azure-service-fabric service-fabric-stateless

我在Azure中有一个Service Fabric群集,该群集当前在端口443上托管API。我的群集正在使用标准的5节点最低设置。所有节点都是Windows VM。如果我想托管在同一端口上侦听的第二个API,我有什么可能的解决方案?

例如:

serviceA.myDomain.com:443 -> deploys to all nodes, listens on port 443
serviceB.myDomain.com:443 -> can't deploy to all nodes since port 443 is already in use.

所有这些都是使用.NET框架(不是.NET核心)的无状态服务,并且我目前正在使用Owin作为我的通信侦听器,因此看起来HttpSys可能不是端口共享的选项,因为我大多数引用都在利用.NET核心。

Service Fabric似乎具有节点放置约束的概念,在此处记录:Node Placement Restraints

我想到的一个想法是添加其他节点,限制某些服务以部署到特定的节点类型,然后使用类似Azure API Management的方式将流量定向到正确的API。这是一个可行的选择吗?如果没有,我可能会采取哪些建议的方法?

2 个答案:

答案 0 :(得分:0)

看看DNS Service in Azure Service Fabric

这似乎是您想要实现的目标,使用DNS服务应该可以让您到达需要的位置

enter image description here

答案 1 :(得分:0)

使用SSL将多个Sites \ API绑定到同一IP是一项非常艰巨的任务,有一篇不错的博客文章here,其中包含基于IIS的主题的一些详细信息。 DotNet框架将使用相同的概念。

主要问题是浏览器在开始向服务器发送请求之前需要协商证书,SNI的引入使之成为可能,但是使用.Net Framework进行管理仍然有些困难(不是Kestrel的核心)。

最简单的方法是使用动态分配的端口,并将Proxy \ Gateway放在配置为基于主机进行转发的服务之前。

我给您的建议是看看Traefik,看看是否对您的问题有所帮助。