<p>I'm currently trying to deploy NGINX Ingress Controller on my AWS eks Cluster.
I have 4 nodes running:</p>
<pre><code>NAME                            STATUS   ROLES    AGE     VERSION
ip-10-230-35-48.ec2.internal    Ready    &lt;none&gt;   7h44m   v1.19.6-eks-49a6c0
ip-10-230-39-9.ec2.internal     Ready    &lt;none&gt;   7h42m   v1.19.6-eks-49a6c0
ip-10-230-42-241.ec2.internal   Ready    &lt;none&gt;   7h49m   v1.19.6-eks-49a6c0
ip-10-230-49-228.ec2.internal   Ready    &lt;none&gt;   7h46m   v1.19.6-eks-49a6c0
</code></pre>
<p>I'm deploying my <code>ingress-nginx-controller</code> with the <a href="https://kubernetes.github.io/ingress-nginx/deploy/#aws" rel="nofollow noreferrer">NGINX Ingress Controller Installation guide</a> and using the <a href="https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.44.0/deploy/static/provider/aws/deploy-tls-termination.yaml" rel="nofollow noreferrer">deploy-tls-termination.yaml</a></p>
<p>For some reasons the AWS <code>ELB</code> is not marking all the nodes as healthy and gives the following errors:</p>
<pre><code>Instance has failed at least the UnhealthyThreshold number of health checks consecutively.
</code></pre>
<p>The only node marked as healthy is the node where the <code>ingress-nginx-controller</code> is deployed.
<a href="https://i.stack.imgur.com/r6x4t.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/r6x4t.png" alt="enter image description here" /></a></p>
<p>Am I missing something in my yaml configuration file? Or should I deploy one <code>ingress-nginx-controller</code> per <code>Availibity Zone</code>? If so, how?</p>
<p>Thank you</p>

<p>This is expected behavior when <code>externalTrafficPolicy</code> is set to <code>Local</code> in the service (which is what you have). With <code>externalTrafficPolicy: Local</code> , you don't get any extra hops - once the traffic arrives at the node, it doesn't leave the node.
Load Balancer will send traffic only to the nodes where the Ingress Controller pods are running. On the other nodes, the health check will return 503 and will be treated as unhealthy.</p>
<p>Change the <code>externalTrafficPolicy</code> to <code>Cluster</code> if you want all nodes to be healthy.</p>
<p>This is generally not recommended though as by doing this the client's IP address is not propagated to the end Pods. But this is only true for NLB's and not Classic Elastic Load Balancers. So, best is to use NLB with nginx ingress controller. If you still want all nodes to be healthy, stick with Local policy &amp; use a daemon set.</p>
<p>Official <a href="https://kubernetes.io/docs/concepts/services-networking/service/#aws-nlb-support" rel="nofollow noreferrer">documentation</a> around this.</p>
