OpenKeel : la solution Cloud souveraine, française à portée européenne du groupe inherent Découvrir inherent

Composants · Réseau

Octavia (OVN)

API Octavia v2 servie par neutron-api ; load balancers OVN, actifs par défaut.

Go Load balancers OVNopenkeel-ovn-octavia-provider

Le module

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.

client ──/load-balancer/v2/lbaas──> neutron-api ──HTTP, bearer token──> ovn-octavia-provider ──OVSDB──> OVN NB, SB
                                        ^                                    │  │  └──REST──> Neutron, Keystone
                                        └──/internal/lbaas :9878, token──────┘  │
                                                                                └────events, maintenance (OVSDB lock neutron_ovn_octavia_event_lock)

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

Extrait de openkeel-ovn-octavia-provider/README.md (en anglais).

API REST

297 opérations de l'API REST d'origine (routes et actions de corps), et leur état dans OpenKeel. Servi par neutron-api (openkeel-neutron, internal/lbaas).

  • 297Implémenté

Comment la compatibilité est testée

Le provider Go est exécuté étape par étape à côté du vrai provider Python sur le même OVN, puis vérifié avec octavia-tempest-plugin et du vrai trafic sur le lab.

Test différentiel

Comparaison différentielle avec le provider Python

Les mêmes 35 étapes produisent les mêmes lignes OVN et mises à jour de statut depuis les providers Python et Go sur un vrai OVN.

Exécution

test/ovn/differential/record.py exécute le pilote Python ; TestDifferential joue les mêmes étapes sur Go et compare.

Dernier résultat 35 / 35 étapes identiques, hormis une différence volontaire de statut du health monitor (2026-10-31).

Source : openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Tests unitaires et golden tests

Tests unitaires et vecteurs

Vecteurs de découpage VIP, messages de refus avec texte et statut exacts, et logique du pilote correspondent au provider Python.

Exécution

go test ./... sur un Northbound en mémoire avec le vrai schéma, également sous -race.

Dernier résultat 96 réussis, 0 échec (2026-11-01) ; vecteurs vips 57 / 57.

Source : openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Tests unitaires et golden tests

Vrai OVN

Les flux et les lignes Service_Monitor produits par ovn-northd, les événements de monitor, le verrou et la synchronisation se comportent comme attendu.

Exécution

make ovn-test contre OVN 25.03 (schéma 7.11.0).

Dernier résultat 6 réussis.

Source : openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Tempest

octavia-tempest-plugin, provider ovn

Les tests d'API et de scénario Octavia amont, avec les paramètres du job OVN amont, réussissent via l'API dans neutron-api.

Exécution

octavia-tempest-plugin avec provider=ovn sur le profil de lab dataplane, vrais jetons Keystone.

Dernier résultat API 82 réussis, 0 échec ; scénario 22 réussis, 0 échec (2026-11-01). Tests de trafic (56) non exécutés.

Source : openkeel-neutron/docs/CONFORMANCE.md

De bout en bout sur un lab

Vrai trafic avec de vrais invités

VIP joignables depuis un autre sous-réseau et via une IP flottante, membres avec IP flottantes, contrôles de santé OVN retirant un invité arrêté.

Exécution

openkeel-lab/scripts/dataplane-test.sh (78 vérifications) avec le Neutron Go.

Dernier résultat Réussi (2026-11-01).

Source : openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Contrat client

Shim dans un vrai octavia-api

Le chemin de reprise : le provider Go derrière un vrai octavia-api Python et un driver agent.

Exécution

Le découpage du socket n'est testé que contre un substitut.

Dernier résultat Non exécuté.

Source : openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Écarté de la réécriture

Le provider OVN devient un service Go appelé en HTTP par l'API Octavia dans neutron-api, sans chargement de driver Python, sans driver agent ni plugin de synchronisation Neutron.

Mécanique interne simplifiée

Chargement de providers Python et driver agent

Pourquoi c'est écarté

neutron-api est le seul appelant : il appelle le driver en HTTP et reçoit les messages d'état sur son port d'administration au lieu des sockets Unix du driver agent.

Pourquoi la solution n'est pas affectée

Les load balancers atteignent ACTIVE via l'API Octavia publique. Un petit shim Python n'existe que pour prendre le relais d'un Octavia Python.

Source : openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Mécanique interne simplifiée

Plugin Octavia de neutron-ovn-db-sync-util

Pourquoi c'est écarté

Le plugin appartient à l'outil Neutron Python, qu'OpenKeel ne livre pas.

Pourquoi la solution n'est pas affectée

octavia-ovn-db-sync-util couvre la réparation des lignes de load balancer OVN.

Source : openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Obsolète ou inutilisé en amont

Options d'endpoint keystoneauth dépréciées

Pourquoi c'est écarté

endpoint, endpoint_type et ca_certificates_file sont dépréciés en amont ; service_auth avec des fichiers de secrets les remplace.

Pourquoi la solution n'est pas affectée

Configuration uniquement ; le provider atteint Neutron de la même façon.

Source : openkeel-ovn-octavia-provider/docs/CONFORMANCE.md

Seul ce qui a été écarté par choix de conception figure ici ; le travail pas encore fait se trouve dans les Known gaps du docs/CONFORMANCE.md du module. Tous les modules

Interactions de Octavia (OVN)

Vue « service » générée par la skill diagramme depuis le modèle d'OpenKeel.

Diagramme openkeel-ovn-octavia-provider.svg Plein écran
Les 5 interactions du modèle
DeVersProtocoleQuoi
Neutron serverOVN Octavia providerAPI RESTOctavia driver API (:9877)
OVN Octavia providerNeutron serverAPI REST/internal/lbaas status updates, ports, subnets
OVN Octavia providerKeystoneAPI RESTservice token
OVN Octavia providerOVN Northbound DBOVSDBLoad_Balancer rows; events, maintenance (OVSDB lock)
OVN Octavia providerOVN Southbound DBOVSDBreads chassis, port bindings

Spécifications