kubernetes中工作节点上的连接拒绝错误

问题描述

我正在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集群信息

要进一步调试和诊断群集问题,请使用“ kubectl cluster-info dump”。 与服务器localhost:8080的连接被拒绝-您是否指定了正确的主机或端口? root @ kubework:/ etc / kubernetes#

解决方法

是,需要这些文件。将这些文件移动到工作节点上相应的.kube / config文件夹中。

,

root @ kubework:/ etc / kubernetes#kubectl获取节点与 服务器localhost:8080被拒绝-您指定了正确的主机还是 端口?

Kubcetl默认情况下已配置并在主服务器上运行。它需要一个kube-apiserver容器和~/.kube/config

对于辅助节点,我们不需要使用kube-apiserver,但我们要使用主配置来传递它。 为此,我们必须将~/.kube/config文件从主服务器复制到工作服务器上的~/.kube/config。用户在worker和master上执行kubcetl时的值~(当然可能有所不同)。
完成此操作后,您可以完全像在主节点上一样使用工作节点上的kubectl命令。

,

即使使用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
  • 或者,在主服务器上,如果您是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

,

我尝试了许多解决方案,它们只是将 /etc/kubernetes/admin.conf 复制到 ~/.kube/config。但没有一个对我有用。

我的操作系统是 ubuntu,通过删除、清除和重新安装以下内容来解决:

  1. sudo dpkg -r kubeadm kubectl
  2. sudo dpkg -P kubeadm kubectl
  3. sudo apt-get install -y kubelet kubeadm kubectl
  4. sudo apt-mark 持有 kubelet kubeadm kubectl
  5. curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"(再次下载 kubectl,这确实有效)
  6. kubectl 获取节点

名称状态角色年龄版本

mymaster Ready control-plane,master 31h v1.20.4

myworker Ready 31h v1.20.4

,

Davidxxx 的解决方案对我有用。

就我而言,我发现在以下路径的工作节点中存在一个文件:

/etc/kubernetes/kubelet.conf

您可以将其复制到 ~/.kube/config 并且它也能正常工作。我自己测试过。