If you use L2 mode with externalTrafficPolicy=Cluster, you can attach your floating IP to any node in the cluster, and it will route correctly.
If you're using externalTrafficPolicy=Local, you can only attach the IP to a node where the is at least 1 pod of the service, but any such node is fine. If you attach to a node that doesn't have pods, the traffic will be blackholed.
Currently, the only way to know which node is the leader from MetalLB's perspective is Prometheus metrics. The speakers export metrics for each service, and one of them (I forget the name, but look at /metrics on one of the speaker pods) tells you if that node is the leader for each service. You could use that and some extra logic of your own to rehome the floating IP automatically.
Now that we have different leaders for each service, it could make sense to add a "current leader node" annotation to each service so that other tools can look it up easily. If that sounds useful for your use case, could you file a bug on github? I can't promise I'll get to it soon (lots of refactorings I need to do before doing stuff like that), but it sounds like a useful feature to track.
- Dave