Help improve this page
Want to contribute to this user guide? Scroll to the bottom of this page and select Edit this page on GitHub. Your contributions will help make our user guide better for everyone.
Install AWS Load Balancer Controller with manifests
Tip
With Amazon EKS Auto Mode, you don’t need to install or upgrade networking add-ons. Auto Mode includes pod networking and load balancing capabilities.
For more information, see Automate cluster infrastructure with EKS Auto Mode.
This topic describes how to install the controller by downloading and applying Kubernetes manifests. You can view the full documentation
In the following steps, replace the example values
with your own values.
Prerequisites
Before starting this tutorial, you must install and configure the following tools and resources that you need to create and manage an Amazon EKS cluster.
-
An existing Amazon EKS cluster. To deploy one, see Get started with Amazon EKS.
-
An existing AWS Identity and Access Management (IAM) OpenID Connect (OIDC) provider for your cluster. To determine whether you already have one, or to create one, see Create an IAM OIDC provider for your cluster.
-
Make sure that your Amazon VPC CNI plugin for Kubernetes,
kube-proxy
, and CoreDNS add-ons are at the minimum versions listed in Service account tokens. -
Familiarity with AWS Elastic Load Balancing. For more information, see the Elastic Load Balancing User Guide.
Step 1: Configure IAM
Note
You only need to create a role for the
AWS Load Balancer Controller one per AWS account. Check if AmazonEKSLoadBalancerControllerRole
exists in the IAM Console
Note
Below example is referring to the
AWS Load Balancer Controller
v2.11.0 release version. For more inforamtion about all releases, see the AWS Load Balancer Controller Release Page
-
Download an IAM policy for the AWS Load Balancer Controller that allows it to make calls to AWS APIs on your behalf.
-
Create an IAM policy using the policy downloaded in the previous step.
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
Note
If you view the policy in the AWS Management Console, the console shows warnings for the ELB service, but not for the ELB v2 service. This happens because some of the actions in the policy exist for ELB v2, but not for ELB. You can ignore the warnings for ELB.
Step 2: Install cert-manager
Install cert-manager
using one of the following methods to inject certificate configuration into the webhooks. For more information, see Getting Started
We recommend using the quay.io
container registry to install cert-manager
. If your nodes do not have access to the quay.io
container registry, Install cert-manager
using Amazon ECR (see below).
Step 3: Install AWS Load Balancer Controller
-
Download the controller specification. For more information about the controller, see the documentation
on GitHub. curl -Lo v2_11_0_full.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.11.0/v2_11_0_full.yaml
-
Make the following edits to the file.
-
If you downloaded the
v2_11_0_full.yaml
file, run the following command to remove theServiceAccount
section in the manifest. If you don’t remove this section, the required annotation that you made to the service account in a previous step is overwritten. Removing this section also preserves the service account that you created in a previous step if you delete the controller.sed -i.bak -e '690,698d' ./v2_11_0_full.yaml
If you downloaded a different file version, then open the file in an editor and remove the following lines.
apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/name: aws-load-balancer-controller name: aws-load-balancer-controller namespace: kube-system ---
-
Replace
your-cluster-name
in theDeployment
spec
section of the file with the name of your cluster by replacingmy-cluster
with the name of your cluster.sed -i.bak -e 's|your-cluster-name|my-cluster|' ./v2_11_0_full.yaml
-
If your nodes don’t have access to the Amazon EKS Amazon ECR image repositories, then you need to pull the following image and push it to a repository that your nodes have access to. For more information on how to pull, tag, and push an image to your own repository, see Copy a container image from one repository to another repository.
public.ecr.aws/eks/aws-load-balancer-controller:v2.11.0
Add your registry’s name to the manifest. The following command assumes that your private repository’s name is the same as the source repository and adds your private registry’s name to the file. Replace
111122223333.dkr.ecr.region-code.amazonaws.com
with your registry. This line assumes that you named your private repository the same as the source repository. If not, change theeks/aws-load-balancer-controller
text after your private registry name to your repository name.sed -i.bak -e 's|public.ecr.aws/eks/aws-load-balancer-controller|111122223333.dkr.ecr.region-code.amazonaws.com/eks/aws-load-balancer-controller|' ./v2_11_0_full.yaml
-
(Required only for Fargate or Restricted IMDS)
If you’re deploying the controller to Amazon EC2 nodes that have restricted access to the Amazon EC2 instance metadata service (IMDS)
, or if you’re deploying to Fargate or Amazon EKS Hybrid Nodes, then add the following parameters
under- args:
.[...] spec: containers: - args: - --cluster-name=your-cluster-name - --ingress-class=alb - --aws-vpc-id=vpc-xxxxxxxx - --aws-region=region-code [...]
-
-
Apply the file.
kubectl apply -f v2_11_0_full.yaml
-
Download the
IngressClass
andIngressClassParams
manifest to your cluster.curl -Lo v2_11_0_ingclass.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.11.0/v2_11_0_ingclass.yaml
-
Apply the manifest to your cluster.
kubectl apply -f v2_11_0_ingclass.yaml
Step 4: Verify that the controller is installed
-
Verify that the controller is installed.
kubectl get deployment -n kube-system aws-load-balancer-controller
An example output is as follows.
NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 2/2 2 2 84s
You receive the previous output if you deployed using Helm. If you deployed using the Kubernetes manifest, you only have one replica.
-
Before using the controller to provision AWS resources, your cluster must meet specific requirements. For more information, see Route application and HTTP traffic with Application Load Balancers and Route TCP and UDP traffic with Network Load Balancers.