La API Octavia v2 servida por neutron-api; load balancers de OVN, activados por defecto.
Go Load balancers de OVNopenkeel-ovn-octavia-provider
El módulo
OpenKeel implementation in Go of OpenStack ovn-octavia-provider, generated from the reverse-specification of branch stable/2026.2 by the generate-go-from-spec skill. It is the OVN load-balancing back end of OpenKeel's Octavia API: each load balancer becomes rows of the OVN Northbound Load_Balancer table, with the same keys and statuses as the Python provider, so that clients, Neutron and existing OVN databases see no difference. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md.
okadm install deploys it by default. The public Octavia v2 API lives in the neutron-api binary of openkeel-neutron, under /load-balancer, and Neutron is the only caller of the driver API. The provider sends status updates and reads objects back over HTTP, to Neutron's admin port. See docs/DEPLOYMENT.md.
The Python shim and the octavia-driver-agent sidecar (off by default) stay in this project only to take over from a Python Octavia; they are not part of OpenKeel's normal path.
Go module: github.com/openkeel/openkeel-ovn-octavia-provider
Binaries: ovn-octavia-provider (driver API on port 9877, health and metrics on 9090) and octavia-ovn-db-sync-util
Python shim, to take over from a Python Octavia: shim/, entry point octavia.api.drivers = ovn
Configuration: YAML, see config/config.example.yaml
State: none of its own, the OVN NB database is the database, so there are no migrations
Development environment and tests: docs/GETTING-STARTED.md
Extracto de openkeel-ovn-octavia-provider/README.md (en inglés).
API REST
297 operaciones de la API REST original (rutas y acciones de cuerpo) y su estado en OpenKeel. Servido por neutron-api (openkeel-neutron, internal/lbaas).
El provider en Go se ejecuta paso a paso junto al provider real de Python sobre el mismo OVN, y luego se verifica con octavia-tempest-plugin y tráfico real en el laboratorio.
Test diferencial
Comparación diferencial con el provider de Python
Los mismos 35 pasos producen las mismas filas OVN y actualizaciones de estado desde los providers de Python y Go sobre un OVN real.
Ejecución
test/ovn/differential/record.py ejecuta el driver de Python; TestDifferential reproduce los mismos pasos en Go y compara.
Último resultado 35 / 35 pasos idénticos, salvo una diferencia deliberada en el estado del health monitor (2026-10-31).
Los flujos y las filas Service_Monitor producidos por ovn-northd, los eventos de monitor, el bloqueo y la sincronización se comportan según lo esperado.
Los tests de API y de escenario de Octavia upstream, con los ajustes del job OVN upstream, se superan a través de la API en neutron-api.
Ejecución
octavia-tempest-plugin con provider=ovn en el perfil de laboratorio dataplane, tokens reales de Keystone.
Último resultado API 82 superados, 0 fallidos; escenario 22 superados, 0 fallidos (2026-11-01). Tests de tráfico (56) no ejecutados.
Fuente: openkeel-neutron/docs/CONFORMANCE.md
De extremo a extremo en un laboratorio
Tráfico real con instancias reales
VIP accesibles desde otra subred y a través de una IP flotante, miembros con IP flotantes, comprobaciones de salud de OVN que retiran una instancia detenida.
Ejecución
openkeel-lab/scripts/dataplane-test.sh (78 comprobaciones) con el Neutron en Go.
El provider OVN pasa a ser un servicio Go al que la API de Octavia en neutron-api llama por HTTP, sin carga de drivers Python, sin driver agent ni plugin de sincronización de Neutron.
Mecánica interna simplificada
Carga de providers Python y driver agent
Por qué se excluyó
neutron-api es el único llamante: llama al driver por HTTP y recibe los mensajes de estado en su puerto de administración en lugar de en los sockets Unix del driver agent.
Por qué la solución no se ve afectada
Los load balancers alcanzan ACTIVE a través de la API pública de Octavia. Un pequeño shim de Python existe solo para tomar el relevo de un Octavia en Python.
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 Octavia (OVN)
Vista de servicio generada por la skill de diagramas a partir del modelo de OpenKeel.