Consul is a service discovery tool created by HashiCorp. In this repository, we've provided a pre-configured implementation of Consul's service backend, as well as example configurations for using Consul with your own Layer0 services.
When you have multiple services in a Layer0 environment, how do you get them to connect to each other? One simple answer is that you hardcode service endpoints (i.e. a Loadbalancer URL) in your application configurations. That may be OK for testing, but ultimately hardcoding endpoints is not portable, annoying to maintain, and not in line with the guidelines of a 12-factor app. A much better solution is to use a service like Consul, which along with another tool called Registrator, can automatically detect your services when they come online and add them to a service registry. You can then 'discover' these services using catalog endpoints via DNS or HTTP.
For a practical applications of Consul, see our Layer0 Consul Documentation.
Enabling a Service to use Consul
In order to automatically register services with Consul, you need to add two extra containers to any given service: Registrator and the Consul Agent. The general idea here is that the Registrator container takes care of detecting new Layer0 services and registering them with the Consul backend, while the Consul Agent is a localhost interface for performing Consul-based HTTP and DNS queries.
We have 2 walkthroughs in this repo that create a Consul server and a simple web application that registers itself with the Consul server:
- The walkthrough using the Layer0 cli can be found here
- The walkthrough using Terraform can be found here
Please send an email to firstname.lastname@example.org with any issues.