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

  1. Create an IAM policy and an IRSA-backed service account.
  2. Install the controller with Helm, pointing it at your cluster name.
  3. Annotate your Ingress/Service resources to configure the load balancer.

Example

Example · bash
# 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-controller

When 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.

Example · bash
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-controller

IRSA service account for LBC

Creates the IRSA-backed service account the controller uses to call EC2 and ELBv2 APIs for provisioning load balancers.

Example · bash
eksctl create iamserviceaccount \
  --cluster prod \
  --namespace kube-system \
  --name aws-load-balancer-controller \
  --attach-policy-arn arn:aws:iam::123456789012:policy/AWSLoadBalancerControllerIAMPolicy \
  --approve

Verify controller is running

Checks the controller deployment status and tails logs to confirm it is processing Ingress and Service events without errors.

Example · bash
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

  • Be the first to comment on this lesson.