AWS Load Balancer Controller (https://kubernetes-sigs.github.io/aws-load-balancer-controller/) is a controller to help manage Elastic Load Balancers (https://aws.amazon.com/elasticloadbalancing/) for a Kubernetes cluster.
It will allow us to provision Application Load Balancer (ALB - https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.4/guide/ingress/annotations/) as kubernetes ingress and Network Load Balancer (NLB - https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.4/guide/service/nlb/) as kubernetes service of type LoadBalancer.
Pre-requisite
- aws cli v2 (https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
- eksctl (https://github.com/weaveworks/eksctl)
Create IAM Policy
We will first need to create IAM policy to allow the AWS Load Balancer Controller to make calls to AWS APIs.
Start by downloading the IAM policy:
curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.2/docs/install/iam_policy.jsonCreate the policy:
aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy \
--policy-document file://iam_policy.jsonTake note of the full Policy ARN for the IAM policy. You will need it later.
Create Kubernetes ServiceAccount
Use eksctl to create the Kubernetes Service Account.
eksctl create iamserviceaccount \
--cluster=<cluster name> \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-policy-arn=<iam policy arn> \
--override-existing-serviceaccounts \
--approveInstall with Helm
We will use Helm to install our AWS Load Balancer Controller. To start, we will need to add the repo.
helm repo add eks https://aws.github.io/eks-charts
helm repo updateNext, install the AWS Load Balancer Controller with the following command:
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=<cluster name> \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller You will see an output similar to this:
NAME: aws-load-balancer-controller
LAST DEPLOYED: Fri Jul 22 07:11:07 2022
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
AWS Load Balancer controller installed!
Tag your Subnets for auto-discovery
Proceed to your AWS console and tag all your subnets for auto-discovery (https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.1/deploy/subnet_discovery/)
