kubernetes 无法 连接 到 服务 器 :拨号 TCP 连接 :连接 : 没有 到 主机 的 路由

kdfy810k  于 2022-11-21  发布在  Kubernetes
关注(0)|答案(9)|浏览(365)

我最近在VMware上安装了kubernetes,还配置了一些pod,在配置这些pod时,它会自动使用VMware的IP并进行配置。在此期间,我能够访问应用程序,但最近我重新启动了VM和托管VM的计算机,在此期间,我猜VM的IP发生了更改,现在,我在使用命令kubectl get pod -n <namspaceName>时遇到以下错误:

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 Workstation设置中,我们使用的是共享主机IP地址设置的网络适配器。我们不确定它是否会产生任何影响。
我们还尝试在/etc/hosts中添加以下条目,但它不起作用。

127.0.0.1       localhost \n
192.168.214.136 localhost \n
127.0.1.1       ubuntu

我希望再次运行pod以访问应用程序。而不是重新安装所有pod,这是耗时的-我们正在寻找快速的变通办法,使pod将回到运行状态。

lpwwtiir

lpwwtiir1#

如果你使用minikube有时你需要的只是重新启动minikube。
运行:minikube start

ykejflvf

ykejflvf2#

我 遇到 了 同样 的 问题 - 问题 是 主 节点 没有 将 端口 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:

格式

eivnm1vs

eivnm1vs3#

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

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

中 的 每 一 个
此外 , 请 确保 api-server 地址 有效 。

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

格式
如果 没有 , 您 可以 使用 任何 文本 编辑 器 手动 编辑 它 。

brqmpdu1

brqmpdu14#

在运行kubectl命令之前,需要将admin.conf文件导出为kubeconfig。

export kubeconfig=<path>/admin.conf

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

yh2wf1be

yh2wf1be5#

昨天晚上,我在使用这个puppet模块安装Kubernetes时遇到了完全相同的错误:https://forge.puppet.com/puppetlabs/kubernetes
原来是主服务器中的iptables设置不正确,导致所有非本地请求都被阻止发送到api。
我的解决方法(蛮力解决方案)是
1.完全删除所有已安装的k8s相关软件(以及所有配置文件、etcd数据、docker映像、已安装的tmpfs文件系统等)
1.彻底清除iptables
1.重新安装
这就是解决我案例中问题的方法。
可能有一个更好更干净的方法来做到这一点(即简单地更改iptables规则以允许访问)。

rwqw0loc

rwqw0loc6#

如果 你 得到 下面 的 错误 , 那么 你 也 检查 一 次 令牌 的 有效 性 。

Unable to connect to the server: dial tcp 192.168.93.10:6443: connect: no route to host

中 的 每 一 个
使用 命令 kubeadm token list 检查 令牌 有效 性 。 如果 令牌 已 过期 , 则 必须 使用 kubeadm reset 重置 群集 , 然后 使用 命令 kubeadm init --token-ttl 0 再次 初始 化 。
然后 再次 使用 kubeadm token list 检查 令牌 的 状态 。 注意 , 此处 TTL 值 将 为 <forever> , Expire 值 将 为 <never>
范例 : -

[root@master1 ~]# kubeadm token list
TOKEN                     TTL         EXPIRES   USAGES                   DESCRIPTION                                                EXTRA GROUPS
nh48tb.d79ysdsaj8bchms9   <forever>   <never>   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token

格式

kq4fsx7k

kq4fsx7k7#

Ubuntu 22.04 LTS截图

选择docker-desktop并再次运行命令,例如kubectl apply -f <myimage.yaml>

qxgroojn

qxgroojn8#

运行minikube start命令这背后的原因是当您关闭系统时,带有驱动程序停靠器的minikube群集停止

w9apscun

w9apscun9#

对于所有尝试在Oracle VM上使用Ubuntu学习和体验Kubernetes的用户:
IP地址是根据网络适配器选择分配给访客OS/VM的。根据您的网络适配器选择,您需要配置Oracle VM网络部分中的设置或路由器设置。
有关最常用的Oracle VM网络适配器,请参见链接。
https://www.nakivo.com/blog/virtualbox-network-setting-guide/
我使用的是桥适配器,它将VM和主机OS并行。所以我的路由器在每次重新启动后随机分配IP给我的VM,我的集群停止工作,并得到问题中发布的相同错误信息。

> k get pods -A
> Unable to connect to the server: dial tcp 192.168.214.136:6443: connect: no route to host
> systemctl status kubelet
> ........
> ........     "Error getting node" err="node \"node\" not found"

在路由器设置中为我的VM保留静态IP地址后,群集再次开始工作。(如果您正在使用NAT适配器,则应在VM网络设置中进行配置)
为VM保留IP地址时,请确保分配的IP地址与配置Kubelet时使用的IP地址相同。

相关问题