<p>I am deploying k8s in a private lab and using --external-ip option in the k8s service:</p>

<pre><code>Name:              my-service
Namespace:         default
Labels:            &lt;none&gt;
Annotations:       &lt;none&gt;
Selector:          app=myapp
Type:              ClusterIP
IP:                10.98.4.250
External IPs:      10.10.16.21
Port:              http  80/TCP
TargetPort:        80/TCP
Endpoints:         192.168.237.3:80

Session Affinity:  None
Events:            &lt;none&gt;


user@k8s-master:~$ kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1     &lt;none&gt;        443/TCP   22h
my-service   ClusterIP   10.98.4.250   10.10.16.21   80/TCP    7m
</code></pre>

<p>But I can only curl the endpoint from the same node (k8s-master) via the External IP. If I use other node (which is the same subnet as k8s-master), curl will not work.</p>

<p>Running tcpdump and I can see the http request is coming thru but there is no reply.</p>

<p>How does External IP work in service?</p>

<p>If you check the kubectl source code in <a href="https://github.com/kubernetes/kubernetes/search?q=external-ip&amp;unscoped_q=external-ip" rel="nofollow noreferrer">github</a>, you would find that <code>external-ip</code> is only documented in <code>kubectl expose</code> with the description as following:</p>

<blockquote>
  <p>cmd.Flags().String("external-ip", "", i18n.T("Additional external IP
  address (not managed by Kubernetes) to accept for the service. If this
  IP is routed to a node, the service can be accessed by this IP in
  addition to its generated service IP."))</p>
</blockquote>

<p>When adding <code>external-ip</code> parameters to a service, Kubernete would likely to do nothing as it does not manage the behavior of this IP nor its routing inside the cluster. It just assumes that this IP would be routed to a node in the cluster. It would be treated same as the generated service IP. </p>

<p>To have an external IP working, configurations similar to Service type <code>LoadBalancer</code> or <code>NodePort</code> should be applied. I think it is just more of an annotation purpose.</p>
