使用kubeadm join命令加入现有集群时发生未经授权的错误

问题描述

我有几个RaspBerry Pi,我正试图用它们来建立Kubernetes集群以供学习。

我已经成功在主节点上设置了控制平面。但是,当我尝试将一个工作节点加入集群时,出现“等待条件/错误上传criscket错误”消息。

这是我的加入命令(由主节点打印):

kubeadm join 192.168.0.4:6443 --token rbebts.cj9zl03jor3nt09m     --discovery-token-ca-cert-hash sha256:dfd705812b44887726abbdc7e91187c76a407498c1d1b73ebc1aa81c9486848c

我尝试使用-v9选项运行它,并且看到它已使用提供的令牌成功获取集群configMap(这表明我使用的令牌是有效的,并且不是问题的根本原因):>

I0916 13:44:44.248364    9187 round_trippers.go:423] curl -k -v -XGET  -H "Accept: application/json,*/*" -H "User-Agent: kubeadm/v1.19.1 (linux/arm) kubernetes/206bcad" -H "Authorization: Bearer rbebts.cj9zl03jor3nt09m" 'https://192.168.0.4:6443/api/v1/namespaces/kube-system/configmaps/kube-proxy?timeout=10s'
I0916 13:44:44.256611    9187 round_trippers.go:443] GET https://192.168.0.4:6443/api/v1/namespaces/kube-system/configmaps/kube-proxy?timeout=10s 200 OK in 8 milliseconds

但是,我进一步看到很多授权失败:

I0916 13:44:53.146479    9187 round_trippers.go:443] GET https://192.168.0.4:6443/api/v1/nodes/node-1?timeout=10s 401 Unauthorized in 8 milliseconds
I0916 13:44:53.146559    9187 round_trippers.go:449] Response Headers:
I0916 13:44:53.146618    9187 round_trippers.go:452]     Cache-Control: no-cache,private
I0916 13:44:53.146675    9187 round_trippers.go:452]     Content-Type: application/json
I0916 13:44:53.146729    9187 round_trippers.go:452]     Content-Length: 129
I0916 13:44:53.146782    9187 round_trippers.go:452]     Date: Wed,16 Sep 2020 17:44:53 GMT
I0916 13:44:53.147654    9187 request.go:1097] Response Body: {"kind":"Status","apiVersion":"v1","Metadata":{},"status":"Failure","message":"Unauthorized","reason":"Unauthorized","code":401}
I0916 13:44:53.637836    9187 round_trippers.go:423] curl -k -v -XGET  -H "Accept: application/json,*/*" -H "User-Agent: kubeadm/v1.19.1 (linux/arm) kubernetes/206bcad" 'https://192.168.0.4:6443/api/v1/nodes/node-1?timeout=10s'

看着curl命令,我发现Bearer令牌丢失了(这可以解释401响应)。

我刚刚开始了解Kubernetes,不确定在这里做错什么以及如何解决这个问题。

有关我的设置的一些信息:

kubeadm version: &version.Info{Major:"1",Minor:"19",GitVersion:"v1.19.1",GitCommit:"206bcadf021e76c27513500ca24182692aabd17e",GitTreeState:"clean",BuildDate:"2020-09-09T11:24:31Z",GoVersion:"go1.15",Compiler:"gc",Platform:"linux/arm"}


docker 18.09.1

Raspbian GNU/Linux 10 (buster)

解决方法

尝试启用--v=10的“加入”并观察API调用失败。
这可能会更好地说明发生了什么。

您也可以执行kubeadm reset命令。 kubeadm reset负责从使用kubeadm initkubeadm join命令创建的文件中清除节点本地文件系统。对于控制平面节点,reset还从etcd集群中删除了该节点的本地堆叠etcd成员,还从kubeadm ClusterStatus对象中删除了该节点的信息。 ClusterStatus是一个kubeadm托管的Kubernetes API对象,其中包含kube-apiserver端点列表。

看看:kubeadm-joinkubeadm-reset-issue