执行kubectl apply命令报错无法连接服务器,求解决方法
解决Kubectl无法连接服务器的
no route to host问题 先梳理下你的环境和问题细节:
你用来部署Tomcat的YAML配置如下:
apiVersion: apps/v1beta2 kind: Deployment metadata: name: tomcat-deployment spec: selector: matchLabels: app: tomcat replicas: 1 template: metadata: labels: app: tomcat spec: containers: - name: tomcat image: tomcat:9.0 ports: - containerPort: 8080
执行kubectl apply -f ./deployment.yaml时触发了网络错误:
Unable to connect to the server: dial tcp 192.168.99.100:8443: getsockopt: no route to host
你的kubectl客户端版本信息:
version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
这个错误核心是本地kubectl客户端无法和Kubernetes集群的API服务器(192.168.99.100:8443)建立网络连接,咱们一步步排查解决:
1. 先确认集群节点的运行状态
从192.168.99.100这个IP来看,你大概率用的是Minikube(这是Minikube虚拟机的默认IP段):
- 执行
minikube status检查Minikube是否在运行:- 如果输出显示
Stopped,直接启动Minikube:minikube start - 如果是其他集群(比如kubeadm部署的),先ping目标节点:
ping 192.168.99.100,如果ping不通,说明节点本身离线,需要检查虚拟机/物理机是否正常启动,或者本地到节点的路由是否存在
- 如果输出显示
2. 验证kubectl的配置是否正确
- 查看当前kubectl使用的上下文:
kubectl config current-context,确认是不是你要连接的集群 - 查看kubeconfig中的服务器地址:
kubectl config view,找到clusters字段下的server值,确认是https://192.168.99.100:8443,如果地址错误,用命令更新:kubectl config set-cluster <你的集群名称> --server=https://正确的API服务器IP:8443
3. 检查端口和防火墙规则
- 测试8443端口是否可达:执行
telnet 192.168.99.100 8443或者nc -zv 192.168.99.100 8443,如果连接失败:- 对于Minikube:可以尝试重启Minikube重置网络:
minikube stop && minikube start,极端情况可以删除重建:minikube delete && minikube start - 对于其他集群:登录目标节点,检查防火墙(比如iptables、firewalld)是否放行8443端口的入站请求,确保客户端所在的IP段可以访问该端口
- 对于Minikube:可以尝试重启Minikube重置网络:
4. 版本兼容性检查(可选)
Kubernetes官方建议客户端和API服务器的版本差不超过1个小版本(比如1.9~1.11),你的kubectl客户端是1.10.3,等网络问题解决后,可以执行kubectl version查看服务器版本,如果版本差过大,考虑升级客户端或者集群版本
内容的提问来源于stack exchange,提问作者Jeremie




