Annuncia tramite BGP gli IP delle VM e gli IP flottanti raggiungibili attraverso il nodo.
Go FRR e OVNopenkeel-ovn-bgp-agent
Il modulo
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.
Module
github.com/openkeel/openkeel-ovn-bgp-agent
Executable
ovn-bgp-agent (cmd/ovn-bgp-agent)
Driver / exposing method
nb_ovn_bgp_driver / underlay (the others are refused at start: docs/CONFORMANCE.md)
API
none; :9750 serves /healthz, /readyz, /metrics
State
none (derived from OVN and the node); /etc/iproute2/rt_tables keeps the table numbers
Estratto da openkeel-ovn-bgp-agent/README.md (in inglese).
Come viene testata la compatibilità
L'agente non ha un'API REST, quindi la compatibilità viene verificata con vettori di corrispondenza degli eventi e scenari di effetti collaterali sul nodo registrati dall'agente Python, nonché su un kernel reale.
Test unitari e golden test
Vettori di corrispondenza degli eventi
I filtri di eventi del Northbound corrispondono esattamente alle modifiche di righe OVN a cui reagisce l'agente Python.
Esecuzione
make test-vectors su cases-event-match_stable-2026.2.json, con la semantica di Mock di Python riprodotta.
Ultimo risultato 122 / 122 nell'ambito (casi SB ed EVPN fuori ambito); 20 / 20 casi scritti a mano per i filtri senza vettori.
Fonte: openkeel-ovn-bgp-agent/docs/CONFORMANCE.md
Scenario
Scenari di effetti collaterali
Indirizzi, link, vicini, route, regole, flussi e testo FRR lasciati sul nodo corrispondono allo stato finale Python registrato.
Esecuzione
internal/reconcile/scenarios_test.go su side-effects_stable-2026.2.json, make test-vectors.
Ultimo risultato 10 / 10 nell'ambito; 1 fuori ambito (SB EVPN). Tre difetti di Python deliberatamente non riprodotti.
Fonte: openkeel-ovn-bgp-agent/docs/CONFORMANCE.md
Test unitari e golden test
Presa in carico di un nodo configurato da Python
Le regole di ordinamento, i residui e l'idempotenza reggono, e l'agente prende in carico un nodo configurato dall'agente Python.
Esecuzione
internal/reconcile/reconcile_test.go.
Ultimo risultato Superato.
Fonte: openkeel-ovn-bgp-agent/docs/CONFORMANCE.md
Test unitari e golden test
Cablaggio reale del kernel
Cablaggio, idempotenza e rimozione tramite rtnetlink su un kernel reale (OVS e FRR simulati).
Esecuzione
make test-linux in un namespace di rete usa e getta.
Ultimo risultato Superato.
Fonte: openkeel-ovn-bgp-agent/docs/CONFORMANCE.md
Escluso dal rewrite
L'agente BGP implementa il driver Northbound solo con esposizione underlay, come un unico processo di riconciliazione, e rifiuta le modalità Southbound, EVPN e L2 esteso.
Meccanismi interni semplificati
Driver Southbound, EVPN e L2 esteso
Perché è stato escluso
Ambito del rewrite: solo nb_ovn_bgp_driver con esposizione underlay, di cui il Neutron di OpenKeel scrive le chiavi.
Perché la soluzione non ne risente
Vengono annunciati IP dei provider, IP flottanti, gateway dei router, subnet dei tenant e VIP dei load balancer. EVPN (vrf) e L2 esteso vengono rifiutati all'avvio.
Fonte: openkeel-ovn-bgp-agent/docs/CONFORMANCE.md
Obsoleto o inutilizzato upstream
Metodi di esposizione l2vni e dinamici
Perché è stato escluso
Neanche l'agente Python ha un collegamento per essi.
Perché la soluzione non ne risente
Nessuno in pratica: upstream non funzionavano; ora vengono rifiutati all'avvio.
Fonte: openkeel-ovn-bgp-agent/docs/CONFORMANCE.md
Meccanismi interni semplificati
Daemon privsep e oslo.concurrency
Gestito da Kubernetes DaemonSet
Perché è stato escluso
Un unico processo con le capability necessarie gira in un DaemonSet, e una sola goroutine scrive sul nodo.
Perché la soluzione non ne risente
Stessi nomi di dispositivo, tabelle di routing, flussi e testo FRR, così un nodo configurato dall'agente Python può essere preso in carico.
Fonte: openkeel-ovn-bgp-agent/docs/CONFORMANCE.md
Qui è elencato solo ciò che è stato escluso per scelta progettuale; il lavoro non ancora svolto si trova nei Known gaps del docs/CONFORMANCE.md del modulo. Tutti i moduli