Cómo Configurar Consul KV Usando Docker

Introducción

Consul de HashiCorp es una herramienta versátil que cumple múltiples funciones en un entorno moderno de DevOps. Es ampliamente utilizado para la descubierta de servicios, chequeos de salud, balanceo de carga y, destacadamente, como una tienda de claves distribuidas (KV). La tienda de KV en Consul es perfecta para almacenar datos de configuración dinámicos, banderas de características, secretos y metadatos de manera altamente disponible y consistente a través de su infraestructura, de manera que puedan ser accedidos dinámicamente por servicios en un sistema distribuido. Utilizar Docker para configurar la tienda de KV de Consul permite un configuración rápida y ambientes aislados, lo que lo hace ideal para pruebas y desarrollo.

Este tutorial le guiará a través del proceso de configuración y ajuste de la tienda de KV de Consul utilizando Docker. Al finalizar, tendrá una instancia de Consul totalmente funcional ejecutándose en Docker, con pares de KV configurados y accesibles. Esta configuración es fundamental para la configuración dinámica de servicios y el manejo del estado en sistemas distribuidos.

Prerequisites

Antes de comenzar, asegúrese de tener lo siguiente:

  • Una cuenta de Cloud DigitalOcean..
  • Un servidor ejecutando Ubuntu y un usuario no root con privilegios de sudo y una cortafuegos activa. Para obtener orientación sobre cómo configurar esto, por favor elija su distribución de la lista y siga nuestra guía de configuración inicial del servidor. Asegúrese de trabajar con una versión compatible de Ubuntu.
  • Docker instalado en su Droplet Ubuntu. Siga con este tutorial sobre Cómo instalar y usar Docker en Ubuntu.
  • Conocimiento familiar con la línea de comandos de Linux. Para una introducción o recuerdo a la línea de comandos, puede visitar esta guía sobre Primer manual de la línea de comandos de Linux.
  • Conocimientos básicos de los comandos de Docker y la gestión de contenedores.

Paso 1 – Extracción de la imagen de Consul de Docker

Vamos a extraer la imagen oficial de Consul de Docker Hub. Esta imagen es mantenida por HashiCorp y incluye todo lo necesario para ejecutar Consul.

Acceda a la consola de su Droplet Ubuntu y ejecute:

docker pull hashicorp/consul:latest
Output
latest: Pulling from hashicorp/consul c8bcd218a73d: Pull complete 5f1ac8227c2a: Pull complete c51fd79d429a: Pull complete 91eff479bde6: Pull complete 4dfcc18e51db: Pull complete 3e2a8bf39bf9: Pull complete bd9ddc54bea9: Pull complete 2054d291fb84: Pull complete Digest: sha256:e244c64df77ab3586f177f1692e98575086eb40343dc82a6320f5e79543490eb Status: Downloaded newer image for hashicorp/consul:latest docker.io/hashicorp/consul:latest

Paso 2 — Ejecución del contenedor de Consul

Ahora que se ha descargado la imagen de Consul, puede iniciar un nuevo contenedor de Consul. Este contenedor servirá como su servidor de Consul y le permitirá interactuar con la KV store.

Para iniciar el contenedor, ejecute:

docker run -d --name=consul-server -e 
Output
CONSUL_BIND_INTERFACE
=eth0 -p 8500:8500 -p 8600:8600/udp hashicorp/consul c893b6707686bce8434213975a75c936b834cf25fc84d10b407a11c4fa8ca8ba

Este comando realiza lo siguiente:

  • -d ejecuta el contenedor en modo desconectado (en segundo plano).
  • --name=consul-server asigna un nombre al contenedor.
  • -e CONSUL_BIND_INTERFACE=eth0 establece la interfaz de red a la que Consul debe enlazarse. Esto es necesario para la comunicación de red correcta.
  • -p 8500:8500 mapea el puerto de la interfaz de usuario web y de API de Consul al host.
  • -p 8600:8600/udp mapea el puerto del servicio de DNS para la descubierta de servicios.

Este paso es crucial ya que configura el servicio central de Consul, que utilizará para configurar la KV store.

Paso 3 — Verificación de la instalación de Consul

Para asegurarse de que Consul se está ejecutando correctamente, necesita verificar el estado del contenedor y acceder a la interfaz de usuario de Consul.

Primero, ejecute docker ps para listar todos los contenedores en ejecución y verificar que el contenedor de Consul está en funcionamiento.

docker ps                                                                                                      
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                                                                                    NAMES
c893b6707686   hashicorp/consul   "docker-entrypoint.s…"   51 seconds ago   Up 50 seconds   8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp   consul-server

Ahora, Compruebe si Consul es accesible, abra un navegador web y navegue a http://localhost:8500. Debería ver la interfaz de usuario de Consul.

Este paso de verificación es importante para confirmar que su instancia de Consul se está ejecutando sin problemas antes de almacenar datos en la KV store (Paso 5).

Paso 4 — Configuración de la Firewall (Opcional)

Si su instancia de Consul necesita ser accedida externamente (por ejemplo, desde otros nodos en un clúster), debe ajustar su configuración de firewall para permitir tráfico en los puertos necesarios.

Por ejemplo, si está ejecutando Consul en una instancia en la nube, puede que necesite permitir tráfico entrante en los puertos 8500 (API HTTP) y 8600 (DNS). Las órdenes específicas variarán según su solución de firewall (UFW, iptables, etc.).

Este paso garantiza que su instancia de Consul es accesible desde otras máquinas, lo cual es fundamental para configuraciones distribuidas.

Paso 5 — Almacenamiento de Pares Clave-Valor

Con Consul en ejecución, ahora puede utilizar la KV store para almacenar datos de configuración. Puede agregar pares clave-valor usando la CLI de Consul o la interfaz de usuario web.

Para almacenar un par clave-valor vía la CLI, ejecute:

docker exec -it consul-server consul kv put config/db_host 
192.168.1.100
Success! Data written to: config/db_host
docker exec -it consul-server consul kv put config/db_port 3306         
Success! Data written to: config/db_port

Este es lo que hace esta orden:

  • -it – Lanza la terminal interactiva del sistema local hacia el contenedor.
  • consul kv put – La orden kv put escribe los datos en la ruta KV store dada.
  • config/db_host – Ruta para almacenar el valor.
  • 192.168.1.100 – Valor.

Usando la interfaz de usuario web,

  1. Vaya a la interfaz de usuario de Consul (http://localhost:8500).
  2. Haga clic en la pestaña “Key/Value”.
  3. Cree una nueva clave haciendo clic en “Create”.
  4. Ingrese la clave (por ejemplo, config/db_host) y el valor (por ejemplo, 192.168.1.100).

Estas órdenes y acciones almacenan datos de configuración críticos que sus servicios pueden acceder de manera dinámica en tiempo de ejecución.

Paso 6 — Recuperando Pares Clave-Valor

Una vez que haya almacenado algunos pares KV, querrá recuperarlos para asegurarse de que han sido almacenados correctamente.

Usando la CLI, recupere un valor usando la siguiente orden:

docker exec -it consul-server consul kv get config/db_host     
192.168.1.100

Usando la interfaz de usuario web,

  1. Vaya a la pestaña “Key/Value” en la interfaz de usuario de Consul.
  2. Encuentre la clave que creó y haga clic en ella para ver el valor almacenado.

Recuperar las parejas KV es un paso necesario para verificar que sus datos se almacenan correctamente y son accesibles.

Paso 7 — Persistir Datos Usando Volúmenes de Docker

Por defecto, los contenedores de Docker son efímeros, lo que significa que cualquier datos almacenados dentro de ellos se perderán si el contenedor es eliminado. Para persistir sus datos KV de Consul, debe usar volúmenes de Docker.

  1. Detenga y elimine el contenedor de Consul actual:
docker stop consul-server 
docker rm consul-server 

Ahora, verifique los contenedores y debería notar que el contenedor de Consul ya no se está ejecutando.

docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

2.Ejecute un nuevo contenedor de Consul con un volumen de Docker adjunto:

docker run -d --name=consul-server -e 
Output
CONSUL_BIND_INTERFACE
=eth0 -p 8500:8500 -p 8600:8600/udp -v consul_data:/consul/data hashicorp/consul 2d2a7d3ff1911c2283e70506d68391a5cbf9c935a2ae447bfb8fa21481989ef1
docker ps 
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2d2a7d3ff191 hashicorp/consul "docker-entrypoint.s…" 5 seconds ago Up 4 seconds 8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp consul-server

La opción -v consul_data:/consul/data monta un volumen de Docker en el contenedor, garantizando que su almacén KV persiste a través de reinicios de contenedor.

Paso 8 — Automatizar el Inicio de Consul (Opcional)

Para despliegues de producción, podría querer automatizar el inicio del contenedor de Consul usando Docker Compose. Docker Compose simplifica las aplicaciones de Docker multi-contenedor y facilita la gestión de servicios.

Cree un archivo docker-compose.yml con el siguiente contenido:

docker-compose,yml
services:
  consul:
    image: hashicorp/consul:latest
    environment:
      - CONSUL_BIND_INTERFACE=eth0
    volumes:
      - consul_data:/consul/data 
    ports:
      - "8500:8500"
      - "8600:8600/udp"
    restart: always
volumes:
  consul_data:

Luego, ejecute:

docker-compose up -d
Output
[+] Running 2/2 ✔ Network work_default Created 0.0s ✔ Container consul-server Started 0.1s
docker ps
Output
WARN[0000] /Users/anandhkumar/work/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS work-consul-1 hashicorp/consul:latest "docker-entrypoint.s…" consul 40 seconds ago Up 11 seconds 8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp

Este comando inicia automáticamente Consul y garantiza que se reinicia si falla, haciéndolo más robusto para uso de producción.

Paso 9 — Limpieza

Una vez que haya terminado de trabajar con su instancia de Consul, debería limpiar su entorno de Docker para liberar recursos.

Vamos a detener y eliminar el contenedor de Consul:

docker stop consul-server   
docker rm consul-server
docker ps
output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Si ha terminado con Consul, también puede eliminar la imagen de Docker:

docker rmi hashicorp/consul  
output
hashicorp/consul@sha256:e244c64df77ab3586f177f1692e98575086eb40343dc82a6320f5e79543490eb Deleted: sha256:eff8ccb509560987755a70df8d6c0b9410538d503d99498ae1ea9f48066b0439 Deleted: sha256:b5e6402bbb78eb061d538505a30300ef7f612104eaf0f11b17839a9b29bc5603 Deleted: sha256:1c61ada2ad8074615120d13bd805260d766ae8424cafbda4bded529d6a204d6f Deleted: sha256:9b36da670e2a59f1d81c6e3c9d55906c576b384df51272977e5a9caea7131e74 Deleted: sha256:8c6e52c441c246f60ca146b71204b7d6511df75fa87a0dc0a0f91141964e8fd9 Deleted: sha256:1fce18208235de2be3c419764ec1d469229af5387447d21649c841632c653cef Deleted: sha256:68e0a114c9c35b9aa8cac31fa32b27f886361bc85fcc63f34e882e9128f33a14 Deleted: sha256:3da5b888208a9b19694bfeaf8c74a432b50f44542d717c9e1f3ab273e505855a Deleted: sha256:dea73e9287e6e2f3b7f9fcac4f20767d7badeefa24e52f990f1674e98abfa1a3 Deleted: sha256:201fa22d1f4c7d6e7ec43135c63b2260f303f4864f5eb43569faaa1731628799

La limpieza ayuda a mantener un entorno de desarrollo ordenado y garantiza que los recursos de Docker no se consuman innecesariamente.

Conclusión

En este tutorial, aprendiste cómo configurar la tienda de KV de Consul utilizando Docker. Hemos cubierto la instalación de Docker, ejecución del contenedor de Consul, configuración de la tienda de KV, persistencia de datos con volúmenes de Docker y limpieza de tu entorno. Con estos pasos, ahora puedes utilizar Consul para administrar dinámicamente los datos de configuración en tus sistemas distribuidos, aprovechando el poder de Docker para una fácil implementación y gestión.

Source:
https://www.digitalocean.com/community/tutorials/how-to-configure-consul-kv-using-docker