Soy Òscar Mas y quiero enseñaros una herramienta que se llama Consul. Esta herramienta pertenece a la familia de productos de la empresa Hashicorp y seamos sinceros: no es de las herramientas más populares que tiene HashiCorp, pero creo que es una de las más útiles en determinados entornos. Algunas de las herramientas más conocidas que podemos encontrar de HashiCorp son:
- Terraform: su utilidad es desplegar entornos mediante código (IaC)
 - Vagrant: creación de entornos de pruebas locales mediante máquinas virtuales
 - Vault: un buen lugar para guardar secretos
 - etc....
 
No quiero extenderme con los diferentes productos que tiene HashiCorp, ya que son bastantes y cada uno es muy diferente de los demás. Os aconsejo que le echéis un vistazo a los diferentes productos que ofrece esta empresa.
Qué es HashiCorp Consul
Como he comentado al principio, en este caso nos centraremos en Consul. Lo primero que debemos decir de Consul es que se encarga de la “gestión y descubrimiento de servicios en entornos distribuidos”. Creo que esta frase es demasiado complicada y me gustaría explicar qué es Consul de una manera más amena que con la típica definición de libro:
Consul es un sistema en el cual, cuando un servicio (servidor web, base de datos, access API, etc...) se da de alta, él mismo se registra en Consul. De tal manera que, si tres servidores web están funcionando y se han registrado en Consul, cuando le preguntes a Consul que te informe sobre ese servicio, Consul te responderá con los datos necesarios para acceder a los tres servidores (IP, puerto, etc.).
En el caso de que un servidor deje de comunicarse con Consul, sea por decisión propia o por cualquier otro motivo, Consul dará de baja el servicio, y la siguiente consulta te informará de que solo hay dos servidores (en lugar de tres).
Este sistema es muy útil, ya que puedes tener servicios en diferentes ubicaciones (Azure, On-Premise, AWS, etc.) o ir cambiando servicios, puertos, etc., y no tienes que informar a nadie, ya que los servicios se registran automáticamente en Consul y siempre debes preguntar a Consul para saber dónde están las cosas.
Laboratorio con Consul
Ahora que ya tenemos claro para qué sirve y cuál es la funcionalidad de Consul, vamos a realizar un pequeño laboratorio, en el cual:
- Registraremos un servicio de forma manual
 - Registraremos un servicio de forma automática
 
Prerequisitos
Antes de comenzar, necesitaremos tener desplegados dos equipos. Uno hará las funciones de servidor de Consul y el otro lo utilizaremos como cliente.
- Hostname: consul → tiene las funcionalidades de servidor
 - Hostname: consul-client → actuará como cliente para registrar un servicio en Consul
 

Despliegue de Consul
Una vez claros los equipos que forman este laboratorio, debemos desplegar el sistema de Consul en el que hará las funciones de servidor (equipo: consul). En este caso, desplegaremos Consul con Docker Compose. La instalación se ha hecho lo más sencilla posible, ya que es un laboratorio para entender para qué sirve el producto Consul.
root@consul:~# cat /etc/docker-compose/docker-compose.yaml
services:
consul:
container_name: consul
hostname: consul
image: hashicorp/consul:1.19
ports:
- "8400:8400"
- "8500:8500" # GUI/API
- "8600:8600" # DNS server
volumes:
- /etc/localtime:/etc/localtime:ro
root@consul:~# docker compose -f /etc/docker-compose/docker-compose.yaml up -d
Una vez levantados los servicios vía Docker Compose, verificaremos que tenemos acceso a la GUI de Consul:

Registrar un servicio: de forma manual
En este caso registraremos un servicio de forma manual en Consul de la siguiente manera:
root@consul:~# docker exec -it consul consul services register -name=HTTP -address=http://web.ilba.cat -port=80
Una vez registrado, podremos ver en la GUI de Consul el resultado:
Registrar un servicio: de forma automática
En este caso utilizaremos un servidor web (nginx) y lo registraremos automáticamente en Consul:
root@consul-client:~# cat /etc/docker-compose/docker-compose.yaml
services:
consul-registrator:
container_name: consul-registrator
hostname: consul-registrator
image: gliderlabs/registrator:master
volumes:
- /var/run/docker.sock:/tmp/docker.sock
command: "-ip=172.26.0.34 consul://172.26.0.33:8500"
nginx:
container_name: nginx
hostname: nginx
image: nginx:1.27-bookworm
ports:
- "80:80"
volumes:
- /etc/localtime:/etc/localtime:ro
depends_on:
- consul-registrator
root@consul-client:~# docker compose -f /etc/docker-compose/docker-compose.yaml up -d
Una vez registrado el servicio mediante Docker Compose en nuestro servidor de Consul, revisaremos a través de la GUI que se haya registrado correctamente nuestro servidor web:

Consultas a Consul
No podíamos terminar el post sin enseñaros el resultado de una consulta realizada al servicio de Consul. Esta consulta se ha hecho al servicio que se ha creado de forma manual:
root@consul-client:~# curl -s http://172.26.0.33:8500/v1/agent/service/HTTP
{
"ID": "HTTP",
"Service": "HTTP",
"Tags": [],
"Meta": {},
"Port": 80,
"Address": "http://web.ilba.cat",
"Weights": {
"Passing": 1,
"Warning": 1
},
"EnableTagOverride": false,
"ContentHash": "b3279d556030b491",
"Datacenter": "dc1"
}
También podríamos hacerle una consulta directa para que nos muestre la URL de un servicio en concreto:
root@consul-client:~# apt update && apt -y install jq
root@consul-client:~# curl -s http://172.26.0.33:8500/v1/agent/service/HTTP | jq -r '.Address'
http://web.ilba.cat
Conclusiones
HashiCorp Consul es una herramienta ideal para entornos con microservicios, contenedores y despliegues multi-nube, donde la flexibilidad y la automatización son esenciales.
Espero que este pequeño laboratorio os ayude a comenzar y a entender su funcionamiento básico, o al menos, que hayáis descubierto un nuevo producto.
