<p>I have setup a local kubernetes cluster, using vagrant. Have assigned 2 nw interfaces for each vagrant box public and private.</p>

<p>kubectl get nodes -o wide</p>

<pre><code>NAME         STATUS   ROLES    AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   
OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
kubemaster   Ready    master   14h   v1.12.2   192.168.33.10   &lt;none&gt;        
Ubuntu 16.04.5 LTS   4.4.0-137-generic   docker://17.3.2
kubenode2    Ready    &lt;none&gt;   14h   v1.12.2   10.0.2.15       &lt;none&gt;        
Ubuntu 16.04.5 LTS   4.4.0-138-generic   docker://17.3.2
</code></pre>

<p>While initiating kubeadm on master, i ran ip advertise and gave ip as 192.168.33.10 of master.</p>

<p>My reall issue was i am not able to login to any pod. </p>

<pre><code>kubectl exec -ti web /bin/bash
</code></pre>

<blockquote>
  <p>error: unable to upgrade connection: pod does not exist</p>
</blockquote>

batman
<p>It's because vagrant, in its default configuration, will have a NAT <code>public_network</code>, usually eth0, and then any additional network interfaces -- such as what is likely a host-only interface on 192.168.33.10</p>

<p>You need to change the kubelet configuration -- and possibly your CNI provider -- to bind and advertise the IP address of <code>kubenode2</code> that's in a subnet your machine can reach. Unidirectional traffic from <code>kubenode2</code> can likely reach <code>kubemaster</code> over the NAT IP, but almost by definition your machine cannot reach anything behind the NAT IP, thus the connection failure when trying to reach the kubelet port</p>
