分享一个腾讯云 Kubernetes 独有的神奇 bug 和 debug 过程
疯狂 debug 找不到原因,正好我最近也在做 K8S 于是一起 debug 。腾讯云各种骚操作早有耳闻,(比如超售后急忙迁移硬盘删掉用户全部数据,比如客服不声不响升级用户 redis 版本导致宕机,比如 cfs 各种不稳定等的)。但是没想到他到处都是坑。
问题也不复杂,腾讯云的公网模型还停留在上世代,其他公有云早八辈子已经抽象化网络层,腾讯云的公网还是得直接接 cvm 的 node 。
node 启动时分配公网带宽,会默认给一个公网 ip 。而他 k8s 的 node 默认的安全组又对 0.0.0.0/0 放开了高位端口访问。cvm 创建时默认给一个公网 ip,直接导致 k8s 服务的实际端口向公网暴露。
解决也简单,立刻在有公网带宽的 node 机器上撤掉了公网 ip,检查确定那台机器上除了 nginx 外没有敏感服务(如 redis/mysql ),检查确认是否有被入侵,看起来没有。保存了日志,镜像(供日后分析)。然后尽快重写了 YAML 文件,确认创建 node 时不再分配公网 ip,销毁这个 node 重建。解决!
这件事,腾讯云独有的莫名构架和朋友不仔细阅读文档都要负一定责任,不过我认为问题根子还是在腾讯云这个公网绑定 cvm 上。其他各家公有云都已经完成了网络层的完全解耦(比如 aws 的 ENI ),LB 公网各项操作都可以只做在 LB 上。不知道为什么腾讯云还维持在机房主机时代网络拓扑。