kubectl:无法连接到服务器:拨打tcp 192.168.214.136:6443:connect:主机没有路由

时间:2019-05-20 11:46:32

标签: kubernetes ip admin hostname vmware-workstation

我最近在VMware上安装了kubernetes,还配置了一些Pod,在配置这些Pod时,它会自动使用VMware的IP进行配置。在此期间,我能够访问该应用程序,但是最近我重新启动了VM和托管该VM的计算机,在此期间-我猜现在VM的IP已更改-使用命令时出现以下错误:

kubectl获取pod -n

userX@ubuntu:~$ kubectl get pod -n NameSpaceX
Unable to connect to the server: dial tcp 192.168.214.136:6443: connect: no route to host```

userX@ubuntu:~$ kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.1", GitCommit:"b7394102d6ef778017f2ca4046abbaa23b88c290", GitTreeState:"clean", BuildDate:"2019-04-08T17:11:31Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
Unable to connect to the server: dial tcp 192.168.214.136:6443: connect: no route to host

kubectl cluster-info以及其他相关命令给出相同的输出。 在VMware工作站设置中,我们正在使用共享主机IP地址设置的网络适配器。我们不确定它是否有影响。

我们还尝试在/ etc / hosts中添加以下条目,它不起作用。

127.0.0.1本地主机\ n 192.168.214.136本地主机\ n 127.0.1.1 ubuntu

我希望再次运行Pod来访问应用程序。我们正在寻找快速的解决方法,以便Pod恢复到运行状态,而不是重新安装所有的Pod,这很耗时。

5 个答案:

答案 0 :(得分:5)

如果您使用minikube,有时您要做的一切只是重启minikube

运行:minikube启动

答案 1 :(得分:0)

在运行kubectl命令之前,您需要将admin.conf文件导出为kubeconfig。您可以将其作为环境变量

export kubeconfig=<path>/admin.conf

在此之后,您应该能够运行kubectl命令。我希望您的K8S群集设置正确。

答案 2 :(得分:0)

通常的做法是将配置文件复制到主目录

sudo cp /etc/kubernetes/admin.conf ~/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config

此外,请确保api服务器地址有效。

server: https://<master-node-ip>:6443

如果没有,则可以使用任何文本编辑器手动对其进行编辑。

答案 3 :(得分:0)

昨晚,我使用此人偶模块安装Kubernetes时遇到了完全相同的错误:https://forge.puppet.com/puppetlabs/kubernetes

事实证明,主机中的iptables设置不正确,它阻止了对api的所有非本地请求。

我解决它的方法(bruteforce解决方案)是

  1. 完全删除所有已安装的k8s相关软件(以及所有配置文件,etcd数据,docker映像,已安装的tmpfs文件系统等)
  2. 完全擦拭iptables https://serverfault.com/questions/200635/best-way-to-clear-all-iptables-rules
  3. 重新安装

这就是解决我的问题的方法。

可能有一种更好,更干净的方法(例如,只需更改iptables规则以允许访问)。

答案 4 :(得分:0)

我遇到了同样的问题-问题是主节点没有在外部暴露端口6443。

下面是我修复它的步骤。

1)。检查api服务器的IP。
可以通过.kube/config文件(在 server 字段下)或使用以下命令进行验证:
kubectl describe pod/kube-apiserver-<master-node-name> -n kube-system

2)运行curl https://<kube-apiserver-IP>:6443,查看端口6443是否打开。

3)如果端口为6443,则应该获得与证书相关的信息,例如:

curl: (60) SSL certificate problem: unable to get local issuer certificate

4):如果端口6443未打开:
4.A)SSH进入主节点。
4.B)运行sudo firewall-cmd --add-port=6443/tcp --permanent(我假设安装了firewalld)。

4.C)运行sudo firewall-cmd --reload

4.D)运行sudo firewall-cmd --list-all,您应该看到端口6443已更新:

public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client ssh
  ports: 6443/tcp <---- Here
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: