<p>I am using <a href="https://github.com/kubernetes-sigs/kubeadm-dind-cluster" rel="nofollow noreferrer">kubeadm-dind-cluster</a> a Kubernetes multi-node cluster for developer of Kubernetes and projects that extend Kubernetes. Based on kubeadm and DIND (Docker in Docker).</p>

<p>I have a fresh Centos 7 install on which I have just run <code>./dind-cluster-v1.13.sh up</code>. I did not set any other values and am using all the default values for networking.</p>

<p>All appears well:</p>

<pre><code>[root@node01 dind-cluster]# kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
kube-master   Ready    master   23h   v1.13.0
kube-node-1   Ready    &lt;none&gt;   23h   v1.13.0
kube-node-2   Ready    &lt;none&gt;   23h   v1.13.0

[root@node01 dind-cluster]# kubectl config view
apiVersion: v1
clusters:
- cluster:
    insecure-skip-tls-verify: true
    server: http://127.0.0.1:32769
  name: dind
contexts:
- context:
    cluster: dind
    user: ""
  name: dind
current-context: dind
kind: Config
preferences: {}
users: []
[root@node01 dind-cluster]# kubectl cluster-info
Kubernetes master is running at http://127.0.0.1:32769
KubeDNS is running at http://127.0.0.1:32769/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@node01 dind-cluster]#
</code></pre>

<p>and it appears healthy:</p>

<pre><code>[root@node01 dind-cluster]# curl -w  '\n' http://127.0.0.1:32769/healthz
ok
</code></pre>

<p>I know the dashboard service is there:</p>

<pre><code>[root@node01 dind-cluster]# kubectl get services kubernetes-dashboard -n kube-system
NAME                   TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes-dashboard   NodePort   10.102.82.8   &lt;none&gt;        80:31990/TCP   23h
</code></pre>

<p>however any attempt to access it is refused:</p>

<pre><code>[root@node01 dind-cluster]# curl http://127.0.0.1:8080/api/v1/namespaces/kube-system/services/kubernetes-dashboard
curl: (7) Failed connect to 127.0.0.1:8080; Connection refused

[root@node01 dind-cluster]# curl http://127.0.0.1:8080/ui
curl: (7) Failed connect to 127.0.0.1:8080; Connection refused
</code></pre>

<p>I also see the following in the firewall log:</p>

<pre><code>2019-02-05 19:45:19 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -t nat -C DOCKER -p tcp -d 127.0.0.1 --dport 32769 -j DNAT --to-destination 10.192.0.2:8080 ! -i br-669b654fc9cd' failed: iptables: No chain/target/match by that name.

2019-02-05 19:45:19 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -t filter -C DOCKER ! -i br-669b654fc9cd -o br-669b654fc9cd -p tcp -d 10.192.0.2 --dport 8080 -j ACCEPT' failed: iptables: Bad rule (does a matching rule exist in that chain?).

2019-02-05 19:45:19 WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w2 -t nat -C POSTROUTING -p tcp -s 10.192.0.2 -d 10.192.0.2 --dport 8080 -j MASQUERADE' failed: iptables: No chain/target/match by that name.
</code></pre>

<p>Any suggestions on how I actually access the dashboard externally from my development machine? I don't want to use the proxy to do this.</p>

TheEdge
<p>You should be able to access <code>kubernetes-dashboard</code> using the following addresses:</p>

<p>ClusterIP(works for other pods in cluster):</p>

<pre><code>http://10.102.82.8:80/
</code></pre>

<p>NodePort(works for every host who can access cluster nodes using their IPs):</p>

<pre><code>http://clusterNodeIP:31990/
</code></pre>

<p>Usually Kubernetes dashboard uses <code>https</code> protocol, so you may need to use different ports in request to <code>kubernetes-dashboard</code> Service for that. </p>

<p>You can also access the dashboard using <code>kube-apiserver</code> as a proxy:</p>

<p>Directly to dashboard Pod:</p>

<pre><code>https://&lt;master-ip&gt;:&lt;apiserver-port&gt;/api/v1/namespaces/kube-system/pods/https:kubernetes-dashboard-pod-name:/proxy/#!/login
</code></pre>

<p>To dashboard ClusterIP service:</p>

<pre><code>https://&lt;master-ip&gt;:&lt;apiserver-port&gt;/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
</code></pre>

<p>I can guess that <code>&lt;master-ip&gt;:&lt;apiserver-port&gt;</code> would mean <code>127.0.0.1:32769</code> in your case.</p>
