Vagrant中Kubernetes Dashboard频繁重启且连接异常求助
解决Kubernetes Dashboard无法连接APIServer并频繁重启的问题
从你提供的集群状态和日志来看,Dashboard Pod反复重启的核心矛盾是无法与Kubernetes APIServer建立稳定的通信连接——虽然你能在节点层面telnet通10.96.0.1:443,但Pod内部出现的i/o timeout说明集群网络或权限配置存在隐性问题。结合你的集群环境,我整理了几个针对性的排查和修复步骤:
1. 优先验证Dashboard Pod内部的APIServer连通性
节点能访问APIServer的ClusterIP不代表Pod也能,这是K8s网络问题的常见误区:
- 执行命令进入Dashboard Pod内部,直接测试与APIServer的通信:
如果这里出现超时,说明Pod到Service网段(kubectl exec -it kubernetes-dashboard-5f7b999d65-nnztw -n kube-system -- curl -v https://10.96.0.1:443/version10.96.0.0/12)的路由存在问题,大概率是Calico网络插件的配置未完全生效,建议重启所有Calico相关Pod后再测试:kubectl delete pod -l k8s-app=calico-node -n kube-system kubectl delete pod -l k8s-app=calico-policy-controller -n kube-system
2. 修复kubelet配置文件缺失的问题
虽然你提到Master节点的kubelet运行正常,但failed to read kubelet config file "/var/lib/kubelet/config.yaml"这个错误会影响节点的网络转发、Pod网络初始化等核心能力,必须修复:
- 先检查Node节点上该文件是否存在:
ls -l /var/lib/kubelet/config.yaml - 如果文件不存在,从Master节点拷贝一份正确的配置到Node节点(假设Node节点IP为
192.168.50.11):scp /var/lib/kubelet/config.yaml vagrant@192.168.50.11:/var/lib/kubelet/ chmod 600 /var/lib/kubelet/config.yaml systemctl restart kubelet
3. 确认Dashboard的Service Account权限
Dashboard需要足够的权限访问APIServer,默认部署的ServiceAccount可能因权限不足导致连接失败:
- 检查Dashboard对应的ClusterRoleBinding是否存在:
kubectl get clusterrolebinding -n kube-system | grep kubernetes-dashboard - 如果不存在,手动创建权限绑定(适配K8s 1.14版本):
然后重启Dashboard Pod:kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboardkubectl delete pod kubernetes-dashboard-5f7b999d65-nnztw -n kube-system
4. 检查APIServer证书的SAN配置
你在kubeadm init时指定了--apiserver-cert-extra-sans="192.168.50.10",但Dashboard Pod访问的是ClusterIP10.96.0.1,需要确保APIServer证书包含这个IP作为备选名称:
- 查看APIServer证书的SAN信息:
如果输出中没有openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep -A 5 "Subject Alternative Name"IP:10.96.0.1,需要重新生成APIServer证书并重启kube-apiserver服务。
5. 开启Vagrant节点的IP转发功能
Vagrant虚拟机默认可能未开启IP转发,这会阻断K8s集群内部的跨节点网络通信:
- 在所有节点(Master和Node)上检查IP转发状态:
sysctl net.ipv4.ip_forward - 如果输出为
net.ipv4.ip_forward = 0,执行以下命令开启并永久生效:sysctl -w net.ipv4.ip_forward=1 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
按照上述步骤逐一排查,应该能解决Dashboard无法连接APIServer并频繁重启的问题。
内容的提问来源于stack exchange,提问作者DenCowboy
相关产品推荐
相关产品推荐

