Skip to content

Releases: kubernetes-sigs/aws-load-balancer-controller

v3.4.0

03 Jun 01:27
3f1e970

Choose a tag to compare

📚 Quick Links

v3.4.0 (requires Kubernetes 1.22+)

Documentation

Image: public.ecr.aws/eks/aws-load-balancer-controller:v3.4.0
Thanks to all our contributors! 😊

🎉 Ingress to Gateway Migration Tool

We are excited to introduce the Ingress to Gateway Migration Tool, the biggest addition in this release! This tooling helps you migrate AWS Load Balancer Controller (LBC) Ingress resources to Gateway API resources, step by step. The migration is designed to be safe and non-disruptive — new ALBs are created alongside your existing ones, so current workloads keep running throughout the entire process.

Two tools are provided to help you migrate with confidence:s

  • lbc-migrate CLI: Translates your Ingress manifests (annotations, rules, and IngressGroups) into equivalent Gateway API YAML. Supports cluster scraping (--from-cluster), file input (-f), directory input (--input-dir), single-Ingress and multi-namespace scoping, and per-namespace output splitting.
  • Migration Console: A local, in-cluster web UI that compares the AWS resource stack produced by both the Ingress and Gateway controllers, field by field. This lets you verify equivalence before applying your Gateway manifests for real.

To get started, see the Migration Guide for the end-to-end walkthrough.

We encourage you to try it out and welcome any feedback via GitHub Issues.

⚠️ Gateway API Behavior Change

Only one L4 route per listener is eligible for traffic when using an NLB Gateway

  • Change: When multiple L4 (TCP/UDP/TLS) routes target the same listener, the controller only forwards traffic to the oldest route. (#4745).
  • Impact: If you currently attach more than one TCP/UDP/TLS route to the same listener, only the oldest route will continue serving traffic after upgrading. Review your L4 route configurations and consolidate to a single route per listener to avoid unexpected traffic changes.

🔧 Enhancements and Fixes

  • Regex path reconcile loop: Ignore the top-level RegexValues field that AWS mirrors in DescribeRules responses, preventing an unnecessary ModifyRule on every reconcile (#4749)
  • Service reconciler nil check: Return early in the service reconciler when the load balancer is nil (#4751)
  • TGC health check for ALB target groups: Fixed an error when updating health check settings in TargetGroupConfiguration for Gateway API ALB target groups (#4741)
  • NLB weighted target groups: Allow weight 0 for NLB weighted target groups, with a guard requiring at least one non-zero weight (#4738)
  • Capacity units validation: Validate CapacityUnits on capacity reservation annotations instead of silently dropping parse errors (which reset the reservation to 0) (#4750)
  • Checkpoint early-exit race: Ensure pods with pending readiness gates are always reconciled, fixing a checkpoint early-exit race with same-IP re-registration (#4737)
  • Retryable error wrapping: Wrap the last retryable error with a timeout error for clearer failure reporting (#4761)
  • Readiness gate efficiency: The TargetGroupBinding controller now watches pod events instead of requeueing on a fixed timer when using readiness gates, responding faster while avoiding unnecessary requeues (#4678)
  • Unit-test workflow permissions: Declare contents: read on the unit-test workflow to pin the default GITHUB_TOKEN to read-only (#4736)
  • Webhooks upgraded to v1: Admission webhooks were upgraded from v1beta1 to v1. Applied automatically on upgrade — no action needed (#4743)
  • Listener rule tag reconcile: Reconcile listener rule tags for all matched rules (#4772)

🌟 Complete Change Log

  • [feat i2g]support split by namespace output by @shuqz in #4733
  • [feat i2g] Fix user tag propagation to ListenerRuleConfigurations in lbc-migrate by @shuqz in #4735
  • [feat i2g] Add IngressPlanAnnotation feature gate for dry-run plan by @shuqz in #4734
  • fix checkpoint early-exit by @wweiwei-li in #4737
  • [fix]allow weight zero in NLB target group by @shuqz in #4738
  • Watch pod events for updating TargetGroupBindings with ReadinessGates by @cezarsa in #4678
  • [feat i2g] multi-ingress TGC with RouteConfigurations by @shuqz in #4742
  • upgrade webhooks to v1 by @zac-nixon in #4743
  • Fix error when updating health check settings in TGC for Gateway API ALB target groups by @shraddhabang in #4741
  • reject multiple l4 routes for same listener by @zac-nixon in #4745
  • fix: return early in service reconciler when lb is nil by @wweiwei-li in #4751
  • Validate load balancer capacity units annotations by @immanuwell in #4750
  • [feat i2g] bug fix by @shuqz in #4746
  • [feat i2g]setup e2e test for migration tool by @shuqz in #4739
  • ci(test): declare contents: read on the unit-test workflow by @arpitjain099 in #4736
  • [feat i2g]add in-cluster console for model comparison by @shuqz in #4728
  • fix: ignore top-level RegexValues mirrored by AWS in DescribeRules response by @pataraktw in #4749
  • [feat i2g] add e2e tests for ingress2gateway migration tool by @shuqz in #4771
  • [feat i2g] docs: migration guide, lbc-migrate reference, and in-cluster console by @shuqz in #4759
  • Add multiple ingress test that sorts rules based on priority by @jupdec in #4756
  • Reconcile listener rule tags for all matched rules by @andreybutenko in #4772
  • cut v3.4.0 release by @shuqz in #4776

New Contributors

Full Changelog: v3.3.0...v3.4.0

v3.3.0

05 May 20:58
46816a2

Choose a tag to compare

v3.3.0 Release Notes

📚 Quick Links

v3.3.0 (requires Kubernetes 1.22+)

Image: public.ecr.aws/eks/aws-load-balancer-controller:v3.3.0

Documentation

Thanks to all our contributors!💜💜💜

⚠️ Action Required

CRD Updates

Action: Please apply the latest CRD definitions

  • kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"

IAM Policy Updates

If you enable the EnableCertificateManagement feature gate, attach the additional IAM policy for ACM and Route53 permissions to your controller's IAM role. See the documentation for details.

Gateway API updates

  • Installation of LBC Gateway API specific CRDs: kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/refs/heads/main/config/crd/gateway/gateway-crds.yaml
  • If using only ALB Gateway
    • Standard Gateway API CRDs: kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.5.0/standard-install.yaml
  • If using NLB Gateway
    • Experimental Gateway API CRDs: kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/experimental-install.yaml [Required: Used for L4 Routes]

🚀 What's New

Ingress Features

  • ACM Certificate Management (Feature Gate: EnableCertificateManagement): The controller can now automatically create and manage TLS certificates in ACM using hostnames from Ingress resources. It supports both Amazon-issued certificates with DNS validation via Route53 and private certificates via AWS Private CA. Enable with --feature-gates=EnableCertificateManagement=true and the create-acm-cert: "true" annotation. See the Certificate Management documentation for setup, IAM policy requirements, and ingress group behavior.

🔧 Enhancements and Fixes

  • [Bug fix] Fix ENI resolution when pod has an IPv6 address (#4706)
  • [Bug fix] Fix frontend NLB listener and target group tagging (#4700)
  • [Bug fix] Add externalId into cache key for cross-account TGB (#4714)
  • [Bug fix] ACM cert management bug fixes and doc improvements
  • [Enhancement] Gateway API auto-detection improvements and LBC-specific CRD handling in Helm

Documentation Updates

  • ACM Certificate Management guide with ingress group behavior, security considerations, and IAM policy scoping
  • Updated the gateway api installation docs to include the AWS vended CRD as pre-requisites

What's Changed

New Contributors

Full Changelog: v3.2.2...v3.3.0

v3.2.2

18 Apr 00:32
32e047b

Choose a tag to compare

v3.2.2 Release Notes

📚 Quick Links

v3.2.2 (requires Kubernetes 1.22+)

Image: public.ecr.aws/eks/aws-load-balancer-controller:v3.2.2

Documentation

Thanks to all our contributors!💜💜💜

⚠️ Action Required

CRD Updates

Action : Please apply the latest CRD definitions

  • kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"

What's Changed

New Contributors

Full Changelog: v3.2.1...v3.2.2

v3.2.1

06 Apr 19:20

Choose a tag to compare

Same release as https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/tag/v3.2.0, but fixes ListenerSet permissions for Gateway API users installing via Helm.

v3.2.0

06 Apr 16:25
0fb5e3b

Choose a tag to compare

v3.2.0 Release Notes

📚 Quick Links

v3.2.0 (requires Kubernetes 1.22+)

Image: public.ecr.aws/eks/aws-load-balancer-controller:v3.2.0

Documentation

Thanks to all our contributors!💜💜💜

⚠️ Action Required

CRD Updates

Action : Please apply the latest CRD definitions

  • kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"

Gateway API updates

🚨 This release moves the Gateway API version from 1.3 to 1.5. For NLB Gateway users, this means that TLSRoute has been moved to the v1 API and is no longer served in the Alpha API version. It is recommended to install the experimental version of the TLSRoute to ensure zero downtime upgrades. 🚨

🚨Deprecations

  • --aws-vpc-tag-key is now deprecated and ignored. All tags from --aws-vpc-tags are always used for VPC lookup. This flag will be removed in a future release.

🚨Breaking Changes

  • If you were passing multiple tags via --aws-vpc-tags but your VPC only matched a subset of them, the controller will now fail to find the VPC since all tags are used as filters. Update your VPC tags or your --aws-vpc-tags value to ensure they match.

🚀 What's New

Gateway API Features

  • Update to Gateway API v1.5.0
  • Autodetect Gateway resources. No more feature flag flipping! The feature flags are still available to turn off the Gateway API feature.
  • Introduce ListenerSet resources

Ingress Features

  • Add Frontend NLB attributes annotation

🔧 Enhancements and Fixes

  • [Bug fix] Fixed subnet resolution when subnets having conflicting name tags.
  • [Bug fix] Fixed multi tag VPC look ups.
  • [Bug fix] Normalize ingress DNS name to lower case.
  • [Bug fix] Prevent nil pointer when assigning endpoints to WAF / Shield clients.
  • [Enhancement] Configurable re-queue time for Target Group Bindings.
  • [Enhancement] Automatically skip aws: system tags during tag reconcilation.
  • [Enhancement] Backfill concurrency controls in Helm chart.
  • [Enhancement] Adding namespace selectors to Service and Ingress webhooks.

Documentation Updates

  • Add cert expiry best practices
  • Add more AGA examples
  • Update label selector documentation

What's Changed

New Contributors

Full Changelog: v3.1.0...v3.2.0

v3.1.0

24 Feb 18:54
250024d

Choose a tag to compare

📚 Quick Links

v3.1.0 (requires Kubernetes 1.22+)

Image: public.ecr.aws/eks/aws-load-balancer-controller:v3.1.0

Documentation

Thanks to all our contributors!💜💜💜

⚠️ Action Required

CRD Updates

Action : Please apply the latest CRD definitions

  • kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"

If using Gateway API feature

  • Installation of LBC Gateway API specific CRDs: kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/refs/heads/main/config/crd/gateway/gateway-crds.yaml
  • Standard Gateway API CRDs: kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml [REQUIRED]
  • Experimental Gateway API CRDs: kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/experimental-install.yaml [OPTIONAL: Used for L4 Routes]

🚀 What's New

Gateway API Enhancements

  • [ALB Gateway] Port defaulting for scheme - Fixed redirect port handling to comply with Gateway API spec. When port is not specified in HTTPRequestRedirectFilter, the controller correctly defaults to well-known ports (80 for http, 443 for https) based on the redirect scheme.
  • [ALB Gateway] Improved regex handling - Corrected regex value handling in Gateway API route matching
  • [Gateway] Status hostname normalization - Gateway status hostnames are now normalized to lowercase for consistency

AWS Global Accelerator Controller

  • [AGA] Cross-namespace reference support - AGA resources can now reference resources across namespaces, enabling more flexible multi-tenant architectures

🔧 Enhancements and Fixes

  • [NLB Gateway] TLS passthrough listener - Fixed TLS listener construction to respect TLS mode configuration. NLB Gateways now support passthrough, termination, and re-encryption modes as defined in Gateway API spec. Note: SNI-based routing is not supported due to AWS NLB dataplane limitations.
  • [Ingress] Rule optimizer - Fixed incorrect removal of regex-based listener rules that could cause routing failures
  • [HelmUpgrade] Webhook certificate regeneration - Fixed certificate regeneration issues during Helm upgrades. Reintroduce the keepTLSSecret parameter with improved logic that maintains cert-manager compatibility.
  • [Gateway] NPE on invalid parameters - Added null pointer protection and enhanced debugging for invalid parameter references

Documentation Updates

  • Updated service.beta.kubernetes.io/aws-load-balancer-type annotation documentation
  • Moved QUIC documentation to L4 section for better organization
  • Updated Helm chart information

Changelog since v3.0.0

New Contributors

Full Changelog: v3.0.0...v3.1.0

v3.0.0

23 Jan 18:51
eada2db

Choose a tag to compare

📚 Quick Links

v3.0.0 (requires Kubernetes 1.22+)

Image: public.ecr.aws/eks/aws-load-balancer-controller:v3.0.0

Documentation

Thanks to all our contributors!💜💜💜


🎉 Gateway API is Now GA!

We are excited to announce that Gateway API support is now Generally Available (GA) in AWS Load Balancer Controller v3.0.0! This milestone marks the production-ready status of Gateway API features for managing AWS Application Load Balancers and Network Load Balancers through the Kubernetes Gateway API. We encourage you to try it out and welcome any feedback via GitHub Issues.
For more gateway api details, please refer to our live doc.

⚠️ Action Required

CRD Updates

Action : Please apply the latest CRD definitions

  • kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"

If using Gateway API feature

  • Installation of LBC Gateway API specific CRDs: kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/refs/heads/main/config/crd/gateway/gateway-crds.yaml
  • Standard Gateway API CRDs: kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml [REQUIRED]
  • Experimental Gateway API CRDs: kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/experimental-install.yaml [OPTIONAL: Used for L4 Routes]

Webhook Certificate Issue

  • Issue: #4359 attempted to fix a race condition in webhook certificate renewal but introduced a critical bug. The aws-load-balancer-tls Secret persists but the Certificate that owned and renewed it was removed, causing eventual certificate expiration and webhook TLS failures (#4541). This prevents the controller from updating target group bindings and can lead to outages. This bug impacts users deploying with Helm and utilizing the enableCertManager=true flag.
  • Action for users staying on older versions: Set keepTLSSecret=false in your helm chart to mitigate the issue
  • Action for users upgrading to v3.0.0: No action required - the fix is included in this release

🔧 Enhancements and Fixes

  • Helm Chart Version Alignment: Helm chart version now aligns with LBC version. Previously, LBC v2.x used Helm chart v1.x (e.g., LBC v2.17 = Helm v1.17). Starting with v3.0.0, both versions match.
  • Gateway Deletion: Removed route count check when deleting gateways, allowing deletion of gateways with attached routes (#4549)
  • Subnet Ordering: Fixed subnet order preservation when using aws-load-balancer-subnets annotation - now maintains requested order instead of non-deterministic ordering (#4504)
  • AZ Mismatch Fix: Fixed orphaned targets issue caused by AvailabilityZone mismatch in refreshUnhealthyTargets - targets are now properly deregistered regardless of cached AZ (#4544)
  • NLB Target Group Limit: Fixed target group association limit error for weighted configs by including base service UID in target group name generation (#4540)
  • Listener Error Propagation: Fixed target group tuple error messages not being propagated to end users (#4545)
  • Webhook Certificate: Reverted race condition fix in webhook certificate renewal that caused issues (#4542)

📋 Full Changelog

  • Revert "fix: Race condition in webhook certificate renewal with cert-… by @zac-nixon in #4542
  • Fix NLB target group association limit issue for weighted configs by @shraddhabang in #4540
  • Fix AZ mismatch in refreshUnhealthyTargets causing orphaned targets by @MinhNguyen-at in #4544
  • Update model_build_listener.go by @zac-nixon in #4545
  • Fix: preserve requested order for subnets when using aws-load-balancer-subnets annotation by @nelsen129 in #4504
  • Remove KeepTLS parameter in helm chart by @zac-nixon in #4548
  • [gateway api] remove route count check for deleting gateway by @zac-nixon in #4549
  • [feat gateway-api]update gw api doc by @shuqz in #4550
  • cut v3.0.0 release by @shuqz in #4551

New Contributors

Full Changelog: v2.17.1...v3.0.0

v2.17.1

09 Jan 22:58
3b9bdb1

Choose a tag to compare

v2.17.1 (requires Kubernetes 1.22+)

Documentation

Image: public.ecr.aws/eks/aws-load-balancer-controller:v2.17.1
Thanks to all our contributors! 😊

🚀 What's New

QUIC Protocol Support: Added QUIC protocol support for Gateway API and Service API
JWT Validation: Support for JWT validation in Gateway API
Default Load Balancer Scheme: Added support for specifying —default-load-balancer-scheme flag in Helm chart

🔧 Enhancements and Fixes

Bug Fixes

  • Helm Chart: Duplicated CRD in helm kustomization

Documentation Updates

  • Service Actions: Fixed service.beta.kubernetes.io/actions example in documentation
  • Conformance Report: Generated v2.17.0 conformance test report

Changelog since v2.17.0

v2.17.0

19 Dec 20:15
0f0cf4a

Choose a tag to compare

v2.17.0 (requires Kubernetes 1.22+)

Documentation

Image: public.ecr.aws/eks/aws-load-balancer-controller:v2.17.0
Thanks to all our contributors! 😊

Known Issues

Helm Chart 1.17.0 includes duplicated CRD globalaccelerators, causing kustomize render to fail

⚠️ Actions required to use the new AWS Global Accelerator controller

🚀 What's New

AWS Global Accelerator Support - A new controller that enables declarative management of AWS Global Accelerators directly from Kubernetes using Custom Resource Definitions (CRDs). It allows users to define Global Accelerator resources as Kubernetes manifests, automatically provisioning and managing accelerators, listeners, endpoint groups, and endpoints that reference Kubernetes Ingress, Kubernetes Services, Kubernetes Gateway, and AWS resource ARNs. For more details, check the documentation:

Gateway API - GA Release Candidate: The Gateway API implementation in this release is considered a Release Candidate for its General Availability (GA) release planned for next month. We encourage extensive testing in production-like environments and welcome your feedback via GitHub issues to ensure a stable GA release. What's new in this release:

  • TCP_UDP Protocol: Complete support for combined TCP_UDP protocol on NLB Gateways with detailed usage guidance
  • Per-ParentRef Status: Route status now correctly updates per parentRef instead of per-route
  • ReplacePrefixMatch: Enhanced support with documented ALB limitations
  • Conformance Report: Generated Gateway API conformance report with detailed test results
  • ACM Cert Discovery: Fixed memory leak in ACM certificate discovery
  • App Protocol Support: Added support for kubernetes.io/h2c App Protocol

🔧 Enhancements and Fixes

✨ Enhancements

  • Cross-Zone Handling: Improved handling for cross-zone disabled ALBs with automatic AZ detection
  • Weighted Target Groups: Added support for weighted target groups on NLB listeners

🐛 Bug Fixes

  • Helm Template: Fixed objectSelector.matchExpressions indentation in webhook.yaml
  • Helm Chart: Added --max-targets-per-target-group flag support

📚 Documentation

  • Prometheus Metrics: Corrected metric names to include aws_ prefix in documentation

Changelog since v2.16.0

v2.16.0

20 Nov 22:44
95b07ef

Choose a tag to compare

v2.16.0 (requires Kubernetes 1.22+)

Documentation

Image: public.ecr.aws/eks/aws-load-balancer-controller:v2.16.0
Thanks to all our contributors! 😊

Action required

🚨 🚨 🚨 For ALB Target Optimizer Users who want to use auto-injection for ALB target control agent: New CRD ALBTargetControlConfig has been added. Update your CRDs and RBAC. If you're upgrading the charts using helm upgrade, you need to update CRDs manually: kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/refs/heads/main/config/crd/bases/elbv2.k8s.aws_albtargetcontrolconfigs.yaml also update rbac policy by applying the latest changes kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/refs/heads/main/config/rbac/role.yaml

What’s new

We're excited to announce two new features!

Changelog since v2.15.0