Desplegar el stack ELK en Docker con SSL

En este artículo vamos a ver como desplegar el stack ELK en una maquina virtual con Ubuntu 22.04 y acceder a traves de una conexión SSL.

Requisitos del equipo

Docker

Se usará docker compose para levantar todos los contenedores del stack incluyendo un cluster de elasticsearch con 3 nodos, en caso no tenerlo instalado puedes seguir esta guía.

Nginx

Se usara como proxy reverso para redireccionar las peticiones hacia Kibana para que se pueda acceder a administrar el stack y ver las métricas del servicio, en caso no tenerlo instalado puedes seguir esta guía.

Archivos de despliegue

Adicional al archivo docker-compose.yml tengo dos archivos de configuración para establecer las claves de los servicios y para la ocnfiguración propia del Logstash.

Todos estos archivos se encuentran en un repositorio público donde pueden descargar y establecer las claves para poder desplegarlo.

RiLaRos/ELK: Deploy ELK stack on Docker (github.com)

Proceso de despliegue

Configuraciones previas

Para evitar problemas cuando se levanten los contenedores por temas de memoría se debe aumentar la memoria virtual del equipo, ya que elasticsearch lo usa para almacenar sus índices, para ello se puede hacer con el siguiente comando:

sysctl -w vm.max_map_count=262144

Ejecución del despliegue

Una vez se tengan los archivos con sus respectivas configuraciones dentro del servidor se ejecuta el siguiente comando:

docker compose up -d

Con esto se debería tener corriendo todos los contenedores con un estado healthy.

Si todo ha ido bien, al acceder con la IP y el puerto 5601 desde el navegador, se debería poder ver esta interfaz:

Configuración de acceso con SSL

Registro y configuración en Cloudflare

Para poder conectarnos a Kibana a traves de SSL vamos a hacerlo usando Cloudflare, para ello te puedes crear una cuenta gratuita y para la configuración tambien usaremos el plan gratuito, una vez dentro agreamos un nuevo site:

Al finalizar nos brindará unos DNS que debemos configurar en nuestro proveedor de dominio y se debe esperar un tiempo hasta que se valide la configuración.

Cuando se haya finalizado la validación, se deberá agregar un registro de tipo A que apunte a la IP del servidor donde hemos desplegado el stack ELK.

Con esta configuración ya se va a dirigir el tráfico del dominio al servidor, solo que aun no va a poder mostrarse la página de acceso ya que esto va a redirigir al puerto 80, pero Kibana esta ejecutandose en el puerto 5601.

Configuración del proxy reverso con Nginx

Podríamos haber publicado Kibana en el puerto 80 para que por defecto funcione la configuración previa, pero agrego esta configuración por si se tienen diferentes puertos o subdominios diferentes apuntando al mismo servidor.

Para configurar Nginx como proxy reverso vamos a seguir estos pasos:

  1. Crea un archivo de configuración para Nginx en /etc/nginx/sites-available/ (por ejemplo, kibana.conf) con el siguiente contenido (ajusta los valores según sea necesario):
server {
    listen 80;
    server_name sistema.dominio.com;

    location / {
        proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

2. Crea un enlace simbólico a este archivo en sites-enabled:

sudo ln -s /etc/nginx/sites-available/kibana.conf /etc/nginx/sites-enabled/

3. Reinicia Nginx

sudo service nginx restart

4. Reiniciar Kibana

Conclusiones

Siguiendo todos estos pasos deberíamos tener configurado un dominio o subdominio con SSL que nos redirige hasta Kibana y podemos acceder a nuestro Stack, usando la clave del usuario elastic que hemos configurado en el archivo .env.

Referencias:

https://www.youtube.com/watch?v=jXU_1GADENQ&ab_channel=AliYounes

https://github.com/ayounes9/elk-on-docker


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *