Kubernetes 中工作节点上的连接被拒绝错误
Posted
技术标签:
【中文标题】Kubernetes 中工作节点上的连接被拒绝错误【英文标题】:Connection refused error on worker node in kubernetes 【发布时间】:2020-12-11 20:09:27 【问题描述】:我正在 kubernetes 中设置一个 2 节点集群。 1个主节点和1个从节点。 设置主节点后,我在工作节点上执行了 docker、kubeadm、kubelet、kubectl 的安装步骤,然后运行 join 命令。在主节点上,我看到 2 个处于就绪状态的节点(主节点和工作节点),但是当我尝试在工作节点上运行任何 kubectl 命令时,出现如下所示的连接被拒绝错误。我没有看到任何 admin.conf 并且在 .kube/config 中没有设置任何内容。这些文件是否也需要在工作节点上?如果是这样,我怎么得到它?如何解决以下错误?感谢您的帮助
root@kubework:/etc/kubernetes# kubectl 获取节点 与服务器 localhost:8080 的连接被拒绝 - 您是否指定了正确的主机或端口?
root@kubework:/etc/kubernetes# kubectl cluster-info
要进一步调试和诊断集群问题,请使用“kubectl cluster-info dump”。 与服务器 localhost:8080 的连接被拒绝 - 您是否指定了正确的主机或端口? root@kubework:/etc/kubernetes#
【问题讨论】:
【参考方案1】:是的,需要这些文件。将这些文件移动到工作节点上相应的 .kube/config 文件夹中。
【讨论】:
我从哪里得到这些文件?我在工作节点的 /etc/Kubernetes/ 中没有 admin.conf 文件,这就是我收到连接被拒绝错误的原因?【参考方案2】:root@kubework:/etc/kubernetes# kubectl get nodes 到的连接 服务器 localhost:8080 被拒绝 - 您是否指定了正确的主机或 港口?
Kubcetl 默认配置并在主服务器上运行。它需要一个 kube-apiserver pod 和 ~/.kube/config
。
对于工作节点,我们不需要使用 kube-apiserver,但我们想要的是使用主配置通过它。
为了实现它,我们必须将 ~/.kube/config
文件从 master 复制到 worker 上的 ~/.kube/config
。用户在 worker 和 master 上执行 kubcetl 的值 ~
(当然可能不同)。
完成后,您可以在工作节点上使用 kubectl
命令,就像在主节点上一样。
【讨论】:
谢谢大卫。将 admin.conf 从主节点复制到工作节点 @~/.kube/config 后,它工作正常 欢迎你 Nitish !不要犹豫,接受我的回答:) @davidxxx 嗨,David,您的意思是在实时场景中,通常不需要在工作节点上运行 kubectl 命令?我可以知道如何将配置文件从主节点移动到工作节点解决问题。谢谢【参考方案3】:即使使用kubectl on master node
作为非 root 帐户,这也是预期的行为,默认情况下,此配置文件为 root 帐户存储在 /etc/kubernetes/admin.conf
:
要让 kubectl 为您的非 root 用户工作,请运行这些命令,这些命令也是 kubeadm init 输出的一部分:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
或者在master上,如果你是root用户,你可以运行:
export KUBECONFIG=/etc/kubernetes/admin.conf
可选Controlling your cluster from machines other than the control-plane node
scp root@<control-plane-host>:/etc/kubernetes/admin.conf .
kubectl --kubeconfig ./admin.conf get nodes
Note:
KUBECONFIG 环境变量 包含 kubeconfig 文件 的列表。对于 Linux 和 Mac,列表以冒号分隔。对于 Windows,该列表以分号分隔。 KUBECONFIG 环境变量不是必需的。 如果 KUBECONFIG 环境变量不存在,kubectl 使用默认的 kubeconfig 文件 $HOME/.kube/config。
【讨论】:
【参考方案4】:我尝试了许多将 /etc/kubernetes/admin.conf 复制到 ~/.kube/config 的解决方案。但没有一个对我有用。
我的操作系统是 ubuntu,通过删除、清除和重新安装以下内容得到解决:
-
sudo dpkg -r kubeadm kubectl
sudo dpkg -P kubeadm kubectl
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" (再次下载kubectl,这确实有效)李>
kubectl 获取节点
名称状态角色年龄版本
mymaster Ready 控制平面,master 31h v1.20.4
myworker Ready 31h v1.20.4
【讨论】:
【参考方案5】:Davidxxx 的解决方案对我有用。
就我而言,我发现工作节点中存在以下路径的文件:
/etc/kubernetes/kubelet.conf
您可以将其复制到 ~/.kube/config 中,它也可以正常工作。我自己测试过。
【讨论】:
【参考方案6】:如果我尝试以下命令,
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/kubelet.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
收到此错误
[vikram@node2 ~]$ kubectl version
Error in configuration:
* unable to read client-cert /var/lib/kubelet/pki/kubelet-client-current.pem for default-auth due to open /var/lib/kubelet/pki/kubelet-client-current.pem: permission denied
* unable to read client-key /var/lib/kubelet/pki/kubelet-client-current.pem for default-auth due to open /var/lib/kubelet/pki/kubelet-client-current.pem: permission denied
那么这确实是一种解决方法而不是修复方法。
sudo kubectl --kubeconfig /etc/kubernetes/kubelet.conf version
能够通过将 kubelet-client-current.pem 从 /var/lib/kubelet/pki/ 复制到 $HOME 内的位置并修改以反映 HOME/.kube/config 中证书的路径来修复它文件。这正常吗?
【讨论】:
以上是关于Kubernetes 中工作节点上的连接被拒绝错误的主要内容,如果未能解决你的问题,请参考以下文章