<p>The external IP is perfectly reachable from outside the cluster. It's perfectly reachable from all nodes within the cluster. However, when I try to telnet to the URL from a pod within the cluster that is not on the same node as a pod that is part of the service backend, the connection always times out.</p>
<p>The external IP is reachable by pods that run on the same node as a pod that is part of the service backend.</p>
<p>All pods can perfectly reach the cluster IP of the service.</p>
<p>When I set externalTrafficPolicy to Cluster, the pods are able to reach the external URL regardless of what node they're on.</p>
<p>I am using iptables proxying and kubernetes 1.16</p>
<p>I'm completely at a loss here as to why this is happening. Is someone able to shed some light on this?</p>

Jatinshravan
<p>From the official doc <a href="https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/" rel="nofollow noreferrer">here</a>,</p>
<blockquote>
<p>service.spec.externalTrafficPolicy - denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. There are two available options: Cluster (default) and Local. Cluster obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading. Local preserves the client source IP and avoids a second hop for LoadBalancer and NodePort type services, but risks potentially imbalanced traffic spreading.</p>
</blockquote>
<p>The service could be either <strong>node-local</strong> or <strong>cluster-wide</strong> endpoints. When you define the <code>externalTrafficPolicy</code> as <code>Local</code>, it means node-local. So, other nodes are not able to reach it.</p>
<p>So, you will need to set the <code>externalTrafficPolicy</code> as <code>Cluster</code> instead.</p>
