移动互联时代,数码科技重构数字身份
|
凌晨三点二十,机房空调嗡嗡声突然低了半度——不是坏了,是压缩机歇气。我蹲在IDC最后一排机柜前,手指还沾着刚撕掉的监控屏右下角胶布,粘得满手灰。那胶布是上个月贴的,盖住一个永远显示0%的磁盘健康值告警图标,客服说“逻辑正常”,我就信了。 事情从早上九点零七分开始不对劲。APP登录接口503,不是全挂,是“偶发性认证失败”。用户刷一次登不上,再刷,又行了。我们盯日志,盯到十一点,盯出JWT验签超时——但证书没过期,密钥轮转脚本上个月跑过,日志里写着“success”。老板在运维群里甩了一张截图:“是不是前端缓存了旧公钥?”我回了个“?”,然后把那行curl -k -H "X-Client-ID: fake"的测试命令重敲了三遍:第一次返回401,第二次卡住四十七秒,第三次直接Connection refused。 我原以为是Redis集群抖动,毕竟上周主从同步延迟飙到八秒,运维老张还拍着胸脯说“扛得住”。结果下午两点十五分,他站我背后,指甲掐进我后颈:“快看Kibana——所有/verify/id-token的trace都断在authz-service的gRPC call里,但service根本没收到请求。” 我切到istio-proxy日志,第一眼看见TLS handshake timeout。第二眼看见client IP全是从某个CDN节点涌过来的,ASN编号带“移动”俩字。第三眼……没有第三眼,我直接抓起电话打给厂商技术支持,对方开口就是“您先确认下SNI配置是否正确”,我说“你先把你们上周推送的v2.8.3网关镜像SHA256给我”,他沉默了十一秒,说“稍等”,然后挂了。 窗外开始下雨,不是暴雨,是那种粘腻的、把玻璃糊成毛玻璃的江南梅雨。值班室泡面桶堆在角落,三桶,全是红烧牛肉味——老张的,小陈的,我的。小陈在隔壁工位啃冷包子,油蹭到键盘F键上,他说:“这不像攻击,像…像有人用手机APP反复点‘换设备登录’,但没点下一步。” 我没理他。我把authz-service从K8s里删了,重新apply manifest,删的时候手抖,删错了namespace,误删了prod-sandbox里的vault-sidecar。它自己没报警,因为sidecar连不上consul,连不上就静默,静默就没人管。这事儿我到现在也没想明白:为啥一个只读的凭据注入组件,非得和auth服务绑死启动顺序? 晚上八点,故障升级成P0。老板把全员拉进腾讯会议,镜头晃得很,他正抱着孩子哄睡觉,婴儿哭声混着他说“要不今晚先切回老身份系统?”——就是那个用MD5盐值拼接手机号+IMEI做token的老东西。我盯着会议画面右下角的时间戳:二十一时零三分。我忽然想起上一次搬家,物业非要我填《数字身份迁移承诺书》,纸是蓝色的,盖着电子章,章底有二维码,扫出来跳转到工信部备案页。我填完,手机弹窗提示“生物特征数据已加密上传”,但我指纹根本没录过。那会儿我就知道,所谓重构,不过是把旧锅炉拆了,换个更亮的烟囱顶在楼顶上冒烟。 真正崩在凌晨一点半。备份没跑。不是脚本没启,是cron的systemd timer unit被上次安全加固禁用了,没人告诉DBA,DBA说“备份目录满了”,我去看,/backup/mysql下确实塞满tar.gz,但最新一个是三天前的;再查rclone日志,报错是“429 Too Many Requests for bucket identity-bak-prod-2023”,而那个bucket权限策略里写了“仅限内部IP段访问”。谁加的?去年十二月,我调休期间,新来的外包同学写的TF模块,commit message写的是“fix IAM policy typo”。没人review。 最怪的是DNS。我们主域名identity-api.xxxx.com的TTL设的是300,但凌晨两点半,监控台突突突跳出几十个解析失败告警——全指向CN的移动DNS递归节点,响应是SERVFAIL。我抓包看,上游根服务器压根没收到查询。后来才懂:不是DNS坏了,是移动某省骨干网的EDNS客户端子网(ECS)插件在转发时,把/24的client-subnet伪装成/32,结果我们的geo-ip路由规则把这部分流量全导向了新加坡节点,而那边的API网关早八百年就下线了。这事谁负责?没人。厂商说“符合RFC标准”,我们自己说“文档没写要兼容ECS伪装”,老张说“反正我重启过coredns”。他真重启了,就在凌晨两点半,三秒钟后又挂——日志里清清楚楚写着“panic: runtime error: invalid memory address or nil pointer dereference”,堆栈第7行是vendor/github.com/miekg/dns/server.go,函数名叫ServeTCP。
文章配图,仅供参考 现在四点零五分,告警停了。不是修好了,是阈值被手动调高了。小陈靠在椅子上睡着,嘴张着,手机滑到地上,屏幕还亮着,显示微信对话框:“妈,明早送我去少年宫,画素描。”老张蹲在地上,用螺丝刀撬开一台BMC卡散热片,嘴里念叨:“这玩意儿三年没换硅脂了。”我没说话,打开终端,输入:kubectl get pods -n auth-prod | grep authz。输出三行:authz-v2-79f9bd6bfb-m8t4x 1/1 Running 1 18h;authz-v2-79f9bd6bfb-qjx7p 1/1 Running 0 34m;authz-v2-79f9bd6bfb-r2v9c 0/1 Pending 0 47m。最后一个Pod,调度失败。理由是:node(s) didn't match pod affinity/anti-affinity rules。Affinity规则?是我去年十一月加的,为了防止单点故障。可当时写的亲和标签是“disk-type=ssd”,而现在这台节点,硬盘早就换成NVMe,label还是ssd,没人改——因为换盘时,Ansible playbook漏掉了那一行label update。我原以为问题出在身份核验流程,结果根子卡在一块没人擦的散热片、一段三年前的DNS缓存策略、还有我亲手写的、却忘了删的亲和性规则里。优胜劣汰?对。活下来的不是代码最健壮的那个,是今天凌晨三点二十,还愿意蹲着听空调喘气的人。 明天先把告警阈值调回去。另外……得找人问问,那个蓝色《数字身份迁移承诺书》的PDF里,埋的JS执行时,到底往哪传了指纹哈希。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


移动互联时代,你的设备还单机?11年开源站长说:该联网了!
移动互联时代设备与服务器协同优化三大突破
移动互联时代,多媒体开发亟需架构级革新
移动互联时代,交互设计别再套用2010年老逻辑
移动互联时代:应用驱动的万物互联新架构
物联网+移动互联时代下的数码安全新挑战