# 三台机器各算一次密钥指纹 kubectl exec pod-a -- sha256sum /etc/app/jwt.key kubectl exec pod-b -- sha256sum /etc/app/jwt.key
同一份代码部署三台机器,用户登录后大约三分之一的请求返回 401,响应体写着 signature verification failed,隔几秒重试又能通过,看着像是随机坏掉。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,签名密钥是从各自机器上的配置文件读的,其中一台还留着上一版的旧值,负载均衡轮询到它时算出的签名必然对不上,出错比例刚好接近三分之一。
「JWT 密钥不一致」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。改完隔一天再看一次,当场正常不代表能稳住。
测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
处理上按这个顺序:把密钥挪到配置中心统一下发,三台机器读同一份;启动时打印密钥指纹做比对,千万不要打印密钥原文;轮换期间新旧两个值同时接受,别让用户重新登录。
改完只确认一件事:三台机器输出的密钥指纹完全一致,连续请求不再出现零散 401。
