Azure Service Fabric Windows容器 - 集装箱间通信

时间:2017-04-04 18:12:57

标签: azure azure-service-fabric service-fabric-stateful windows-container service-fabric-actor

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

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

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

[更新:04/05/2017]

Service Fabric Cluster版本:5.5.219.0

节点类型总数:1

总节点数:3

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

拉​​夫

2 个答案:

答案 0 :(得分:1)

现在你可以在v5.5版本中做些什么以及下一个版本将会发生什么。

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

然后,您可以通过REST进行通信,这可以通过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 \中的本地开发清单ClusterManifestTemplate.xml NonSecure \ FiveNode文件夹并从" localhost"更改 IPAddressOrFQDN 属性到它运行的机器的实际IP。这是由于上面的git repo中记录的Windows Server Network错误。即

<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名称代替反向代理使用的结构:/名称。这意味着在Service Fabric群集中,您可以在具有http://[domainname]/path调用的容器之间调用。相同的规则适用于同一台机器上的本地容器与反向代理之间的调用。

答案 1 :(得分:0)