No controller claims the Ingress
ADDRESS empty no events Ingress Class: <none>
What you see
$ kubectl get ingress orders -n shop
NAME CLASS HOSTS ADDRESS PORTS AGE
orders <none> * 80 20m
$ kubectl describe ingress orders -n shop | tail -2
Annotations: alb.ingress.kubernetes.io/scheme: internet-facing
Events: <none>No address and not a single event: nothing is even trying. The AWS Load Balancer Controller only reconciles an Ingress whose class points at it, and it records an event on every attempt, success or failure. Silence means the class is wrong or missing, or the controller isn't running.
Confirm
# Which IngressClasses exist, and which controller owns each?
kubectl get ingressclass
# NAME CONTROLLER PARAMETERS AGE
# alb ingress.k8s.aws/alb <none> 41d
# The class this Ingress asks for (empty = none set)
kubectl get ingress orders -n shop -o jsonpath='{.spec.ingressClassName}{"\n"}'
# Is the controller running?
kubectl get deployment aws-load-balancer-controller -n kube-systemThe Ingress's ingressClassName must name a class whose controller is ingress.k8s.aws/alb (the AWS Load Balancer Controller). An Ingress with no class is only picked up if some IngressClass is marked default with ingressclass.kubernetes.io/is-default-class: "true". On EKS Auto Mode the built-in controller is eks.amazonaws.com/alb, and you create its IngressClass yourself.
Fix
- No or wrong class: set
spec.ingressClassName: alb(or whateverkubectl get ingressclasslists for the controller). The oldkubernetes.io/ingress.classannotation still works and wins over the field, so remove a stale one that names another controller. - Controller not installed: install the AWS Load Balancer Controller with Helm, with an IAM role (Pod Identity or IRSA) that has its published IAM policy, and with
clusterNameset to your cluster's name. On EKS Auto Mode it's built in; create an IngressClass foreks.amazonaws.com/alb. - Controller installed but not Ready: read its logs (
kubectl logs -n kube-system deploy/aws-load-balancer-controller). A crash right at start is usually a missingclusterName, or the controller can't reach the instance metadata service to find its VPC (setvpcIdandregionin the Helm values).
Prevent
- Always set
ingressClassNameexplicitly in your charts; don't rely on a default class that a cluster may or may not have. - Install the controller with the cluster (as code), and alert when its Deployment has no ready replicas.