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

Composants · Réseau

OVN-BGP-Agent

Annonce en BGP les IP de VMs et les IP flottantes joignables par le nœud.

Go FRR et OVNopenkeel-ovn-bgp-agent

Le module

OpenKeel's Go implementation of OpenStack ovn-bgp-agent (stable/2026.2, f770768b41dc), written from the reverse-spec reverse-spec-ovn-bgp-agent/.

The agent runs on every node whose FRR peers with the BGP fabric. It watches the OVN Northbound database (read-only) and, for every IP reachable through this node, it does two things:

  • it wires the kernel and OVS so that traffic reaches OVN: ip rule and route in a per-bridge routing table, permanent neighbour, NDP proxy, and the MAC-tweak flow (cookie 999);
  • it announces the IP by adding it to the dummy bgp-nic in VRF bgp-vrf, which the local FRR redistributes.

The IPs it covers are provider-network VM IPs, floating IPs (distributed and centralized, switched at run time by NB_Global external_ids:neutron:fip-distributed), router gateways, tenant subnets (host or subnet advertisement, SNAT filter, address scopes, GUA-only), OVN load-balancer VIPs and VIP-FIPs, and port-forwarding FIPs.

Modulegithub.com/openkeel/openkeel-ovn-bgp-agent
Executableovn-bgp-agent (cmd/ovn-bgp-agent)
Driver / exposing methodnb_ovn_bgp_driver / underlay (the others are refused at start: docs/CONFORMANCE.md)
APInone; :9750 serves /healthz, /readyz, /metrics
Statenone (derived from OVN and the node); /etc/iproute2/rt_tables keeps the table numbers
DeliveryDaemonSet, host network, NET_ADMIN SYS_ADMIN DAC_OVERRIDE (docs/SECURITY.md)

Extrait de openkeel-ovn-bgp-agent/README.md (en anglais).

Comment la compatibilité est testée

L'agent n'a pas d'API REST ; la compatibilité est donc vérifiée par des vecteurs de correspondance d'événements et des scénarios d'effets de bord sur le nœud enregistrés depuis l'agent Python, ainsi que sur un vrai noyau.

Tests unitaires et golden tests

Vecteurs de correspondance d'événements

Les filtres d'événements Northbound correspondent exactement aux changements de lignes OVN auxquels réagit l'agent Python.

Exécution

make test-vectors sur cases-event-match_stable-2026.2.json, sémantique de Mock Python reproduite.

Dernier résultat 122 / 122 dans le périmètre (cas SB et EVPN hors périmètre) ; 20 / 20 cas écrits à la main pour les filtres sans vecteurs.

Source : openkeel-ovn-bgp-agent/docs/CONFORMANCE.md

Scénario

Scénarios d'effets de bord

Adresses, liens, voisins, routes, règles, flux et texte FRR laissés sur le nœud correspondent à l'état final Python enregistré.

Exécution

internal/reconcile/scenarios_test.go sur side-effects_stable-2026.2.json, make test-vectors.

Dernier résultat 10 / 10 dans le périmètre ; 1 hors périmètre (SB EVPN). Trois défauts Python volontairement non reproduits.

Source : openkeel-ovn-bgp-agent/docs/CONFORMANCE.md

Tests unitaires et golden tests

Reprise d'un nœud configuré par Python

Les règles d'ordre, les résidus et l'idempotence tiennent, et l'agent reprend un nœud configuré par l'agent Python.

Exécution

internal/reconcile/reconcile_test.go.

Dernier résultat Réussi.

Source : openkeel-ovn-bgp-agent/docs/CONFORMANCE.md

Tests unitaires et golden tests

Vrai câblage noyau

Câblage, idempotence et retrait via rtnetlink sur un vrai noyau (OVS et FRR simulés).

Exécution

make test-linux dans un namespace réseau jetable.

Dernier résultat Réussi.

Source : openkeel-ovn-bgp-agent/docs/CONFORMANCE.md

Écarté de la réécriture

L'agent BGP implémente le driver Northbound avec exposition underlay uniquement, en un seul processus de réconciliation, et refuse les modes Southbound, EVPN et L2 étendu.

Mécanique interne simplifiée

Drivers Southbound, EVPN et L2 étendu

Pourquoi c'est écarté

Périmètre de la réécriture : uniquement nb_ovn_bgp_driver avec exposition underlay, dont le Neutron d'OpenKeel écrit les clés.

Pourquoi la solution n'est pas affectée

Les IP de provider, IP flottantes, passerelles de routeur, sous-réseaux de tenant et VIP de load balancer sont annoncés. EVPN (vrf) et le L2 étendu sont refusés au démarrage.

Source : openkeel-ovn-bgp-agent/docs/CONFORMANCE.md

Obsolète ou inutilisé en amont

Méthodes d'exposition l2vni et dynamiques

Pourquoi c'est écarté

L'agent Python n'a pas non plus de câblage pour eux.

Pourquoi la solution n'est pas affectée

Aucun en pratique : ils ne fonctionnaient pas en amont ; ils sont désormais refusés au démarrage.

Source : openkeel-ovn-bgp-agent/docs/CONFORMANCE.md

Mécanique interne simplifiée

Démons privsep et oslo.concurrency

Repris par Kubernetes DaemonSet

Pourquoi c'est écarté

Un seul processus doté des capacités nécessaires tourne dans un DaemonSet, et une seule goroutine écrit sur le nœud.

Pourquoi la solution n'est pas affectée

Mêmes noms de périphériques, tables de routage, flux et texte FRR : un nœud configuré par l'agent Python peut être repris.

Source : openkeel-ovn-bgp-agent/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

Spécifications