<p>I have a deployment and serivce of my application running in my AWS EKS cluster the service is exposed as loadbalancer of type NLB by adding this annotation <strong>service.beta.kubernetes.io/aws-load-balancer-type: nlb</strong> however when i tried to switch it to ALB by changing the annotation to <strong>service.beta.kubernetes.io/aws-load-balancer-type: alb</strong> it created a classic loadbalancer which means that this annotation is not taken into consideration, so is there any way to expose the service on ALB ?</p>

<p>You need to use the <a href="https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html" rel="noreferrer">ALB Ingress Controller</a>.</p>
<blockquote>
<p>The AWS ALB Ingress Controller for Kubernetes is a controller that triggers the creation of an Application Load Balancer (ALB) and the necessary supporting AWS resources whenever an Ingress resource is created on the cluster with the kubernetes.io/ingress.class: alb annotation.</p>
</blockquote>
<p>This is the <a href="https://github.com/kubernetes-sigs/aws-alb-ingress-controller" rel="noreferrer">git-repo</a>, and these are the <a href="https://kubernetes-sigs.github.io/aws-alb-ingress-controller/guide/ingress/annotation/" rel="noreferrer">annotations</a> you can include on your Ingress, and this is <a href="https://hub.helm.sh/charts/incubator/aws-alb-ingress-controller" rel="noreferrer">the helm chart</a> you can use to deploy it if you prefer.</p>
<p>As an anecdote, it works great.  The only downside is it creates one ALB per Ingress.  To get around this I have been using the <a href="https://github.com/jakubkulhan/ingress-merge" rel="noreferrer">merge-ingress-controller</a> in conjunction with it, which results in one ALB for multiple ingresses.</p>
