一个计算机技术爱好者与学习者

0%

KubeSphere登录后报错Session Timeout

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
spec:
authentication:
jwtSecret: ''
authenticateRateLimiterMaxTries: 10
authenticateRateLimiterDuration: 10m0s
loginHistoryRetentionPeriod: 168h
maximumClockSkew: 10s
multipleLogin: true
oauthOptions:
accessTokenMaxAge: 1h
accessTokenInactivityTimeout: 30m
identityProviders:
- name: LDAP
type: LDAPIdentityProvider
mappingMethod: auto
provider:
host: 192.168.0.2:389
managerDN: uid=root,cn=users,dc=nas
managerPassword: ********
userSearchBase: cn=users,dc=nas
loginAttribute: uid
mailAttribute: mail

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
2
3
4
5
6
W1104 11:13:28.432457       1 clusterroles.go:117] invalid aggregation role found: cluster-admin, role-template-manage-configmaps
W1104 11:13:28.432464 1 clusterroles.go:117] invalid aggregation role found: cluster-admin, role-template-view-secrets
W1104 11:13:28.432469 1 clusterroles.go:117] invalid aggregation role found: cluster-admin, role-template-manage-secrets
W1104 11:13:28.432475 1 clusterroles.go:117] invalid aggregation role found: cluster-admin, role-template-view-service-accounts
W1104 11:13:28.432484 1 clusterroles.go:117] invalid aggregation role found: cluster-admin, role-template-manage-service-accounts
E1104 11:13:51.879574 1 upgradeaware.go:401] Error proxying data from backend to client: readfrom tcp 10.244.161.166:9090->192.168.50.74:34540: write tcp 10.244.161.166:9090->192.168.50.74:34540: write: connection reset by peer

顺着这个日志,在kubesphere社区找到了一个相同的问题kubesphere使用子账户…会跳转到登录界面

看起来是多集群同步出问题了,看下 host 集群 kube-federation-system 这个 namespace 下的 pod 是否都正常

根据论坛大佬的提示,检查kube-federation-system 这个 namespace 下的pod信息。

1
2
3
4
kubectl get pod -n kube-federation-system
kubectl logs --tail=100 kubefed-admission-webhook-657959d4d6-2sx5f -n kube-federation-system
kubectl logs --tail=100 kubefed-controller-manager-54fbd87f7f-6t7jq -n kube-federation-system
kubectl logs --tail=100 kubefed-controller-manager-54fbd87f7f-fh9pk -n kube-federation-system

看着也没有什么明显的报错信息。

根据论坛的提示,有两个解决办法:一个是替换kubeconfig,一个是升级kubefed controller。

这里我们选择升级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
2
docker rmi kubesphere/kubefed:v0.8.1 
docker pull 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
2
3
4
5
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
I1104 08:10:15.702028 1 controller.go:471] Ensuring deletion of FederatedGlobalRoleBinding "voidking01-platform-admin"
I1104 08:10:15.702064 1 controller.go:500] Deserializing delete options of FederatedGlobalRoleBinding "voidking01-platform-admin"
I1104 08:10:15.702072 1 controller.go:508] Deleting resources managed by FederatedGlobalRoleBinding "voidking01-platform-admin" from member clusters.
E1104 08:10:15.702117 1 controller.go:512] failed to delete FederatedGlobalRoleBinding "voidking01-platform-admin": the following clusters were not ready: vk-dev, edge-cluster

删除废弃的集群后(未就绪的集群),问题解决。