0

我使用“Windows 2016 DataCenter with Containers”操作系统创建了一个 Azure Service Fabric 集群,并在集群的 80 端口上启用了反向代理侦听。我们打算在此集群上部署我们的旧版 ASP.NET MVC 和 WCF 应用程序。

在我们现有的部署模型中,由于聊天通信和低延迟要求,我们有位于同一主机上的服务相互通信。windows 容器中托管的应用程序是否可以与同一节点上的其他 windows 容器应用程序通信?基本上,我希望在同一个 Service Fabric 节点上的两个 Windows 容器应用程序之间具有节点关联性。

我用一个示例应用程序进行了尝试,看起来唯一的选择是使用动态分配的容器的私有 IP。在 Service Fabric 群集上实例化容器时是否可以传递 --ip-address 参数?

[更新:2017 年 4 月 5 日]

Service Fabric 群集版本:5.5.219.0

总节点类型:1

节点总数:3

两个容器都部署在所有三个节点上。Azure Internet 负载均衡器用于公开 Service Fabric 反向代理。所有服务都通过反向代理在内部和外部访问。

高拉夫

4

2 回答 2

1

您现在可以在 v5.5 版本中执行哪些操作,以及下一个版本中将要执行的操作。

对于 v5.5 版本, 此 GitHub 存储库https://github.com/Azure-Samples/service-fabric-dotnet-containers展示了如何在 Windows 容器之间进行通信,您可以使用 PortBinding 将主机端口映射到容器上的私有端口应用程序清单中的策略。

然后,您可以通过 REST 称为命名服务(这就是此示例所做的)或如您所说的那样更容易与具有 URL 格式的 ReverseProxy 进行通信。如果两个容器都部署在同一台机器上,则通信是通过本地 ReverseProxy 进行的,并且您可以在容器之间进行本地调用。请参阅https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy。正如 Mikkel 指出的那样,您必须通过放置约束告诉 Service Fabric 您希望容器位于同一 VM 上。

注意:要让上面的 GitHub 示例在您的本地计算机上运行,​​您需要更新 C:\Program Files\Microsoft SDKs\Service Fabric\ClusterSetup\NonSecure\FiveNode 文件夹中的本地开发清单 ClusterManifestTemplate.xml,并将IPAddressOrFQDN属性从“localhost”到它运行的机器的实际IP。这是由于上面的 git 存储库中记录的 Windows Server 网络错误。IE

<Node NodeName="_Node_0" IPAddressOrFQDN="ComputerFullName" IsSeedNode="true"  NodeTypeRef="NodeType0" FaultDomain="fd:/0" UpgradeDomain="0" />

变成

<Node NodeName="_Node_0" IPAddressOrFQDN="192.1.3.50" IsSeedNode="true"  NodeTypeRef="NodeType0" FaultDomain="fd:/0" UpgradeDomain="0" />

即将发布 v5.6 在下一个版本中,我们在命名服务之上添加了一个 DNS 服务器,以便您可以使用 DNS 名称代替反向代理使用的 fabric:/ 名称。这意味着在 Service Fabric 群集中,您可以改为使用http://[domainname]/path调用在容器之间进行调用。相同的规则适用于与反向代理相同的机器上的本地容器之间的调用。

于 2017-04-05T05:37:20.063 回答
0

使用服务亲和力将是一个选项:https ://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-resource-manager-advanced-placement-rules-affinity

于 2017-04-04T22:14:48.940 回答