Metallb: BFD support

Created on 7 Feb 2019  路  6Comments  路  Source: metallb/metallb

Is this a bug report or a feature request?:

Feature request

What happened:

Bidirectional Forwarding Detection not supported

What you expected to happen:

Detect faults between two forwarding engines connected by a link

Anything else we need to know?:

https://en.wikipedia.org/wiki/Bidirectional_Forwarding_Detection

Environment:

  • MetalLB version: 0.7.3
  • Kubernetes version: 1.13.2
enhancement protocoBGP

Most helpful comment

+1 for BFD, it would be nice. I'm not prioritizing it until I have proper e2e tests in place to make it safe to extend MetalLB, however. But, consider the request recorded and prioritized :)

All 6 comments

I can share my experience with BFD implemented in software and ... simply don't use it, BFD operates in the order of miliseconds , there is a nice explanation here https://networkengineering.stackexchange.com/a/45926

I'm curious about your needs, are the routing protocol timers not enough?

I also have experience with software BGP
I use BGP with BFD in load balancers (between Nexus and linux servers), and with thousands of requests per second, fast traffic switching is necessary
Therefore, BGP timers are not enough

BGP timers is a control plane mechanism while BFD is used for data plane. In a _generic_ BGP deployment, control plane may be separated from the data plane and so failure to reach the next hop of a route is not the same as a BGP speaker failure.

More importantly, hold time is specified in seconds and cannot be less than that while for certain types of applications <200ms failover time is required to avoid noticeable impact. On hold timer expiry a BGP connection is closed and routes that have been advertised by a speaker associated with that connection are removed from a router's RIB & FIB, however, between the actual failure time and eviction time, ECMP load-sharing continues to work as before and some L4 traffic flows will be black-holed as hashing is static per L4 flow for a given routing table size and the failed route(s) will still be there and will be used for forwarding before eviction.

I can also see that the default hold time in the example config is 120 seconds which is a lot in terms of failure detection.

+1 for BFD, it would be nice. I'm not prioritizing it until I have proper e2e tests in place to make it safe to extend MetalLB, however. But, consider the request recorded and prioritized :)

A Linux kernel BFD implementation would be the best.

Not sure if it's relevant for anyone here, but I did a BFD implementation in Go. Since it provides a grpc api, I'm sure someone could find a use for it.

https://github.com/Thoro/bfd

Was this page helpful?
0 / 5 - 0 ratings