Skip to content

[breaking] [deprecation] Remove Cilium BGP load balancer support - #602

Open
moshevayner wants to merge 2 commits into
mainfrom
remove-cilium-bgp-mode
Open

[breaking] [deprecation] Remove Cilium BGP load balancer support#602
moshevayner wants to merge 2 commits into
mainfrom
remove-cilium-bgp-mode

Conversation

@moshevayner

@moshevayner moshevayner commented Jul 31, 2026

Copy link
Copy Markdown
Member

Summary

Removes Cilium BGP load-balancer support from the CCM.

  • Removes the Cilium BGP runtime implementation, flags, Helm configuration, RBAC, unit tests, and e2e test setup.
  • Removes Cilium dependencies no longer needed by CCM.
  • Updates documentation and examples to describe NodeBalancers as the supported LoadBalancer implementation.
  • Retains --load-balancer-type=nodebalancer for existing deployment compatibility.

Deprecation / Breaking Change

--load-balancer-type=cilium-bgp is no longer supported. It will be accepted as a command line option, but will be a no-op moving forward and treated as nodebalancer as the default option.

Clusters using Cilium BGP shared-IP load balancing must migrate to NodeBalancers, including Premium NodeBalancers where higher capacity is required.

Validation

  • mise run codegen
  • go test ./...
  • helm lint deploy/chart
  • helm template ccm deploy/chart
  • Verified no remaining Cilium BGP flags, configuration, e2e wiring, or module dependency references

Signed-off-by: Moshe Vayner moshe@vayner.me

General:

  • Have you removed all sensitive information, including but not limited to access keys and passwords?
  • Have you checked to ensure there aren't other open or closed Pull Requests for the same bug/feature/question?

Pull Request Guidelines:

  1. Does your submission pass tests?
  2. Have you added tests?
  3. Are you addressing a single feature in this PR?
  4. Are your commits atomic, addressing one change per commit?
  5. Are you following the conventions of the language?
  6. Have you saved your large formatting changes for a different PR, so we can focus on your work?
  7. Have you explained your rationale for why this feature is needed?
  8. Have you linked your PR to an open issue

Signed-off-by: Moshe Vayner <moshe@vayner.me>
Comment on lines +19 to +34
func createTestService() *v1.Service {
return &v1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: randString(),
Namespace: "test-ns",
UID: "foobar123",
},
Spec: v1.ServiceSpec{
Ports: []v1.ServicePort{
{Name: randString(), Protocol: "TCP", Port: 80, NodePort: 30000},
{Name: randString(), Protocol: "TCP", Port: 8080, NodePort: 30001},
},
},
}
}

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This helper previously existed in cilium_loadbalancers_test.go but is used by other tests as well, so I moved it into this file.

@codecov

codecov Bot commented Jul 31, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 75.21%. Comparing base (d3be9cb) to head (5c8a183).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #602      +/-   ##
==========================================
+ Coverage   73.76%   75.21%   +1.45%     
==========================================
  Files          19       18       -1     
  Lines        3045     2679     -366     
==========================================
- Hits         2246     2015     -231     
+ Misses        538      453      -85     
+ Partials      261      211      -50     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@moshevayner moshevayner changed the title [deprecation] Remove Cilium BGP load balancer support [breaking] [deprecation] Remove Cilium BGP load balancer support Jul 31, 2026
@moshevayner moshevayner added the breaking-change for breaking changes in the changelog. label Jul 31, 2026
@moshevayner
moshevayner marked this pull request as ready for review July 31, 2026 21:06
@komer3
komer3 requested a review from Copilot August 3, 2026 18:00
Comment on lines -158 to -166
{{- if .Values.sharedIPLoadBalancing }}
{{- with .Values.sharedIPLoadBalancing.bgpNodeSelector }}
- --bgp-node-selector={{ . }}
{{- end }}
{{- with .Values.sharedIPLoadBalancing.ipHolderSuffix }}
- --ip-holder-suffix={{ . }}
{{- end}}
- --load-balancer-type={{ required "A valid .Values.sharedIPLoadBalancing.loadBalancerType is required for shared IP load-balancing" .Values.sharedIPLoadBalancing.loadBalancerType }}
{{- end }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wonder if should keep these flags but log them as deprecated? Thoughts?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This way it doesn't break existing deployment

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR removes the Cilium BGP shared-IP LoadBalancer implementation from the Linode Cloud Controller Manager, leaving NodeBalancers as the only supported LoadBalancer backend while keeping the --load-balancer-type=nodebalancer flag for deployment compatibility.

Changes:

  • Removes Cilium BGP runtime code, flags/options, Helm wiring/RBAC, and e2e assets related to BGP testing.
  • Updates CCM load balancer implementation to be NodeBalancer-only and prunes Cilium-related module dependencies.
  • Updates documentation/examples to reflect NodeBalancers as the supported LoadBalancer implementation.

Reviewed changes

Copilot reviewed 26 out of 27 changed files in this pull request and generated no comments.

Show a summary per file
File Description
README.md Updates feature description to reflect NodeBalancer-only load balancing.
mise.toml Removes the e2e-test-bgp task.
Makefile Removes the e2e-test-bgp target and associated setup/test invocation.
main.go Removes BGP-related flags and narrows --load-balancer-type help text to NodeBalancer.
go.sum Removes Cilium and related transitive dependency checksums.
go.mod Drops github.com/cilium/cilium and related indirect deps; retains only what’s still needed.
e2e/setup/cilium-setup.sh Deletes Cilium BGP e2e setup script (no longer used).
e2e/bgp-test/lb-cilium-bgp/create-pod-service.yaml Deletes Cilium BGP e2e manifest.
e2e/bgp-test/lb-cilium-bgp/chainsaw-test.yaml Deletes Cilium BGP chainsaw e2e test.
docs/getting-started/overview.md Removes mention of BGP-based IP sharing from overview.
docs/getting-started/helm-installation.md Removes Helm values example for shared-IP/BGP configuration.
docs/examples/README.md Removes “Shared IP Load-Balancing” from examples index.
docs/examples/advanced.md Removes the shared-IP/BGP advanced example.
docs/configuration/README.md Removes BGP-related bullets from configuration overview.
docs/configuration/loadbalancer.md Documents NodeBalancer-only support and removes BGP section/references.
docs/configuration/environment.md Removes BGP env/flag documentation; updates flag table entry for --load-balancer-type.
deploy/chart/values.yaml Removes commented shared-IP/BGP values stanza.
deploy/chart/templates/daemonset.yaml Removes shared-IP/BGP args injection logic from the DaemonSet template.
deploy/chart/templates/clusterrole-rbac.yaml Removes conditional RBAC rules for Cilium CRDs.
cloud/linode/service_controller_test.go Updates tests to construct loadbalancers without Cilium/BGP fields.
cloud/linode/options/options.go Removes BGP-specific options fields from the global Options struct.
cloud/linode/loadbalancers.go Removes all Cilium/BGP load balancer logic; simplifies loadbalancers struct accordingly.
cloud/linode/loadbalancers_test.go Removes Cilium client field usage in tests and aligns struct construction.
cloud/linode/cloud.go Removes Cilium LB type support from supported types and drops IP-holder suffix validation.
cloud/linode/cloud_test.go Removes IP-holder suffix length test (no longer applicable).
cloud/linode/cilium_loadbalancers.go Deletes the Cilium BGP implementation file.
cloud/linode/cilium_loadbalancers_test.go Deletes the Cilium BGP unit test suite.

Signed-off-by: Moshe Vayner <moshe@vayner.me>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking-change for breaking changes in the changelog. deprecation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants