Prerequisites
Complete the following prerequisites before configuring the BGP peers:- Configure the Talos workload-speaker topology on each node that runs the MetalLB speaker.
- Install MetalLB with FRR-K8s enabled and the in-pod FRR container disabled.
- Ensure MetalLB speaker pods can use the host network and required privileges under your Pod Security configuration.
Plan the peer values
The examples use these values:
Replace these values with addresses, ASNs, and node names from your network design.
The peer addresses must be assigned to the corresponding veth endpoints described in the native BGP overview.
Configure the address pool
Create the pool from which MetalLB assigns Service VIPs:importRoutes selector that contains this pool.
Configure the MetalLB peer
Create a MetalLBBGPPeer that initiates a session from the workload-facing veth address to the Talos VRF address:
myASN must match the Talos neighbor peerASN.
peerASN must match the Talos workload instance localASN.
sourceAddress is assigned to veth-workload, and peerAddress is assigned to the veth endpoint inside vrf-workload.
The Talos example configures the workload neighbor as passive, so MetalLB initiates this session.
If you change the session direction, update both configurations consistently.
dualStackAddressFamily: true allows the IPv6 transport session to carry IPv4 Network Layer Reachability Information (NLRI).
Enable extended next hop
Add anFRRConfiguration for the selected node so FRR enables extended next-hop capability for the Talos neighbor:
BGPPeer resource.
Configure the advertisement
Select the address pool and peer explicitly:Advertise a service
Create a LoadBalancer Service and select the MetalLB pool:externalTrafficPolicy: Local keeps traffic on a node with a local backend.
Ensure that MetalLB advertises the VIP only from nodes where your traffic policy can deliver it.
Apply and verify the configuration
Apply the MetalLB resources:installRoutes: false, the MetalLB VIP should not appear in the workload VRF or host main table on that node.
The imported path also remains out of the Linux FIB on the importing node; the fabric peer’s advertised count should increase when the route is imported.
Use the native BGP troubleshooting workflow when the peer or route does not appear.
Inspect MetalLB speaker and FRR-K8s logs on the selected node: