You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

执行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段可以访问该端口

4. 版本兼容性检查(可选)

Kubernetes官方建议客户端和API服务器的版本差不超过1个小版本(比如1.9~1.11),你的kubectl客户端是1.10.3,等网络问题解决后,可以执行kubectl version查看服务器版本,如果版本差过大,考虑升级客户端或者集群版本

内容的提问来源于stack exchange,提问作者Jeremie

火山引擎 最新活动