AWS Load Balancer Controller¶
AWS Load Balancer Controller is a controller to help manage Elastic Load Balancers for a Kubernetes cluster. This Add-on deploys this controller in an Amazon EKS Cluster.
Usage¶
In order to deploy the AWS Load Balancer Controller Addon via EKS Blueprints Addons, reference the following parameters under the module.eks_blueprints_addons
.
NOTE: In versions 2.5 and newer, the AWS Load Balancer Controller becomes the default controller for Kubernetes service resources with the type: LoadBalancer and makes an AWS Network Load Balancer (NLB) for each service. It does this by making a mutating webhook for services, which sets the spec.loadBalancerClass field to service.k8s.aws/nlb for new services of type: LoadBalancer. You can turn off this feature and revert to using the legacy Cloud Provider as the default controller, by setting the helm chart value enableServiceMutatorWebhook to false. The cluster won't provision new Classic Load Balancers for your services unless you turn off this feature. Existing Classic Load Balancers will continue to work.
module "eks_blueprints_addons" {
enable_aws_load_balancer_controller = true
aws_load_balancer_controller = {
set = [
{
name = "vpcId"
value = module.vpc.vpc_id
},
{
name = "podDisruptionBudget.maxUnavailable"
value = 1
},
{
name = "enableServiceMutatorWebhook"
value = "false"
}
]
}
Helm Chart customization¶
It's possible to customize your deployment using the Helm Chart parameters inside the aws_load_balancer_controller
configuration block:
aws_load_balancer_controller = {
set = [
{
name = "vpcId"
value = module.vpc.vpc_id
},
{
name = "podDisruptionBudget.maxUnavailable"
value = 1
},
{
name = "resources.requests.cpu"
value = 100m
},
{
name = "resources.requests.memory"
value = 128Mi
},
]
}
}
You can find all available Helm Chart parameter values here.
Validate¶
- To validate the deployment, check if the
aws-load-balancer-controller
Pods were created in thekube-system
Namespace, as the following example.
kubectl -n kube-system get pods | grep aws-load-balancer-controller
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system aws-load-balancer-controller-6cbdb58654-fvskt 1/1 Running 0 26m
kube-system aws-load-balancer-controller-6cbdb58654-sc7dk 1/1 Running 0 26m
- Create a Kubernetes Ingress, using the
alb
IngressClass, pointing to an existing Service. In this example we'll use a Service calledexample-svc
.
kubectl create ingress example-ingress --class alb --rule="/*=example-svc:80" \
--annotation alb.ingress.kubernetes.io/scheme=internet-facing \
--annotation alb.ingress.kubernetes.io/target-type=ip
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress alb * k8s-example-ingress-7e0d6f03e7-1234567890.us-west-2.elb.amazonaws.com 80 4m9s