今天在部署一个数仓平台到另一个环境时,为了简化,改变了以往部署的底座,原来是部署在k8s上,这次是部署在containerd里头。
直接上重点:部署完成之后,发现客户端网站登录之后,访问其他api时,服务端返回报错:{"msg":"invalid token","code":401}。意思呢就是令牌无效。可是命名是输入用户名密码,提示登录成功了的。
后来仔细对比之后,发现新部署的环境,网站客户端登录后,访问api接口,没有携带token(正常登录应该是携带token的)。后来一拍大腿,不会是因为网站客户端所在容器里头的时间不对,导致token直接失效了吧。
分别进入客户端和服务端的容器,发现时间确实对不上:
服务端时间:
[root@eb8c22ee4a4e conf]# date
Sun Dec 3 11:38:19 CST 2023
客户端时间:
~ # date
Sun Dec 3 03:40:58 UTC 2023
于是解决办法出来了:
Sun Dec 3 03:42:50 UTC 2023
[root@3374f389af7c /]#
[root@3374f389af7c /]#
[root@3374f389af7c /]#
[root@3374f389af7c /]# ls /usr/share/zoneinfo/A
Africa/ America/ Antarctica/ Arctic/ Asia/ Atlantic/ Australia/
[root@3374f389af7c /]# rm -rf /etc/localtime
[root@3374f389af7c /]#
[root@3374f389af7c /]#
[root@3374f389af7c /]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@3374f389af7c /]#
[root@3374f389af7c /]# date
Sun Dec 3 11:43:41 CST 2023
即:重新设置一下时区。
转折点
设置完之后,发现还是没携带token,我从代码里头去找,发现用到了什么Vue['cookies'],我是写react的,不会Vue,但都是前端代码,知道和cookies有关,于是重新比对两次请求,发现cookies果然不一样:
有问题的客户端的cookies:
KuboardLogin=true; _ga=GA1.1.903123048.1701500171; KuboardToken=eyJhbGciOiJSUzI1NiIsImtpZCI6IjBiNTYwYjAxZWZkYmI0YmM2OWEwYWFmOTBlZDViYjA1M2NhNTA2MjMifQ.eyJpc3MiOiJodHRwOi8vMTAuMC4xLjE3MzozMDA4MC9zc28iLCJzdWIiOiJDZ1ZoWkcxcGJoSUhaR1ZtWVhWc2RBIiwiYXVkIjoia3Vib2FyZC1zc28iLCJleHAiOjE3MDIxMDUyNTgsImlhdCI6MTcwMTUwMDQ1OCwiYXRfaGFzaCI6Ijl1c1ltQmdZS1BaMm0ta3ss1RtRXciLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZ3JvdXBzIjpbImFkbWluaXN0cmF0b3JzIl0sIm5hbWUiOiJTeXN0ZW0gQWRtaW5pc3RyYXRvciIsInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIn0.Bl8ZBooW0MKsUUir8sP2l9rDqrPiBFIFZqpIhnJzf3Ufx2IRaN200gTgmZOKNSSuF_tapbujycfbEOOLOPwTyuY3gUR_7pD7BE6yTG7v_BRiH4MrmaxVsftYrTrs0UIhukSXzw9O79TnYKEtMTknyqLExkzD4D8SFe58HMYBlOfz2GSeH-1vqW8hGab8HiOvO0N4kP4fPCc0qX-fKmUVtOBgN-yTGhewSus68dMA-6gtbmmT9pUV_ATClsc2iL29XM4_cMc9PdVKD8TX7dNPYNucpEyxoH0_BKARYISLewVKTXZKKH9QDjf5m0n1XwaEQZ8oO7U5Q3d0laK0C32sEw; _ga_YFKNQX5E65=GS1.1.1701500171.1.1.1701502020.0.0.0; jms_csrftoken=zlg5uBLm6IPoUWnyTWY9omp0Ko8VuQiBdT8Nnf6hP9wgzOToUgi5ZovHZNGNxbvJ; token=APRcrA+5wXXPsN8BB3azWsf60wCMtjoUagPkTHJh9FYtFBkU1U8Ujy5jj96RB7WQwWc2rEISM9Jtee5eX3NMtNnIFgrhf2bCbI8srwRIG2bDTmYEvkoh/YiOzTxx0S3h/ynl758zuHTi7dqjyJEsmHua7zjgfqgJQd89mKiuG9LJ5DnbDD39/DNr1Tq+EM+MZK3X9L03yPsrAhQ2ydf3LWbZn+scqkCb/zje77iGIN43mH1PEm76rzR0H6t4A2gzKKn+TPifWuER+q6dmeKfAsncLqcVlgrafnVuMD8bLe2pqlQf9O/ppxQEq7KzT/Fi4slG5KPh6NpoQlBvGq3IJWMD8Zcy7+RfpvIoYKujZADjsYfnNMn4jOQS0NSVrpD8qa+JbM2l7vM/dxPX41Bmfycou543zSyxyeMLxC85GLjfyIOuL0yHsVWNY+jjbAJ2DahRIOwPiunRYCNfOzm/cs4x1RMNFaM0RKDcDfxWpFR1ZXzrPMuIpYF+JIrn/KyOMFkLIOCI+MxcbU5yJWoJlVb98KS8f+sH4RRHyrOBcI=; JSESSIONID=3B612517164E3A552B3D75D5D9CFDB82
(- 发现它携带的是另一个网站kuboard的cookies,与大概明白啥回事了:这两个网站的IP一样,知识端口不一样,很可能是cookies串台了。)
验证猜想:我从另一个没使用过kuboard网站的浏览器登录,结果发现正确客户端的cookies如下:
Cookies:token=ebe77b4c4b3f1c11316e2a842410759d
而且确实登录成功了。
感悟有二:其一:老的环境很坑一碰就碎
其二:解决问题,需要有知识面的支撑。
其三:从各个数据流经点,找寻异常
网友评论