OpenKeel: die souveräne französische Cloud-Lösung mit europäischer Reichweite der inherent-Gruppe inherent entdecken

Komponenten · Netzwerk

Neutron

Netze, Subnetze, Ports, Router und Sicherheitsgruppen, in die OVN-Northbound-Datenbank geschrieben; IPv4 und IPv6.

Go OVN und Open vSwitchopenkeel-neutron

Das Modul

OpenKeel implementation in Go of OpenStack neutron (neutron-api), generated from the reverse-specification of branch stable/2026.2 by the generate-go-from-spec skill. Scope: the Neutron core on ML2/OVN — networks, subnets (internal IPAM), ports with ML2 port binding and the binding-extended API used by Nova for live migration, security groups, routers (interfaces, gateway, extra routes) and floating IPs, plus quotas, tags, agents and availability zones read from the OVN Southbound database. Extensions (QoS, trunks, segments API, port forwarding, VPNaaS, BGP…) come later; their collections answer empty lists.

neutron-api also serves the Octavia v2 API (internal/lbaas, under /load-balancer): Python Octavia does not run, and openkeel-ovn-octavia-provider stays a separate service, the only back end. Design, seam and differences: docs/OCTAVIA.md.

The backend is a parallel OVN owned by Neutron (references/backends/neutron-ovn.md, design B): the service writes the OVN Northbound rows exactly as Python's ML2/OVN driver does — same tables, names, external_ids keys and options — because ovn-bgp-agent, ovn-octavia-provider and the OVN metadata agent stay in Python and read them. It turns Logical_Switch_Port.up into port status changes and sends Nova the network-vif-plugged / network-vif-unplugged / network-vif-deleted / network-changed external events.

It replaces the Python service without its clients noticing: same routes, status codes, NeutronError bodies and types, policies. 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
  • Binary: neutron-api (API on port 9696, health and metrics on 9090)
  • Configuration: YAML, see config/config.example.yaml
  • Setting up a development environment, the database and the tests: docs/GETTING-STARTED.md
  • Database schema, migrations and upgrades: docs/DATABASE.md
  • Build plan and operation checklist: docs/PLAN.md

Auszug aus openkeel-neutron/README.md (auf Englisch).

REST-API

368 Operationen der Original-REST-API (Routen und Body-Aktionen) und ihr Status in OpenKeel.

  • 138Implementiert
  • 19Teilweise
  • 211Nicht implementiert

Wie die Kompatibilität getestet wird

Die ML2/OVN-Unit-Test-Austausche von Python-Neutron und die API-Austausche von Octavia werden gegen den Go-Dienst wiedergegeben; Verträge mit Nova und OVN, Nebenläufigkeit auf Galera und eine echte Datenebene werden getestet.

Replay aufgezeichneter Austausche

E2E-Replay der ML2/OVN-Tests

Die aufgezeichneten Austausche der ML2/OVN-Unit-Tests von Python-Neutron liefern vom Go-Dienst denselben Status und Body.

Ausführung

make e2e auf go-mysql-server, E2E_MYSQL_DSN für MariaDB 11.4; E2E_STRICT=1 besteht mit test/e2e/known-differences.txt.

Letztes Ergebnis 2344 / 2728 identisch (86 %, 2026-10-31); 2331 / 2728 auf MariaDB 11.4, mit denselben Dateien.

Quelle: openkeel-neutron/docs/CONFORMANCE.md

Client-Vertrag

Nova-Vertrag

Port-Binding an ein OVN-Chassis, Port-Status, network-vif-plugged und weitere Ereignisse sowie die Binding-API für die Live-Migration verhalten sich so, wie Nova es erwartet.

Ausführung

TestNovaBootFlow in internal/app; Client-Fehlertypen in TestErrorTypes.

Letztes Ergebnis Bestanden.

Quelle: openkeel-neutron/docs/CONFORMANCE.md

Nebenläufigkeit auf Galera

Nebenläufigkeit auf MariaDB Galera

Die Vergabe von VNIs und IPs bleibt eindeutig, wenn Netze und Ports gleichzeitig über drei Galera-Knoten erstellt werden.

Ausführung

make galera-test auf einem Cluster mit 3 Knoten.

Letztes Ergebnis Bestanden: 20 Netze für 10 VNIs ergeben 10 erstellte mit unterschiedlichen VNIs; keine doppelte Adresse; kein 5xx; jeder Knoten liest dieselben Allokationen.

Quelle: openkeel-neutron/docs/CONFORMANCE.md

End-to-End in einem Lab

Datenebene mit echten Gästen

Router, SNAT, Floating IPs und Lastverteilung funktionieren für echte Gäste auf OVN, mit Projektisolation.

Ausführung

openkeel-lab/scripts/dataplane-test.sh (78 Prüfungen) nach einem Kaltstart mit make lab-up PROFILE=dataplane.

Letztes Ergebnis Bestanden (2026-11-01).

Quelle: openkeel-neutron/docs/CONFORMANCE.md

Replay aufgezeichneter Austausche

Octavia-API-Replay

Die von neutron-api bereitgestellte Octavia-v2-API beantwortet die aufgezeichneten Python-Octavia-Austausche identisch, einschließlich der Provider-Aufrufe.

Ausführung

make e2e-lbaas auf einem MariaDB-Galera-Knoten; E2E_STRICT=1 schlägt bei jedem unerklärten Unterschied fehl.

Letztes Ergebnis 8 598 / 8 691 identisch; Provider-Aufrufe 3 826 / 3 831. Pythons eigenes Replay erreicht 8 683 / 8 691.

Quelle: openkeel-neutron/docs/CONFORMANCE.md

Tempest

Tempest und neutron-tempest-plugin

Die Upstream-API-Tests von Neutron gegen den bereitgestellten Dienst.

Ausführung

Noch nicht auf die Datenebene des Labs ausgerichtet.

Letztes Ergebnis Nicht ausgeführt.

Quelle: openkeel-neutron/docs/CONFORMANCE.md

Im Rewrite ausgelassen

Neutron behält seine Kern-API auf ML2/OVN und stellt zusätzlich die Octavia-API bereit; damit entfallen Nicht-OVN-Agenten, der separate Octavia-Dienst mit seinen Amphorae und ungenutzte Benachrichtigungen.

Von der Cloud-Native-Plattform übernommen

Nicht-OVN-Mechanism-Treiber und Agenten pro Host

Übernommen von OVN

Warum es ausgelassen wurde

OVN übernimmt Routing, DHCP, Sicherheitsgruppen und NAT selbst; der ML2-Mechanism-Treiber ist fest auf OVN gesetzt, sodass L3-, DHCP-, OVS- und Linux-Bridge-Agenten und ihre privsep-Helfer nicht benötigt werden.

Warum die Lösung nicht beeinträchtigt ist

Die Agents-API listet nur OVN-Southbound-Chassis auf; PUT und DELETE auf Agents werden ohne Wirkung bestätigt. Netzwerke, Router und Floating IPs funktionieren wie bei ML2/OVN.

Quelle: openkeel-neutron/docs/CONFORMANCE.md

Von der Cloud-Native-Plattform übernommen

Octavia-Dienst, amphora-Treiber und housekeeping

Übernommen von OVN-Load-Balancer

Warum es ausgelassen wurde

Die Octavia-v2-API läuft im neutron-api-Binary mit dem OVN-Provider; es gibt keine amphora-VMs, und purge ist ein idempotenter periodischer Task in jeder Replik.

Warum die Lösung nicht beeinträchtigt ist

openstacksdk, der openstack-Client und octavia-tempest-plugin laufen mit dem OVN-Provider erfolgreich durch. Amphora-Routen antworten wie eine leere Tabelle.

Quelle: openkeel-neutron/docs/CONFORMANCE.md

Vereinfachte interne Mechanik

Octavia-TLS-Terminierung über Barbican

Warum es ausgelassen wurde

Der OVN-Provider weist TLS-Listener ohnehin ab, daher ist in dieser Version kein Zertifikatsmanager angebunden.

Warum die Lösung nicht beeinträchtigt ist

Anfragen für TLS-Listener werden validiert und dann vom Provider mit 501 beantwortet. TCP- und UDP-Load-Balancing sind nicht betroffen; TLS kann in den Backends terminieren.

Quelle: openkeel-neutron/docs/CONFORMANCE.md

Vereinfachte interne Mechanik

AMQP-Ressourcenbenachrichtigungen

Warum es ausgelassen wurde

Der Kern von OpenKeel hat keinen Konsumenten für network.create.end und ähnliche Ereignisse, etwa Ceilometer.

Warum die Lösung nicht beeinträchtigt ist

Ressourcen verhalten sich gleich; Konsumenten dieser Ereignisse erhalten nichts von Neutron. Jeder API-Aufruf wird weiterhin im CADF-Audit-Trail erfasst.

Quelle: openkeel-neutron/docs/CONFORMANCE.md

Hier ist nur aufgeführt, was bewusst ausgelassen wurde; noch nicht erledigte Arbeit steht in den Known gaps der docs/CONFORMANCE.md des Moduls. Alle Module

Neutron-Interaktionen

Dienstansicht, vom Diagramm-Skill aus dem OpenKeel-Modell generiert.

Diagramm openkeel-neutron.svg Vollbild
Die 17 Interaktionen des Modells
VonNachProtokollWas
SkylineNeutron serverREST-APIextensions, ports, FWaaS, VPN, load balancers
Nova APINeutron serverREST-APIports
Neutron serverNova APIREST-APInetwork-vif-plugged
Neutron serverNeutron reconcilerSQL (MariaDB Galera)reconciled from DB
Neutron reconcilerKube-OVNKubernetes-APIVpc, Subnet, IP, SecurityGroup, OvnFip
Ironic conductorNeutron serverREST-APIprovisioning/tenant ports
Heat engineNeutron serverREST-APIOS::Neutron::*
EC2 APINeutron serverREST-APIVPC, subnets, security groups
Neutron serverOVN Northbound DBOVSDBNB writes: switches, ports, routers, ACLs, NAT, DHCP; LSP.up monitor
Neutron serverOVN Southbound DBOVSDBSB reads: Chassis, Chassis_Private (liveness, binding)
Neutron reconcilerOVN Northbound DBOVSDBrepairs drift (maintenance loop)
Neutron serverNeutron FWaaSREST-APIproxy /v2.0/fwaas/*, same token
Neutron serverNeutron VPNaaSREST-APIproxy /v2.0/vpn/*, vpn-agents, same token
Neutron VPNaaSNeutron serverREST-APIcore and L3 calls: gateway ports, routes
Neutron serverOVN Octavia providerREST-APIOctavia driver API (:9877)
OVN Octavia providerNeutron serverREST-API/internal/lbaas status updates, ports, subnets
Zun computeNeutron serverREST-APIports bound to host (compute:zun)

Spezifikationen