[feat] Add IPv6 public backends for NodeBalancers#545
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #545 +/- ##
==========================================
+ Coverage 73.43% 73.54% +0.11%
==========================================
Files 19 19
Lines 2906 2930 +24
==========================================
+ Hits 2134 2155 +21
- Misses 523 525 +2
- Partials 249 250 +1 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
Adds support for selecting public IPv6 addresses as NodeBalancer backend node targets (with global flag + per-Service annotation), including for VPC-backed NodeBalancers, and extends unit/e2e/docs/chart coverage around the new behavior.
Changes:
- Add
--enable-ipv6-for-nodebalancer-backendsandservice.beta.kubernetes.io/linode-loadbalancer-enable-ipv6-backendsto control IPv6 backend selection. - Update NodeBalancer reconciliation to build backend node addresses using IPv6-safe host:port formatting and preserve VPC config when IPv6 backends are enabled.
- Add Helm/docs and unit + Chainsaw e2e coverage for IPv6 backend behavior.
Reviewed changes
Copilot reviewed 14 out of 16 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
main.go |
Registers new controller flag for IPv6 NodeBalancer backends. |
cloud/annotations/annotations.go |
Adds the per-service annotation constant for enabling IPv6 backends. |
cloud/linode/options/options.go |
Adds a global options field to enable IPv6 NodeBalancer backends. |
cloud/linode/loadbalancers.go |
Core logic: resolves IPv6-backend enablement, selects node backend IPs, preserves VPC config, and formats backend addresses safely for IPv6. |
cloud/linode/loadbalancers_test.go |
Adds unit tests for IPv6 backend selection, precedence rules, VPC preservation, and address formatting. |
deploy/chart/templates/daemonset.yaml |
Plumbs the new flag into the Helm chart DaemonSet args. |
deploy/chart/values.yaml |
Documents the new Helm value for enabling IPv6 NodeBalancer backends. |
docs/configuration/loadbalancer.md |
Documents frontend vs backend IPv6 behavior and operational requirements for IPv6 backends. |
docs/configuration/environment.md |
Documents the new controller flag and its behavior/requirements. |
docs/configuration/annotations.md |
Documents the new service annotation for IPv6 backends. |
e2e/test/lb-with-ipv6-backends/create-pods-services.yaml |
Adds an e2e workload + dual-stack Service annotated to enable IPv6 backends. |
e2e/test/lb-with-ipv6-backends/chainsaw-test.yaml |
Adds a Chainsaw scenario validating backend node addresses are IPv6 and traffic still reaches pods. |
devbox.json |
Pins clusterctl version in the devbox environment. |
devbox.lock |
Updates the devbox lockfile to reflect the pinned clusterctl version. |
Makefile |
Updates cluster-api related versions and ensures clusterctl is used via a configured path. |
.gitignore |
Ignores local generated cluster artifacts/kubeconfigs. |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Adds support for using public IPv6 addresses as NodeBalancer backend targets (optionally enabled globally or per-Service), while keeping existing VPC-backed NodeBalancer configuration intact during create/update and adding related test/helm/docs coverage.
Changes:
- Introduces a new controller flag and Service annotation to opt services into IPv6 NodeBalancer backends (annotation takes precedence).
- Updates NodeBalancer backend-node building to select IPv6
NodeExternalIPand format backend addresses IPv6-safely. - Extends unit/e2e tests plus chart/docs updates to cover and document IPv6 backend behavior.
Reviewed changes
Copilot reviewed 14 out of 16 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| main.go | Registers the new --enable-ipv6-for-nodebalancer-backends flag. |
| cloud/linode/options/options.go | Adds a new global option field for IPv6 backend enablement. |
| cloud/annotations/annotations.go | Adds the new per-Service annotation constant for IPv6 backends. |
| cloud/linode/loadbalancers.go | Implements IPv6 backend selection, annotation/flag precedence, and IPv6-safe host:port formatting; preserves VPC config during reconcile. |
| cloud/linode/loadbalancers_test.go | Adds unit tests for IPv6 backend selection, precedence, VPC preservation, and address formatting. |
| deploy/chart/templates/daemonset.yaml | Wires Helm values to pass the new controller flag. |
| deploy/chart/values.yaml | Documents the new Helm value for enabling IPv6 backends. |
| docs/configuration/loadbalancer.md | Documents IPv6 backend behavior and recommended dual-stack Service setup. |
| docs/configuration/environment.md | Documents the new controller flag and its implications. |
| docs/configuration/annotations.md | Documents the new Service annotation and behavior. |
| e2e/test/lb-with-ipv6-backends/create-pods-services.yaml | Adds a dual-stack Service + backend deployment for e2e coverage. |
| e2e/test/lb-with-ipv6-backends/chainsaw-test.yaml | Adds an e2e Chainsaw scenario validating IPv6 backend node addresses and reachability. |
| devbox.json | Pins clusterctl to a specific version for devbox shells. |
| devbox.lock | Updates locked devbox package metadata for the new clusterctl pin. |
| Makefile | Pins/installs clusterctl, updates CAP* versions, and adjusts e2e cluster generation for dual-stack. |
| .gitignore | Ignores locally generated cluster manifests/kubeconfigs and related artifacts. |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Summary
Behavior
--enable-ipv6-for-nodebalancer-backendsas a global controller flagservice.beta.kubernetes.io/linode-loadbalancer-enable-ipv6-backendsas a per-service overrideCode Changes
cloud/annotations/annotations.gocloud/linode/options/options.goand register the flag inmain.gocloud/linode/loadbalancers.goto:deploy/chart/templates/daemonset.yamlanddeploy/chart/values.yamldocs/configuration/loadbalancer.md,docs/configuration/environment.md, anddocs/configuration/annotations.md.gitignoreTests
Unit
cloud/linode/loadbalancers_test.gowith coverage for:E2E
e2e/test/lb-with-ipv6-backends/LoadBalancerservice annotated withlinode-loadbalancer-enable-ipv6-backends: "true"Verification
go test ./cloud/linode/...make test