Plane es un sistema distribuido diseñado para ejecutar servicios WebSocket a gran escala. Proporciona un servidor proxy con capacidades de enrutamiento dinámico y soporte para terminación TLS, lo que permite manejar conexiones seguras de manera eficiente. Este artículo describe cómo configurar y optimizar el componente proxy de Plane.
Funcionalidades principales del proxy
El proxy de Plane actúa como punto de entrada para las conexiones WebSocket. Sus responsabilidades clave incluyen:
- Enrutamiento basado en tokens: Las solicitudes se dirigen a servicios backend según un token Bearer proporcionado.
- Terminación TLS: El proxy puede delegar la gestión de conexiones cifradas a una capa externa, manteniendo la flexibilidad en la configuración de seguridad.
- Gestión de conexiones: Supervisa el estado de las conexiones entre clientes y backends.
Implementación del enrutamiento
La lógica de enrutamiento se basa en una estructura de caché LRU para optimizar el rendimiento. El archivo principla es src/proxy/route_map.rs.
Proceso de resolución de rutas
Al recibir una solicitud, el proxy:
- Extrae el token Bearer de los encabezados.
- Busca en la caché local la información de enrutamiento asociada.
- Si no está en caché, consulta al servicio de control y almacena el resultado.
Personalización de parámetros
Se puede ajustar el tamaño de la caché mediante variables de entorno o argumentos al iniciar el proxy. Por ejemplo, para aumentar la capacidad a 3000 entradas:
export PLANE_ROUTE_CACHE_CAPACITY=3000
./scripts/start_proxy.sh
Configuración de terminación TLS
Plane no implementa TLS directamente. En su lugar, se recomienda colocar un proxy inverso como Nginx delante del servicio para manejar el cifrado.
Ejemplo con Nginx
La siguiente configuración establece Nginx como terminador TLS, redirigiendo el tráfico descifrado al proxy de Plane:
upstream plane_backend {
server 127.0.0.1:8080;
}
server {
listen 443 ssl;
server_name ws.ejemplo.com;
ssl_certificate /etc/ssl/certs/certificado.crt;
ssl_certificate_key /etc/ssl/private/clave.key;
location / {
proxy_pass http://plane_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
Pasos para desplegar el proxy
1. Obtener el código fuente
Clona el repositorio e ingresa al directorio:
git clone https://github.com/plane-dev/plane.git
cd plane
2. Compilar el proyecto
Utiliza Cargo para generar los binarios:
cargo build --release --bin plane-proxy
3. Ejecutar el servicio
Inicia el proxy con los parámetros necesarios:
./target/release/plane-proxy --bind 0.0.0.0:8080
Optimización avanzada
Ajuste de timeouts
Modifica los tiempos de espera para conexiones inactivas en el archivo de configuración:
# configuracion_proxy.toml
[connection]
idle_timeout_secs = 300
handshake_timeout_secs = 10
Monitoreo de salud
Integra un endpoint de métricas para observar el estado del proxy:
./target/release/plane-proxy --metrics-port 9090
Solución de problemas comunes
Fallos en el enrutamiento
Si las solicitudes no llegan al backend correcto:
- Verifica que el token Bearer se envía correctamente en la cabecera de autorización.
- Revisa los logs del controlador para errores en el registro de rutas.
- Aumenta el nivel de log a
debugpara ver detalles del proceso de búsqueda.
Errores de conexión
Problemas al establecer conexiones WebSocket pueden deberse a:
- Configuración incorrecta de headers
UpgradeyConnectionen el proxy inverso. - Firewalls bloqueando el puerto de comunicación entre componentes.
- Backends no disponibles o sobrecargados.
Documentación y recursos
Para información detallada sobre la arquitectura y APIs, consulta:
- Documentación de conceptos:
docs/arquitectura.md - Referencia de la API de configuración:
docs/api-config.md - Ejemplos de integración:
examples/