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

错误现象:

当我们创建完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的文件名。

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

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值