AWS has rebranded the Application Load Balancer (ALB) Ingress controller as the AWS Load Balancer Controller and now includes support for both Application Load Balancers and Network Load Balancers. The public vendor recently announced the renaming and updates to this Load Balancer controller, labeled as a new controller or AWS ALB Ingress Controller v2.
There is an existing AWS Application Load balancer Ingress Controller (v1) that has been available for a few years, which manages ingress resources with application load balancers. The new AWS Load Balancer Controller is more generic and does application load balancing and network load balancing. Moreover, AWS also added new functionality and features to the new Load Balancer controller, such as:
- Network Load Balancers (NLB) for Kubernetes services
- Ability to share ALBs with multiple Kubernetes ingress rules
- A new TargetGroupBinding
One of the new controller's benefits is that it allows users to create NLBs for their Fargate pods with a simple annotation on the service.
kind: Service
apiVersion: v1
metadata:
name: nlb-ip-svc
annotations:
# route traffic directly to pod IPs
service.beta.kubernetes.io/aws-load-balancer-type: "nlb-ip"
Note that the NLB IP targeting mode, according to an AWS blog post, can also be useful outside the context of Fargate to optimize pod registration to NLBs. Furthermore, Justin Garrison, Sr developer advocate at AWS, the author of the blog post, wrote:
Using IP targeting mode, only the specific pods that belong to each service are added as targets. This allows your NLB to distribute traffic directly to pods, which decreases latency and improves scalability. This can also result in smaller Target Groups in large clusters, reducing management complexity.
Furthermore, one of the other benefits of the new ALB controller is, according to a tweet by Nathan Peck, a developer advocate for Container Services at AWS, that:
The ALB ingress controller for Kubernetes now supports sharing a single ALB between multiple ingresses, using different routing rules. Great way to save costs for small workloads and microservices.
Lastly, in the new AWS Load Balancer Controller, users can now use a custom resource (CR) called TargetGroupBinding to expose their pods using an existing target group. The TargetGroupBinding will allow users to manage the load balancer completely outside of Kubernetes - yet still, use that load balancer with the configuration that exists in Kubernetes objects.
apiVersion: elbv2.k8s.aws/v1alpha1
kind: TargetGroupBinding
metadata:
name: SearchFilterApp # create a new TargetGroupBinding called SearchFilterApp
spec:
serviceRef:
name: search-svc # route traffic to the search-svc
port: 80
targetGroupARN: <arn-to-targetGroup>
Currently, customers can install the AWS Load Balancer in all EKS clusters and find guidance on the documentation website and the open-source migration guide for migrating from version 1 to 2. Furthermore, note that NLB IP mode is supported on EKS clusters running Kubernetes version 1.18, and AWS indicated that support for older clusters would come soon.