AWS Load Balancer Controller
Install the AWS Load Balancer Controller to provision ALBs and NLBs from Kubernetes resources.
The AWS Load Balancer Controller is an add-on that watches Kubernetes Ingress and Service objects and provisions the matching AWS load balancers: ALBs for Ingress and NLBs for LoadBalancer services.
What it replaces
Without it, a type: LoadBalancer service creates a legacy Classic Load Balancer. The controller gives you modern ALB/NLB features: path routing, TLS, IP targets, and more.
Installation outline
- Create an IAM policy and an IRSA-backed service account.
- Install the controller with Helm, pointing it at your cluster name.
- Annotate your Ingress/Service resources to configure the load balancer.
Example
# Install the AWS Load Balancer Controller with Helm
helm repo add eks https://aws.github.io/eks-charts
helm repo update
helm install aws-load-balancer-controller \
eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=demo \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controllerWhen to use it
- A platform team installs the AWS Load Balancer Controller so Ingress resources automatically provision Application Load Balancers in the correct VPC subnets.
- A DevOps engineer uses the controller's NLB target group binding to route traffic to pods directly without the extra hop through kube-proxy.
- A cost engineer enables ALB sharing across multiple Ingresses using IngressGroup to reduce the number of load balancers billed per month.
More examples
Install LBC with Helm
Installs the AWS Load Balancer Controller via Helm, referencing a pre-created IRSA service account for AWS API access.
helm repo add eks https://aws.github.io/eks-charts
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=prod \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controllerIRSA service account for LBC
Creates the IRSA-backed service account the controller uses to call EC2 and ELBv2 APIs for provisioning load balancers.
eksctl create iamserviceaccount \
--cluster prod \
--namespace kube-system \
--name aws-load-balancer-controller \
--attach-policy-arn arn:aws:iam::123456789012:policy/AWSLoadBalancerControllerIAMPolicy \
--approveVerify controller is running
Checks the controller deployment status and tails logs to confirm it is processing Ingress and Service events without errors.
kubectl get deployment aws-load-balancer-controller \
-n kube-system
kubectl logs -n kube-system \
-l app.kubernetes.io/name=aws-load-balancer-controller \
--tail=20
Discussion