The following forum(s) have migrated to Microsoft Q&A (Preview): Azure Service Fabric!
Visit Microsoft Q&A (Preview) to post new questions.

Learn More

 locked
Access Azure Servie Fabric from the internet. RRS feed

  • Question

  • Hello.

    I have created azure service fabric cluster. It created Load Balancer, rules, probes, etc.

    I have uploaded my application which is WCF microservice that is listening to TCP port.  That should use duplex long-living tcp session. 

    When client tries to access it then LB replies with service endpoint associated with my microservice on one of nodes.

    The problem is that all nodes are connected to private IP address and client from the internet cannot access them.

    A bit more info: I checked windows firewall on nodes, I see the port listening and see someone connected to it (hope this is probe), I have Load balancing rule for my port with Floating IP enabled, no network security group, load balancer has public ip.

    How can I tell LB to pass all requests to VM nodes instead of replying with their private addresses?

    Friday, November 25, 2016 8:17 PM

Answers

  • I suspect that you have to do this: (when you have multiple endpoints, it is equivalent to having multiple partitions)

    "The default ServicePartitionResolver assumes that the client is running in same cluster as the service. If that is not the case, create a ServicePartitionResolver object and pass in the cluster connection endpoints."

    Check out this link:

    https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-communication-wcf


    Frank

    Monday, November 28, 2016 4:17 PM
  • Unless the services are exposed on public IPs then you will need some sort of routing gateway which is listening on the machines connected to the Azure LB and then doing the necessary resolution in order to talk to the services running on the actual nodes - the clients will not just be able to resolve the service and talk directly to them (that only works if the services are stateless and running on known ports at which point the Azure LB will correctly forward things.

    If you're specifically using WCF, that gateway would have to be a stateless service running on a known port and probably would use the WCF Routing Service to handle looking up the backend services based on some message metadata.

    Monday, November 28, 2016 9:22 PM

All replies

  • I suspect that you have to do this: (when you have multiple endpoints, it is equivalent to having multiple partitions)

    "The default ServicePartitionResolver assumes that the client is running in same cluster as the service. If that is not the case, create a ServicePartitionResolver object and pass in the cluster connection endpoints."

    Check out this link:

    https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-communication-wcf


    Frank

    Monday, November 28, 2016 4:17 PM
  • Unless the services are exposed on public IPs then you will need some sort of routing gateway which is listening on the machines connected to the Azure LB and then doing the necessary resolution in order to talk to the services running on the actual nodes - the clients will not just be able to resolve the service and talk directly to them (that only works if the services are stateless and running on known ports at which point the Azure LB will correctly forward things.

    If you're specifically using WCF, that gateway would have to be a stateless service running on a known port and probably would use the WCF Routing Service to handle looking up the backend services based on some message metadata.

    Monday, November 28, 2016 9:22 PM