Hi Adrian,
I’ve experience only with a k8s and docker-compose. In K8s is service discovery provided by etcd, in the hashistack you can do the same with a Consul. In k8s you use networking layer across nodes which alows you to connect services together and you can do the same in nomad cluster of course by CNI plugins, but in K8s and Nomad it is definitely not easy.
As I’ve told before you have basicaly options as follows.
You can connect services together via localhost (bridge), but it works only betwean tasks in the same group and running at the same node.
Other option, is to make services able to comunicate together across whole cloud by binding services to node’s port. Simpiest way how to reach this is binding all services in job at the node’s ports and than use consul as a service discovery service. Than you can use registered services via dnsmasq as you are trying or by consul templates (have you already read this article https://www.nomadproject.io/docs/job-specification/template ?)
Underlaying networks like calico is good way and you can do it with nomad too, but the service mesh way with consul connect is bit more modern and you have more controll there. So I really recomend you to use this way https://www.nomadproject.io/docs/integrations/consul-connect. It is not as complicated as it sems to be.