使用 kubeadm join 命令加入现有集群时出现未经授权的错误
Unauthorized error when joining existing cluster using kubeadm join command
我有几个 Raspberry Pis,我正试图用它们来设置 Kubernetes 集群以供学习。
我已经在主节点上成功设置了控制平面。但是,当我尝试将工作节点加入集群时,我收到“等待条件超时/上传 crisocket 错误”消息。
这是我的加入命令(由主节点打印):
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 init
或 kubeadm join
命令创建的文件中清理节点本地文件系统。对于 control-plane 个节点,reset
还从 etcd 集群中删除该节点的本地堆叠 etcd 成员,并从 kubeadm ClusterStatus
对象中删除该节点的信息。 ClusterStatus
是一个 kubeadm 管理的 Kubernetes API 对象,它包含 kube-apiserver 个端点列表。
我有几个 Raspberry Pis,我正试图用它们来设置 Kubernetes 集群以供学习。
我已经在主节点上成功设置了控制平面。但是,当我尝试将工作节点加入集群时,我收到“等待条件超时/上传 crisocket 错误”消息。
这是我的加入命令(由主节点打印):
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 init
或 kubeadm join
命令创建的文件中清理节点本地文件系统。对于 control-plane 个节点,reset
还从 etcd 集群中删除该节点的本地堆叠 etcd 成员,并从 kubeadm ClusterStatus
对象中删除该节点的信息。 ClusterStatus
是一个 kubeadm 管理的 Kubernetes API 对象,它包含 kube-apiserver 个端点列表。