I have a couple Raspberry Pi 3B/3B+ that I'm running k3s on. The Pis are connected using WiFi only. I'm trying to use MetalLB to get load balancing, but I have problems getting it to work.

MetalLB works by capturing ARP requests for the "virtual" IP it is assigned, and sending ARP replies directing the traffic to the correct node. For this to work, ARP requests needs to be forwarded from the kernel to user space where MetalLB runs.

This is supposed to work fine, but in my case it only works occasionally. I have tried to debug the problem, and as far as I can tell, no outside ARP requests reach user space when this is not working. If I use arping from a different computer, requests for the regular IP on the Pis get proper replies, but the "virtual" IP assigned to MetalLB does not get a reply.

I have written a small program that basically does the same as MetalLB and prints out the ARP packages it sees, and it sees quite a few "is-at" replies, but the only "who-has" requests it sees are the ones happening inside the flannel networking set up by k3s for Kubernetes.

I have not been able to figure out why it occasionally works, or what makes it stop working (or start for that matter). Most of the time it is not working. There seems to be a better chance for it to work after a reboot, but it is by no means consistent and in any case short lived.

It seems to work if I set the interface in promiscuous mode, but that's not a healthy mode of operation, and after a while the entire Pi falls off the net and needs to be rebooted.

What am I missing here? How can I debug this and find a solution?


You must log in to answer this question.

Browse other questions tagged .