Skip to main content
MetalLB can advertise Kubernetes Service virtual IPs (VIPs) to a VRF-bound Talos BGP instance. Talos can selectively import those routes into its fabric instance and advertise them to the physical network. This guide uses MetalLB in FRR-K8s mode. FRR-K8s provides the extended next-hop capability required to exchange IPv4 VIP routes over an IPv6 BGP session on the veth connection.

Prerequisites

Complete the following prerequisites before configuring the BGP peers:
  1. Configure the Talos workload-speaker topology on each node that runs the MetalLB speaker.
  2. Install MetalLB with FRR-K8s enabled and the in-pod FRR container disabled.
  3. Ensure MetalLB speaker pods can use the host network and required privileges under your Pod Security configuration.
The following Helm values select FRR-K8s mode:
Install MetalLB with those values:

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:
The Talos fabric instance must have an importRoutes selector that contains this pool.

Configure the MetalLB peer

Create a MetalLB BGPPeer 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 an FRRConfiguration for the selected node so FRR enables extended next-hop capability for the Talos neighbor:
Without extended next hop, an IPv6 BGP session cannot advertise the IPv4 Service VIPs used by this topology. Keep the ASN and neighbor address synchronized with the BGPPeer resource.

Configure the advertisement

Select the address pool and peer explicitly:
Use node selectors that match the Talos nodes where the veth, VRF, and workload BGP instance exist. For high availability, configure the topology on each selected node and ensure the external fabric handles the resulting paths as intended. 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:
Verify that the resources were accepted and inspect FRR-K8s status:
On the selected Talos node, inspect the workload peer and imported fabric route:
Because the workload instance uses 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:
Check for a source-address mismatch, node-selector mismatch, peer ASN mismatch, missing extended-next-hop capability, or a Talos import prefix that does not contain the advertised VIP.