Saltar al contenido
Prime Telecom · Kubernetes Engine

PTKE — Prime Telecom Kubernetes Engine

Una plataforma multi-inquilino de autoservicio para provisionar y operar clústeres Kubernetes de producción en la nube OpenStack soberana de Prime Telecom.

Año 2024–2025
Estado En producción · producción

Un vistazo al producto.

Las nubes públicas entregan «Kubernetes gestionado» detrás de un solo botón. Prime Telecom necesitaba esa misma experiencia, pero sobre su propia infraestructura OpenStack — donde la soberanía, la residencia de datos y la economía de red local importan más que cualquier funcionalidad marginal de AWS o GCP.

PTKE es el plano de control que lo hace posible: una aplicación Laravel + Vue que permite a los inquilinos provisionar, escalar, actualizar, respaldar y operar clústeres Kubernetes de producción sobre RKE2 gestionado por Rancher, compute/networking/storage OpenStack y recuperación ante desastres respaldada por Velero. Cada operación de plataforma que antes vivía en una cola de tickets — clústeres, node pools, floating IPs, volúmenes block, object storage, add-ons, backups — es ahora una acción de autoservicio sobre una API REST y una interfaz Vue 3.

Desafio

Ejecutar OpenStack significa ejecutar Keystone, Nova, Neutron, Cinder, Swift y Octavia — cada uno con su propia superficie de API, modelo de autenticación y modos de fallo. Ejecutar Kubernetes encima significa apilar Rancher, RKE2, CAPI, Helm, ficheros kubeconfig y DaemonSets. Dar a los inquilinos una UI de autoservicio limpia sobre todo eso — sin dejar escapar la fontanería de bajo nivel ni romper la seguridad operativa — es la mayor parte del trabajo.

Y todo tiene que ser estrictamente multi-inquilino. Cuotas por inquilino, proyectos OpenStack separados, rastros de auditoría en cada acción mutante, claves SSH distribuidas solo a los nodos correctos, descargas de kubeconfig que no se pueden abusar. Un solo clúster filtrado o una sola acción entre inquilinos acabaría con la credibilidad de la plataforma para todos los demás.

Enfoque

Laravel 12 + Inertia v2 + Vue 3 + Tailwind CSS v4 ofrece a los operadores una experiencia rápida y tipada sin un pipeline de frontend separado. Wayfinder genera clientes tipados de rutas y acciones, de modo que cada página Vue habla con el backend a través de contratos verificados. Fortify maneja sesiones, 2FA y verificación de correo; Sanctum emite tokens de API para el provider de Terraform y los consumidores de automatización.

El backend está estructurado como Controllers → Form Requests → Services → Jobs. El trabajo de más de unos segundos siempre va por la cola. Once wrappers de servicios OpenStack se sitúan delante de Keystone, Nova, Neutron, Cinder, Swift y Octavia; una capa de wrappers separada habla con Rancher (v1, v3 y CAPI) para el ciclo de vida del clúster. Veintiocho jobs en cola orquestan el provisioning, los cambios de node pool, los backups, los health checks, el registro de uso y la distribución de claves SSH. Horizon los supervisa; Reverb transmite actualizaciones WebSocket de vuelta al navegador del operador para que los cambios de estado se sientan inmediatos.

La multi-inquilinidad se aplica de extremo a extremo: cada acción mutante pasa por una Policy con comprobación de inquilino más un permiso Spatie, las cuotas se aplican en cada asignación de recursos y el rate limiting funciona por usuario y por inquilino. Las descargas de kubeconfig se auditan y limitan. Las claves SSH privadas nunca tocan la plataforma — un DaemonSet intra-clúster (ptke-ssh-sync) distribuye solo claves públicas a Kubernetes Secrets dentro del propio clúster de cada inquilino.

La experiencia de un solo clic de EKS, GKE o AKS — pero sobre infraestructura rumana soberana, operada localmente.

Capacidades clave entregadas.

  • Ciclo de vida completo en autoservicio de clústeres RKE2 — provisioning, escalado, actualización y clonado desde plantillas, con políticas de drain y opciones de control plane HA
  • Gestión de node pools con labels, taints, flavors, volúmenes extra y soporte del cluster-autoscaler
  • Networking OpenStack: exploración de subnets, asignación de floating IPs y visibilidad de los load balancers Octavia
  • Volúmenes block Cinder con redimensionado en línea, object storage Swift con credenciales compatibles con EC2 y backup/restore de clúster basado en Velero
  • Catálogo curado de add-ons (ingress, monitoring, logging, cert-manager, external-dns…) con instalación Helm de un clic por clúster
  • Cuotas multi-inquilino, RBAC Spatie, 2FA Fortify y rate limiting por usuario / por inquilino
  • Distribución de claves SSH públicas a cada nodo del inquilino mediante un DaemonSet intra-clúster — las claves privadas nunca tocan la plataforma
  • Log de auditoría Spatie completo, descargas de kubeconfig con rate limiting y un provider Terraform experimental para infrastructure-as-code

Resultados concretos, medidos en producción.

Páginas Vue
214
Pantallas de operador para cada primitiva OpenStack y Rancher
Controladores
43
Cubriendo clústeres, networking, storage y administración
Jobs en cola
28
Orquestación asíncrona de provisioning, escalado, backups y health checks
Servicios OpenStack
11
Wrappers para Keystone, Nova, Neutron, Cinder, Swift, Octavia y más

PTKE está en producción, entregando Kubernetes gestionado sobre infraestructura rumana soberana. Operaciones que antes requerían un ingeniero de plataforma en una cola de tickets — provisioning de clústeres, actualizaciones, attach/detach de volúmenes, instalación de add-ons, backup/restore — son ahora acciones de autoservicio de dos clics con pistas de auditoría completas y una API REST tipada. Un provider Terraform beta extiende el mismo contrato a los flujos de infrastructure-as-code.

Tecnologías utilizadas, agrupadas por rol.

Backend
Laravel 12 PHP 8.3+ PostgreSQL Redis Horizon Reverb Fortify Sanctum Spatie Permission
Frontend
Vue 3 Inertia.js v2 TypeScript Tailwind CSS 4 Wayfinder
Infraestructura
OpenStack (Keystone, Nova, Neutron, Cinder, Swift, Octavia) Rancher RKE2 CAPI Helm Velero
Ops e IaC
Terraform Provider Forgejo Actions Pest v4 Playwright Laravel Pint ESLint