1. 问题描述
大部分用户能够正常登录和使用ks,但是个别用户(voidking01)登录ks后报错。
用户登录ks,正常;登录后查看工作台,正常;查看host集群和只包含host集群的企业空间,正常。
但是,选择一个非host集群或者选择一个包含非host集群的企业空间后,页面就会弹出错误提示:
Session timeout or this account is logged in elsewhere, please login again
然后转到登录页面,再次登录,继续弹出上面的错误提示。循环往复。
2. 权限问题?
更改用户权限为admin,问题依旧。
重新给用户授权,问题依旧。
3. ks版本问题?
ks版本从3.2.1升级到了3.3.1,问题依旧。
4. kube-events组件问题?
参考文档登录成功后,总是提示会话超时或此账户在其他登录地方登录,请重新登录
经检查,并没有kube-events失败日志,不是它的问题。
5. ks配置问题?
参考文档:
阅读ks文档,怀疑是ks配置不对引起的。那就按照官方文档重新配置一下试试。
5.1. host集群
1、编辑ks-installer配置文件
1 | kubectl -n kubesphere-system edit cc ks-installer |
2、修改authentication部分配置
1 | spec: |
5.2. member集群
member集群只要配置jwtSecret
即可,和host集群保持一致。详情参考Direct Connection
修改完成,ks pod重建后,问题依旧。
6. 删除用户重建?
删除用户,用户重新登录,重新授权,问题依旧。
7. 时钟问题?
参考Session Timeout文档,还有一种可能是节点时钟偏差。
The node clock skew affects time-sensitive operations such as validating the expiration time of a user token. You can configure the server time synchronization with an NTP server. MaximumClockSkew can also be set, which defaults to 10 seconds.
分别登录host集群和member集群的apiserver pod,执行date
命令查看时间。
发现不同集群的时区配置不同,啊哈,大概率是这个问题了!!!
1 | sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime |
统一所有集群节点时区为Asia/Shanghai
,然后重建ks pod。问题依旧。
把maximumClockSkew
也调大一些,默认10s,调整到60s试试。问题依旧。
8. 查看日志
参考文档恢复主集群对成员集群的访问权限,查看member集群的api-server日志。
1 | kubectl -n kubesphere-system logs ks-apiserver-7c9c9456bd-qv6bs |
出现报错信息:
1 | W1104 11:13:28.432457 1 clusterroles.go:117] invalid aggregation role found: cluster-admin, role-template-manage-configmaps |
顺着这个日志,在kubesphere社区找到了一个相同的问题kubesphere使用子账户…会跳转到登录界面
看起来是多集群同步出问题了,看下 host 集群 kube-federation-system 这个 namespace 下的 pod 是否都正常
根据论坛大佬的提示,检查kube-federation-system 这个 namespace 下的pod信息。
1 | kubectl get pod -n kube-federation-system |
看着也没有什么明显的报错信息。
根据论坛的提示,有两个解决办法:一个是替换kubeconfig,一个是升级kubefed controller。
- Update the version of kubefed controller
- fix: controller-manager panic when kubeconfig set filed insecure-skip-tls-verify
这里我们选择升级kubefed controller。
9. 升级kubefed controller
1、查看当前kubefed controller版本
1 | kubectl get deployment.apps/kubefed-controller-manager -n kube-federation-system -oyaml| grep image |
查看到当前版本v0.8.1
2、查看kubefed controller最新版本
访问dockerhub - kubesphere/kubefed
找到当前最新版本,也是v0.8.1
莫非不是版本问题?再对比本地镜像和线上镜像的DIGEST,发现它们是不同的。看来是修复bug后,使用了原来的镜像tag。
1 | docker inspect kubesphere/kubefed:v0.8.1 | grep -i id |
3、缩容kubefed controller
1 | kubectl scale --replicas=0 deployment.apps/kubefed-controller-manager -n kube-federation-system |
4、删除宿主机本地镜像&拉取最新镜像
1 | docker rmi kubesphere/kubefed:v0.8.1 |
5、重新拉起kubefed controller
1 | kubectl scale --replicas=1 deployment.apps/kubefed-controller-manager -n kube-federation-system |
问题依旧。。。
10. 废弃集群的问题?
再次查看kubefed-controller-manager的日志,感觉像是废弃集群引起的问题。
1 | E1104 08:10:15.107249 1 controller.go:512] failed to delete FederatedGlobalRoleBinding "voidking01-platform-regular": the following clusters were not ready: vk-dev, edge-cluster |
删除废弃的集群后(未就绪的集群),问题解决。