𝔩𝔢𝔩𝕠𝔭𝔢𝔷
Theme
Connect With Me on LinkedIn Buy Me a Coffee

Homelab

MetalLB Talos L2 Fix

Enabling MetalLB L2 on Talos Control Plane Nodes

Overview

Fixing MetalLB L2 announcements on Talos Linux clusters where all nodes are control planes1. Talos labels control plane nodes with exclude-from-external-load-balancers, which MetalLB 0.14+ honors by default. In clusters without dedicated workers, this excludes all nodes from L2 announcements, making LoadBalancer IPs unreachable from the local network.

Tip:Having trouble? See v1.0.1 for what your setup should look like after completing this article.

Before You Begin

Prerequisites

When to Use This

This fix applies when both conditions are true:

  1. Direct LAN access - You access LoadBalancer IPs from the local network, not through Tailscale. Tailscale routes traffic through its overlay network, bypassing L2 entirely.
  2. All-control-plane cluster - All nodes are control planes with no dedicated workers. If you have workers, MetalLB announces on those nodes (which lack the exclusion label) and L2 works normally2.

Symptoms:

  • LoadBalancer IPs assigned but unreachable from LAN
  • ARP shows (incomplete) for LoadBalancer IPs
  • NodePort works but LoadBalancer doesn't
  • No L2 status resources:
kubectl get servicel2statuses -A

Returns No resources found.

Update HelmRelease

Speaker Configuration

k8s/core/metallb/helmrelease.yaml:

spec:
  # ... existing chart/install/upgrade config ...
  values:                      # NEW
    speaker:                   # NEW
      ignoreExcludeLB: true    # NEW

Deploy Changes

Commit

git add k8s/core/metallb/helmrelease.yaml
git commit -m "fix(metallb): ignore node exclusion label for L2 announcements"
git push

Reconcile Flux

flux reconcile kustomization sync --with-source

Restart Speakers

kubectl rollout restart daemonset/metallb-speaker -n metallb-system
kubectl rollout status daemonset/metallb-speaker -n metallb-system

Verify Fix

L2 Status

kubectl get servicel2statuses -A

Should now show status entries for LoadBalancer services.

Connectivity

ping <loadbalancer-ip>

Resources

Footnotes

  1. Sidero Labs, "Unable to use MetalLB load balancer for TalosOS," github.com. Accessed: Feb. 17, 2026. [Online]. Available: https://github.com/siderolabs/talos/issues/10291

  2. MetalLB Contributors, "Unable to use MetalLB on TalosOS," github.com. Accessed: Feb. 17, 2026. [Online]. Available: https://github.com/metallb/metallb/issues/2676

Previous
MetalLB, Longhorn, and Ingress-NGINX