Skip to main content

Deploy the Controller

Follow these instructions to deploy the AWS Load Balancer Controller with Gateway API support.

The prepare-environment step has already installed the Gateway API CRDs and created the necessary IAM roles. Now we'll install the AWS Load Balancer Controller using Helm.

Install the AWS Load Balancer Controller with Gateway API support enabled:

~$helm repo add eks-charts https://aws.github.io/eks-charts
~$helm upgrade --install aws-load-balancer-controller eks-charts/aws-load-balancer-controller \
--version "${LBC_CHART_VERSION}" \
--namespace "kube-system" \
--set "clusterName=${EKS_CLUSTER_NAME}" \
--set "serviceAccount.name=aws-load-balancer-controller-sa" \
--set "serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn"="$LBC_ROLE_ARN" \
--set "defaultTargetType=ip" \
--wait
Release "aws-load-balancer-controller" does not exist. Installing it now.
NAME: aws-load-balancer-controller
LAST DEPLOYED: [...]
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
AWS Load Balancer controller installed!

The controller will now be running as a deployment:

~$kubectl get deployment -n kube-system aws-load-balancer-controller
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
aws-load-balancer-controller   2/2     2            2           30s

Confirm that the Gateway API CRDs are available in the cluster:

~$kubectl get crds | grep gateway
gatewayclasses.gateway.networking.k8s.io              [...]
gateways.gateway.networking.k8s.io                    [...]
httproutes.gateway.networking.k8s.io                  [...]
referencegrants.gateway.networking.k8s.io             [...]

Currently there are no Gateway resources in our cluster:

~$kubectl get gateway -A
No resources found

There are also no HTTPRoute resources:

~$kubectl get httproute -A
No resources found

With the controller deployed, we're ready to create Gateway API resources to expose our application through an Application Load Balancer.