Desplegar en Kubernetes

Guía paso a paso para desplegar OpenReplay en Kubernetes.

Desplegar en Kubernetes

El despliegue de OpenReplay se basa en Helm Charts, lo que lo hace totalmente compatible con Kubernetes. Empaquetamos PostgreSQL y Redis, que son necesarios para OpenReplay. Aquí te explicamos cómo hacerlo.

El despliegue de OpenReplay en Kubernetes necesita:

  • Kubernetes v1.18+
  • helm 3.10+
  • PVC RWX con permiso de lectura/escritura para el usuario con id 1001 (para los componentes compartidos, si el clúster tiene más de un nodo). Asegúrate de reemplazar hostPath por el nombre del pvc creado en /var/lib/openreplay/vars.yaml.
# In case of multiple nodes in the kubernetes cluster,
# You'll have to create an RWX PVC for shared components.
# If it's a single node, we'll use hostVolume, which is the default for the community/oss edition.
pvcRWXName: "hostPath"

OpenReplay también requiere 2 vCPUs, 8 GB of RAM, 50 GB of storage (arquitectura x86) para funcionar correctamente; de lo contrario, los servicios de backend de OpenReplay simplemente no se iniciarán. Estas especificaciones son suficientes para un volumen moderado, pero si esperas mucho tráfico, deberías escalar a partir de aquí.

El despliegue se ha probado en las siguientes plataformas:

  • Clúster Kube local de un solo nodo
  • Google Kubernetes Engine (GKE)
  • Amazon Elastic Kubernetes Service (EKS)
  • Microsoft Azure Kubernetes Service (AKS)
  • Scaleway Elements Kubernetes (Kapsule)

Conéctate a tu clúster y clona el repositorio de OpenReplay:

git clone https://github.com/openreplay/openreplay.git
cd openreplay/scripts/helmcharts

Si hay varios nodos en el clúster de Kubernetes, tendrás que crear un PVC RWX (por ejemplo, efs, en el caso de AWS) para que los contenedores compartan datos. Si es un solo nodo, usaremos hostVolume, que es el valor predeterminado para la instalación de la comunidad.

Luego, abre el archivo vars.yaml con el comando vim vars.yaml y sustituye:

  • domainName: aquí es donde OpenReplay estará accesible (es decir, openreplay.mycompany.com)
  • postgresqlPassword: contraseña de Postgres (establécela o genera una aleatoria)
  • accessKey: requerida para el servicio de almacenamiento de objetos (usa una cadena generada aleatoriamente)
  • secretKey: requerida para el servicio de almacenamiento de objetos (usa una cadena generada aleatoriamente)
  • jwt_secret: requerida para la API (usa una cadena generada aleatoriamente)

Asegúrate de tener helm instalado y luego configura OpenReplay:

cd openreplay/scripts/helmcharts
helm upgrade --install databases ./databases -n db --create-namespace --wait -f ./vars.yaml --atomic
helm upgrade --install openreplay ./openreplay -n app --create-namespace --wait -f ./vars.yaml --atomic

OpenReplay maneja datos sensibles de los usuarios y, por lo tanto, requiere HTTPS para funcionar. Esto es obligatorio; de lo contrario, el rastreador simplemente no comenzaría a grabar. Lo mismo ocurre con el panel: sin HTTPS no podrás reproducir las sesiones de los usuarios.

Si tu clúster de Kubernetes está en la nube (como EKS, AKS o GKE), entonces la forma más fácil de gestionar SSL es configurar un balanceador de carga en la nube y ejecutar tu clúster detrás de él. Otra opción es generar o usar tu propio certificado SSL y apuntar tu subdominio (es decir, openreplay.mycompany.com) a tu clúster. A continuación encontrarás más información sobre ambas opciones.

Configurar un balanceador de carga en la nube (opción 1)

Section titled Configurar un balanceador de carga en la nube (opción 1)

Uno de los principales beneficios de ejecutar OpenReplay detrás de un balanceador de carga en la nube es que el certificado lo gestiona el proveedor de la nube. A continuación encontrarás guías paso a paso sobre cómo crear:

Luego, asegúrate de que tu clúster aprovisione un tipo de servicio LoadBalancer para que el tráfico del balanceador de carga en la nube pueda dirigirse al backend de OpenReplay. Ahora, ve a tu proveedor de servicios DNS y crea un A Record que apunte al clúster usando su IP pública.

Finalmente, habilita use-forwarded-headers descomentando la siguiente línea bajo la sección ingress-nginx, en /var/lib/openreplay/vars.yaml:

ingress-nginx: &ingress-nginx
  controller:
    config:
      use-forwarded-headers: true

Ya está todo listo, OpenReplay debería estar accesible en tu subdominio. Puedes crear una cuenta visitando la página /signup (es decir, openreplay.mycompany.com/signup).

Aporta/genera tu certificado SSL (opción 2)

Section titled Aporta/genera tu certificado SSL (opción 2)

Como alternativa a crear un balanceador de carga, puedes aportar (o generar) tu propio certificado SSL.

  1. Primero, ve a tu proveedor de servicios DNS y añade un A Record. Usa el dominio que proporcionaste anteriormente durante el paso de instalación y apúntalo al clúster usando su IP pública.

  2. Si vas a aportar tu propio certificado, crea un secreto SSL usando el siguiente comando: kubectl create secret tls openreplay-ssl -n app --key="private_key_file.pem" --cert="certificate.crt".

Nota: Si no tienes un certificado, genera uno, que se renueve automáticamente, para tu subdominio (el que proporcionaste durante la instalación) usando Let’s Encrypt. Simplemente conéctate a la instancia de OpenReplay, ejecuta cd /var/lib/openreplay/openreplay/scripts/helmcharts && bash certmanager.sh y sigue los pasos.

  1. Si deseas habilitar la redirección de http a https (recomendado), entonces descomenta el siguiente bloque, bajo la sección ingress-nginx, en /var/lib/openreplay/vars.yaml:
ingress-nginx: &ingress-nginx
  controller:
    config:
      ssl-redirect: true
      force-ssl-redirect: true

Vale la pena mencionar que nuestro ingress-nginx se ejecuta de forma predeterminada en los puertos 80|443, pero esto se puede cambiar fácilmente, si es necesario, en vars.yaml:

ingress-nginx: &ingress-nginx
  controller:
    service:
      ports:
        http: 80
        https: 443
  1. Finalmente, reinstala el NGINX de OpenReplay:
openreplay -R

Ya está todo listo, OpenReplay debería estar accesible en tu subdominio. Puedes crear una cuenta visitando la página /signup (es decir, openreplay.mycompany.com/signup).

Por favor, háznoslo saber en Slack o con un Github Issue si tienes problemas en tu plataforma. Estaremos encantados de ayudarte a ponerlo en funcionamiento.