OpenKeel: la solución Cloud soberana, francesa y de alcance europeo, del grupo inherent Descubrir inherent

Componentes · Redes

Neutron-VPNaaS

VPN IPsec site-to-site: IKE, políticas IPsec, conexiones.

Go Agente IPsecopenkeel-neutron-vpnaas

El módulo

OpenKeel implementation in Go of OpenStack neutron-vpnaas on the OVN path, generated from the reverse-specification of branch stable/2026.2 by the generate-go-from-spec skill. neutron-vpnaas-api serves the VPN API (/v2.0/vpn and the agent scheduler) and replaces the ovn-vpnaas service plugin and its driver: same routes, status codes, error bodies and policies, same tables. neutron-vpnaas-agent replaces neutron-ovn-vpn-agent: it runs strongSwan, the original's daemon, in one qvpn-<router> namespace per router. It runs beside openkeel-neutron, on its database and its OVN; clients reach it through a proxy in openkeel-neutron: see docs/NEUTRON-INTEGRATION.md. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md.

  • Go module: github.com/openkeel/openkeel-neutron-vpnaas
  • Binaries: neutron-vpnaas-api (API on port 9696, agent API on 9697, health and metrics on 9090), neutron-vpnaas-agent (health on 9091; needs Linux, root and strongSwan: Dockerfile.agent)
  • Configuration: YAML, see config/config.example.yaml and config/agent.example.yaml
  • Setting up a development environment, the database and the tests: docs/GETTING-STARTED.md
  • Database schema, migrations and upgrades: docs/DATABASE.md

Extracto de openkeel-neutron-vpnaas/README.md (en inglés).

API REST

35 operaciones de la API REST original (rutas y acciones de cuerpo) y su estado en OpenKeel.

  • 35Implementado

Cómo se prueba la compatibilidad

Los intercambios grabados del perfil OVN se reproducen contra el servicio Go, la generación de configuración se compara con las plantillas originales y se establecen túneles IPsec reales de extremo a extremo.

Replay de los intercambios grabados

Replay E2E del perfil OVN

Los intercambios VPNaaS grabados que sirve este servicio dan las mismas respuestas; los que sirve Neutron se verifican en la pila real.

Ejecución

make e2e-strict, en go-mysql-server y en MariaDB 11.4.

Último resultado 84 reproducidos, 84 superados (2026-10-31); 25 de los 108 intercambios grabados corresponden a Neutron o ya no aplican.

Fuente: openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Tests unitarios y golden tests

Vectores de generación de configuración

La configuración de strongSwan coincide con las plantillas jinja2 originales para cada grupo y algoritmo de la API.

Ejecución

tools/gen_render_vectors.py, 50 vectores a partir de las plantillas originales.

Último resultado 50 / 50, salvo líneas en blanco (2026-10-31).

Fuente: openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Escenario

Túnel IPsec real

IKEv1 e IKEv2 con AES-GCM, ping a través de ESP, admin down y up, demonio terminado y reiniciado, eliminación.

Ejecución

make tunnel-test: strongSwan 5.9.13 en ambos extremos, XFRM real del kernel.

Último resultado Superado, 2 ejecuciones sobre el código final (2026-10-31).

Fuente: openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Escenario

Pila completa con Neutron y OVN

A través del proxy de Neutron, un puerto de tenant hace ping a una subred situada detrás de un par strongSwan, pasando por el router OVN y el túnel.

Ejecución

make stack-test: openkeel-neutron, ovsdb-server, ovn-northd, ovn-controller, OVS, MariaDB, la imagen del agente.

Último resultado Superado, 2 ejecuciones sobre el código final (2026-10-31).

Fuente: openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Concurrencia en Galera

Concurrencia en MariaDB Galera

Las operaciones VPN se mantienen coherentes cuando las peticiones llegan a través de tres nodos Galera.

Ejecución

make galera-test en un clúster de 3 nodos.

Último resultado 3 tests superados, 5 ejecuciones de 5 (2026-10-31).

Fuente: openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Tempest

neutron-tempest-plugin vpnaas

Los tests de API y de escenario VPNaaS upstream.

Ejecución

Requiere una nube desplegada.

Último resultado No ejecutado.

Fuente: openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Excluido del rewrite

VPNaaS conserva su API con un único driver strongSwan sobre OVN, sin Libreswan, la antigua ruta L3, rootwrap ni RabbitMQ.

Obsoleto o sin uso en upstream

Driver Libreswan y antigua ruta del agente L3

Por qué se excluyó

No son objetivos del rewrite; se incluye un único driver, strongSwan en un namespace por router en el chassis OVN.

Por qué la solución no se ve afectada

Las conexiones IPsec entre sitios se crean con la misma API; los despliegues que dependían de un comportamiento específico de Libreswan no lo obtienen.

Fuente: openkeel-neutron-vpnaas/config/dropped-options.md

Mecánica interna simplificada

RPC de RabbitMQ y notificaciones de agentes

Por qué se excluyó

El agente consulta cada 5 segundos una API de agentes con ETag en lugar de topics RPC; ningún servicio de OpenKeel consumía las notificaciones vpn_agent.

Por qué la solución no se ve afectada

No puede perderse ninguna actualización, a costa de un retraso de hasta 5 s. Las notificaciones pasan a ser líneas de log.

Fuente: openkeel-neutron-vpnaas/docs/CONFORMANCE.md

Mecánica interna simplificada

rootwrap y drivers de interfaz

Asumido por Kubernetes DaemonSet

Por qué se excluyó

El agente controla OVS por sí mismo y se ejecuta en su contenedor con los privilegios que necesita.

Por qué la solución no se ve afectada

Mismos namespaces, puertos y comandos de strongSwan en el nodo; ningún filtro rootwrap que mantener.

Fuente: openkeel-neutron-vpnaas/config/dropped-options.md

Aquí solo figura lo que se excluyó por diseño; el trabajo aún no realizado está en los Known gaps del docs/CONFORMANCE.md del módulo. Todos los módulos

Interacciones Neutron-VPNaaS

Vista de servicio generada por la skill de diagramas a partir del modelo de OpenKeel.

Diagrama openkeel-neutron-vpnaas.svg Pantalla completa
Las 5 interacciones del modelo
DeAProtocoloQué
Neutron serverNeutron VPNaaSAPI RESTproxy /v2.0/vpn/*, vpn-agents, same token
Neutron VPNaaSNeutron serverAPI RESTcore and L3 calls: gateway ports, routes
Neutron VPNaaSOVN Southbound DBOVSDBlists VPN agents (Chassis_Private)
VPNaaS agentNeutron VPNaaSAPI RESTagent API :9697: services (ETag poll), status
VPNaaS agentOVN Southbound DBOVSDBregisters ovn-vpnagent, acks nb_cfg

Especificaciones