kubernetes dashboard创建后无法打开页面问题解决方法

xiaoxiao2025-10-10  21

错误现象:

当我们创建完k8s dashboard,试图访问web ui界面的时候如:

dashboard访问地址;http://172.16.16.15:8080/ui

抛出如下错误:

Error: 'dial tcp 172.16.59.2:9090: getsockopt: connection timed out' Trying to reach: 'http://172.16.59.2:9090/'

原因分析:

为什么访问的是8080端口被重定向到了不同的ip和不同的端口呢?

这是因为:

我们首先是通过在 master节点ip:8080/ui  (apiserver restful api外部交互总入口)端口去访问dashboard,然后具体的dashboard pod却是在minion/node节点上通过kubelet创建部署的,所以不同的ip和端口就是你实际在Minion/Node节点所创建的ip地址和端口即其访问端点endpoint。9090应该是你创建dashboard的yaml中自己配置pod的访问端口。

可以通过在master节点使用命令,查看dashboard pod的ip地址。

kubectl describe pod kubernetes-dashboard-3636564265-kf68m --namespace kube-system

 

[root@CentOS kubernetes]# kubectl describe pod kubernetes-dashboard-3636564265-cgk8r --namespace kube-system Name: kubernetes-dashboard-3636564265-cgk8r Namespace: kube-system Node: localhost13/172.16.16.13 Start Time: Mon, 29 Oct 2018 14:37:25 +0800 Labels: k8s-app=kubernetes-dashboard pod-template-hash=3636564265 Status: Running IP: 172.16.59.2 Controllers: ReplicaSet/kubernetes-dashboard-3636564265

其中kubernetes-dashboard-3636564265-kf68m是pod的名字,可以通过命下面令得到

kubectl get pods --all-namespaces

其中 --all-namespaces 是表示所有命名空间。

因此,问题就明确了,是因为从Master节点无法访问Node节点pod ip+端口而导致的错误。

解决方法

1.关闭iptables防火墙 (如果是防火墙原因导致的master节点无法ping通node之上的Pod节点)

systemctl stop iptables systemctl disable iptables

即使关闭了防火墙跨主机间容器、pod始终无法ping通

这是由于linux还有底层的iptables,所以在node上分别执行:

iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -L -n

问题完美解决

如果从主节点ping Node节点Pod ip地址可以ping通,则查看web ui应该没有问题了。

[root@CentOS kubernetes]# ping 172.16.59.2 PING 172.16.59.2 (172.16.59.2) 56(84) bytes of data. 64 bytes from 172.16.59.2: icmp_seq=1 ttl=63 time=0.568 ms 64 bytes from 172.16.59.2: icmp_seq=2 ttl=63 time=0.486 ms 64 bytes from 172.16.59.2: icmp_seq=3 ttl=63 time=0.460 ms 64 bytes from 172.16.59.2: icmp_seq=4 ttl=63 time=0.485 ms

2.由于关闭或者重启docker而导致的网络未更新问题引起。

Master节点启动 注意先启动kubernetes,再启动docker(如果是关闭docker或者重启docker导致的网络问题,重启master和node节点,注意重启顺序)

主Master节点重启顺序

systemctl enable docker

systemctl enable etcd kube-apiserver kube-scheduler kube-controller-manager

systemctl restart etcd kube-apiserver kube-scheduler kube-controller-manager

systemctl restart flanneld docker

#网络相关后启动 flanneld和docker 重置网络

Node从节点重启顺序

systemctl restart kubelet kube-proxy

systemctl restart flanneld docker

#网络相关后启动 flanneld 和 docker 重置网络

systemctl enable flanneld kubelet kube-proxy docker

3.如果还不行,重新删除安装一下dashboard即可

kubectl delete -f dashboard-controller.yaml kubectl delete -f dashboard-service.yaml kubectl create -f dashboard-controller.yaml kubectl create -f dashboard-service.yaml

yaml文件名请使用你自己创建pod的文件名。

一般通过上述三种方法即可解决。

转载请注明原文地址: https://www.6miu.com/read-5037696.html

最新回复(0)