You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的通信:
    kubectl exec -it kubernetes-dashboard-5f7b999d65-nnztw -n kube-system -- curl -v https://10.96.0.1:443/version
    
    如果这里出现超时,说明Pod到Service网段(10.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版本):
    kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
    
    然后重启Dashboard Pod:
    kubectl 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:43:16