In combination with consul-template you can pretty easily create automated service discovery which will update a configuration, such as HAProxy or nginx LB config, and reload the service.
It's a neat go daemon that runs as a global unit(every node) listening to the docker event bus and updating etcd for you. From there it's easy to use confd to manage updating nginx or haproxy (which is what the deis router does).
https://github.com/GoogleCloudPlatform/kubernetes/blob/maste...
Again, not necessarily worse, just different and unfamiliar.
The other reason is that this really only pushes the service discovery down a layer - how do you know where RabbitMQ is running? Of course, the same could be said for etcd - how do you know where etcd is running in order to query for more services.