<p>I am trying to follow this tutorial:
<a href="https://www.digitalocean.com/community/tutorials/how-to-create-a-kubernetes-cluster-using-kubeadm-on-ubuntu-18-04" rel="nofollow noreferrer">https://www.digitalocean.com/community/tutorials/how-to-create-a-kubernetes-cluster-using-kubeadm-on-ubuntu-18-04</a></p>

<p>Important difference: 
I need to run the <code>master</code> on a specific node, and the <code>worker</code> nodes are <em>from different</em> regions on AWS. </p>

<p>So it all went well until I wanted to join the nodes (step 5). The command succeeded but <code>kubectl get nodes</code> still only showed the <code>master</code> node.</p>

<p>I looked at the <code>join</code> command and it contained the <code>master</code> 's <strong>private</strong> ip address:
<code>join 10.1.1.40</code>. I guess that can not work if the workers are in a different region (note: later we probably need to add nodes from different providers even, so if there is no important security threat, it should work via public IPs).</p>

<p>So while <code>kubeadm init pod-network-cidr=10.244.0.0/16</code> initialized the cluster but with this internal IP, I then tried with
<code>kubeadm init  --apiserver-advertise-address &lt;Public-IP-Addr&gt; --apiserver-bind-port 16443  --pod-network-cidr=10.244.0.0/16</code></p>

<p>But then it always hangs, and init does not complete. The kubelet log prints lots of </p>

<p><code>E0610 19:24:24.188347 1051920 kubelet.go:2267] node "ip-x-x-x-x" not found</code></p>

<p>where "ip-x-x-x-x" seems to be the master's node hostname on AWS.</p>

transient_loop
<p>I think what made it work is that I set the master's hostname to its <strong>public</strong> DNS name, and then used that as <code>--control-plane-endpoint</code> argument..., without <code>--apiserver-advertise-address</code> (but with the <code>--apiserver-bind-port</code> as I need to run it on another port).</p>

<p>Need to have it run longer to confirm but so far looks good.</p>
