Edge Load Balancing for Consul Connect

Question for anyone who gets here. Which of the following options would work for you?

  1. Expose all services through an “ingress” proxy on separate ports.
    • Pros: really simple to build and works for all protocols, the only option for TCP services
    • Cons: Need to expose N ports to access N services through the proxy
  2. Expose http(1/2/grpc) services through an “ingress” proxy on a single port, using Hostname to address the required service.
    • Pros: clean and natural, no need for an extra layer of routing edge->service to expose services.
    • Cons: Need to have external clients resolve Consul DNS so that we can provide the IP(s) of the ingress proxies for service-specific names. e.g. <service>.ingress.consul
  3. Expose http(1/2/grpc) services through an “ingress” proxy on a single port, using a path prefix to address the required service.
    • Pros: no need for external Consul DNS resolution - can just use proxy IPs or raw hostnames
    • Cons: need to have a whole new way to configure the mapping of path prefix to service (or just stick with /<servicename>) and likely change clients who didn’t know about the prefix before when they connected directly etc.

It occurs to me writing this up that we’ll always need 1 for non-HTTP and we could do both 2 and 3 pretty easily especially if we just use a convention rather than a whole new routing layer to map path prefix to service so it might be something we can leave up to users at runtime.

Option 2 is more work to build though so would be good to hear if people would need/use that option over the others if available.