恢复 Host 集群对 Member 集群的访问权限

多集群管理是 KubeSphere 的一大特色,拥有必要权限的租户(通常是集群管理员)能够从 Host 集群访问中央控制平面,以管理全部 Member 集群。强烈建议您通过 Host 集群管理整个集群的资源。

本教程演示如何恢复 Host 集群对 Member 集群的访问权限。

可能出现的错误信息

如果您无法从中央控制平面访问 Member 集群,并且浏览器一直将您重新定向到 KubeSphere 的登录页面,请在该 Member 集群上运行以下命令来获取 ks-apiserver 的日志。

kubectl -n kubesphere-system logs ks-apiserver-7c9c9456bd-qv6bs

备注

ks-apiserver-7c9c9456bd-qv6bs 指的是该 Member 集群上的 Pod ID。请确保您使用自己的 Pod ID。

您可能会看到以下错误信息:

E0305 03:46:42.105625       1 token.go:65] token not found in cache
E0305 03:46:42.105725       1 jwt_token.go:45] token not found in cache
E0305 03:46:42.105759       1 authentication.go:60] Unable to authenticate the request due to error: token not found in cache
E0305 03:46:52.045964       1 token.go:65] token not found in cache
E0305 03:46:52.045992       1 jwt_token.go:45] token not found in cache
E0305 03:46:52.046004       1 authentication.go:60] Unable to authenticate the request due to error: token not found in cache
E0305 03:47:34.502726       1 token.go:65] token not found in cache
E0305 03:47:34.502751       1 jwt_token.go:45] token not found in cache
E0305 03:47:34.502764       1 authentication.go:60] Unable to authenticate the request due to error: token not found in cache

解决方案

步骤 1:验证 jwtSecret

分别在 Host 集群和 Member 集群上运行以下命令,确认它们的 jwtSecret 是否相同。

kubectl -n kubesphere-system get cm kubesphere-config -o yaml | grep -v “apiVersion” | grep jwtSecret

步骤 2:更改 accessTokenMaxAge

请确保 Host 集群和 Member 集群的 jwtSecret 相同,然后在该 Member 集群上运行以下命令获取 accessTokenMaxAge 的值。

kubectl -n kubesphere-system get cm kubesphere-config -o yaml | grep -v "apiVersion" | grep accessTokenMaxAge

如果该值不为 0,请运行以下命令更改 accessTokenMaxAge 的值。

kubectl -n kubesphere-system edit cm kubesphere-config -o yaml

accessTokenMaxAge 的值更改为 0 之后,运行以下命令重启 ks-apiserver。

kubectl -n kubesphere-system rollout restart deploy ks-apiserver

现在,您可以再次从中央控制平面访问该 Member 集群。


感谢您的反馈。如果您有关于如何使用 KubeSphere 的具体问题,请在 Slack 上提问。如果您想报告问题或提出改进建议,请在 GitHub 存储库中打开问题。