0

Ich habe einen Azure Service Fabric-Cluster mithilfe des Betriebssystems "Windows 2016 DataCenter with Containers" erstellt und Reverse Proxy auf Port 80 im Cluster überwacht. Wir beabsichtigen, unsere älteren WCF-Anwendungen für ASP.NET MVC & auf diesem Cluster bereitzustellen.Azure Service Fabric-Windows-Container - Inter Container Communication

In unserem bestehenden Bereitstellungsmodell haben wir Dienste, die auf demselben Host zusammengeschlossen sind, die miteinander kommunizieren, aufgrund der geschwätzigen Kommunikation und geringen Latenzanforderungen. Ist es möglich, dass Apps, die im Windows-Container gehostet werden, mit anderen Windows-Container-Apps auf demselben Knoten kommunizieren? Grundsätzlich möchte ich Knoten Affinität zwischen zwei Windows Container Apps auf dem gleichen Service Fabric Node haben.

Ich habe es mit einer Beispielanwendung versucht und es sieht so aus, als ob die einzige Option ist, private IP des Containers zu verwenden, der dynamisch zugewiesen wird. Ist es möglich, während der Instanziierung von Containern im Service Fabric-Cluster den Parameter -ip-address anzugeben?

[Update: 2017.04.05]

Service-Fabric Cluster Version: 5.5.219.0

Gesamt NodeTypes: 1

Gesamt Knoten: 3

Beide Behälter sind auf allen drei Knoten bereitgestellt. Azure Internet Load Balancer wird verwendet, um Service Fabric Reverse Proxy verfügbar zu machen. Alle Dienste greifen sowohl intern als auch extern über Reverse-Proxy zu.

Gaurav

Antwort

0
+0

Danke Mikkel für die Freigabe der Verbindung. Ich habe die Dokumentation durchgelesen, aber es sieht so aus, als ob diese Funktion für Stateless- und Stateful-Dienste von Service Fabric nützlich ist. Ich konnte keine Informationen darüber finden, wie containerbasierte Apps gemeinsam auf dem Service Fabric-Knoten platziert werden können. – Gaurav

+0

Wenn Sie Container als Gastcontainer bereitstellen, handelt es sich im Grunde um statusfreie Dienste. –

1

Es ist das, was Sie jetzt in der Version 5.5 Release tun können und was in der nächsten Version kommen.

Für v5.5 Veröffentlichung Diese GitHub Repo https://github.com/Azure-Samples/service-fabric-dotnet-containers zeigt, wie zwischen Windows-Container kommunizieren, wo Sie einen Host-Port an den privaten Port auf dem Behälter mit PortBinding Politik in der Anwendung manifestieren abbilden kann.

Sie können dann entweder den Naming Service über REST kommunizieren (dies ist, was dieses Beispiel tut) oder wie Sie sagen und ist einfacher, mit dem ReverseProxy, der ein URL-Format hat. Wenn beide Container auf demselben Computer bereitgestellt werden, erfolgt die Kommunikation über den lokalen ReverseProxy, und Sie erhalten lokale Aufrufe zwischen den Containern. Siehe https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy. Wie Mikkel hervorhebt, müssen Sie Service Fabric mitteilen, dass Sie die Container auf der gleichen VM durch Platzierungsbeschränkungen haben möchten.

Hinweis: für die GitHub Probe oben auf Ihrer lokalen Rechner arbeiten Sie die lokale dev manifestieren ClusterManifestTemplate.xml in der C aktualisieren müssen: \ Programme \ Microsoft SDKs \ Service Fabric \ ClusterSetup \ Nonsecure \ FiveNode Ordner und ändern Sie das Attribut IPAddressOrFQDN von "localhost" auf die tatsächliche IP des Computers, auf dem es ausgeführt wird. Dies liegt an einem Windows Server-Netzwerkfehler, der oben im Git Repo dokumentiert wurde. ich.

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

wird

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

Coming for v5.6 Veröffentlichung In der nächsten Version wir einen DNS-Server auf dem Naming Service geschichtet hinzugefügt haben, so dass Sie DNS-Namen verwenden können, anstelle von Fabric:/Namen, die vom Reverse-Proxy verwendet werden. Dies bedeutet, dass Sie innerhalb des Service Fabric-Clusters stattdessen zwischen den Containern mit den Nummern http://[domainname]/path aufrufen können. Die gleichen Regeln gelten für die Aufrufe zwischen lokalen Containern auf demselben Computer wie für den Reverseproxy.

+0

Danke für detaillierte Antwort. Ich habe oben noch einige Umgebungsdetails hinzugefügt ... Bezogen auf Ihre Aussage "Wenn beide Container auf demselben Rechner installiert sind, erfolgt die Kommunikation über den lokalen ReverseProxy und Sie erhalten lokale Aufrufe zwischen den Containern" ... Wie erzwingen Sie die Nutzung von lokalen Reverse-Proxy? Wenn Dienst A in Container A den Dienst B in Container B aufruft, würde er die URL im Format http: // : /ContainerASFAppB/ServiceB verwenden. Load Balancer würde nach dem Zufallsprinzip den Reverse-Proxy auf einem der drei Knoten – Gaurav

+0

Ich lese über Placement-Einschränkungen wählen, aber in diesem Fall, da beide Container auf allen drei Knoten vorhanden sind, kann es nicht hilfreich sein. Was ich versuche zu erreichen, ist, dass die Container auf den gleichen Knoten entweder über ihren Host-Namen, ihre IP-Adresse oder über einen lokalen Reverse-Proxy miteinander kommunizieren. Ich habe keine Möglichkeit gefunden, Hostname oder IP-Adresse in Anwendung oder Dienstmanifest anzugeben. Diese Werte werden von Service Fabric zufällig zugewiesen. Der einzige Weg, auf den ich mich zu nähern, ist entweder Knoten-IP-Adresse oder lokaler Reverse-Proxy. Wegen einer Win 2016 WinNAT Beschränkung kann ich auch nicht Host IP verwenden. – Gaurav

Verwandte Themen