Skip to content

docs: note exclude-from-external-load-balancers for L2 nodeSelectors - #3156

Open
fjvbn2003 wants to merge 1 commit into
metallb:mainfrom
fjvbn2003:docs-l2-exclude-lb-label
Open

fjvbn2003 wants to merge 1 commit into
metallb:mainfrom
fjvbn2003:docs-l2-exclude-lb-label

Conversation

@fjvbn2003

@fjvbn2003 fjvbn2003 commented Oct 14, 2026 •

Copy link
Copy Markdown

Is this a BUG FIX or a FEATURE ?:

/kind documentation

What this PR does / why we need it:

kubeadm sets the node.kubernetes.io/exclude-from-external-load-balancers label on control-plane nodes, and the speaker skips L2 announcements from labeled nodes unless it runs with --ignore-exclude-lb. If an L2Advertisement has nodeSelectors that match only control-plane nodes, no node announces the IP. The service gets an external IP but is not reachable, and the only trace is a debug-level log line in the speaker (the log was added in #2538 for #2505).

The troubleshooting guide already has a section about this label, but the L2 nodeSelectors documentation does not mention it, and the "A given speaker won't advertise the service if" list in the troubleshooting guide does not include it.

This PR:

  • adds a note to the nodeSelectors part of the advanced L2 configuration page that explains the interaction and points to --ignore-exclude-lb (speaker.ignoreExcludeLB in the Helm chart);
  • adds the label to the "won't advertise" list in the troubleshooting guide, linking to the existing section.

Documentation only. No code change.

Special notes for your reviewer:

The PR template asks to open an issue first for non-trivial changes. This is a small documentation change, so I opened the PR directly. I am happy to open an issue if you prefer.

This change was drafted with AI assistance and reviewed by me.

Release note:

NONE

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Clarified that MetalLB speakers may not announce services from nodes labeled node.kubernetes.io/exclude-from-external-load-balancers, even when those nodes match an L2Advertisement selector.
    • Added troubleshooting guidance for this condition, including the option to allow announcements from labeled nodes.

kubeadm sets the node.kubernetes.io/exclude-from-external-load-balancers
label on control-plane nodes, and the speaker skips L2 announcements
from labeled nodes. An L2Advertisement whose nodeSelectors match only
control-plane nodes therefore announces from no node at all, and the
only trace is a debug log line from the speaker.

Add a note to the L2 nodeSelectors section that explains this and
points to the --ignore-exclude-lb flag. Also list the label among the
reasons a speaker does not advertise a service in the troubleshooting
guide.

Signed-off-by: YoungjuKim <[email protected]>
@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 854e811e-15e0-4871-9380-99784c123bb7
📥 Commits

Reviewing files that changed from the base of the PR and between ff118df and d2b3de5.

📒 Files selected for processing: 2
  • website/content/configuration/_advanced_l2_configuration.md
  • website/content/troubleshooting/_index.md

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 7 remain after this review.

📝 Walkthrough

The L2 configuration documentation describes how the excluded-node label affects announcements and how to allow announcements from labeled nodes. The troubleshooting checklist adds a related condition for speakers that do not use the override option.

Changes: L2 excluded-node documentation

Layer / File(s) Summary
Document behavior and troubleshooting
website/content/configuration/_advanced_l2_configuration.md, website/content/troubleshooting/_index.md
The configuration documentation describes the excluded-node label, its effect on announcements, and the speaker flag or Helm setting that allows announcements. The troubleshooting checklist adds a condition for labeled nodes when the flag is not enabled.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~7 minutes

Change: Other

Merge Risk: ⚪ Minimal · up to d2b3d

The documentation changes accurately describe when labeled nodes are excluded from L2 announcements and how to enable announcements from them. No material merge risk is identified.

Pre-merge checks: Passed 5
Passed Passed checks: 5 passed
Check name Status Explanation
Title check Passed The title clearly and concisely describes the documentation change about the exclude-from-external-load-balancers label and L2 node selectors.
Description check Passed The description includes the documentation classification, purpose, detailed change summary, reviewer notes, and a NONE release note. It matches the repository template and explains the affected confi…
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

This PR has been automatically marked as stale because it has been open 30 days
with no activity. This issue will be closed in 10 days unless you do one of the following:

  • respond or perform some activity on this PR
  • have one of these labels applied: hold

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant