今天 Sealos 的公有云一个小时内被攻击 3 次,每次攻击的流量都在几个 G 到十几 G 之间,都是 CC 攻击 (七层多 IP 地址模拟用户请求),这种攻击比 DDoS 还难防。现在是凌晨一点,我们刚刚处理完所有紧急应对措施,并咨询了一些外部安全专家,后续会有一系列的加强防控措施来保障稳定性。有些感想,怕睡一觉忘了,赶紧写下来。
致歉
首先要给所有喜欢 Sealos 的同学道歉,这几天平台连续遭受攻击,导致服务在短时间内多次不可用,比如今天每次大约持续 3 到 5 分钟。攻击流量瞬间涌入,导致我们的 15 台 Nginx 服务器全部瘫痪,好在 K8s 能够自动重启以恢复服务。我们已经对受攻击的应用域名进行了紧急关停,并把资源扩大了一倍来硬抗,但这只是一个临时解决方案。
被攻击之后我们的稳定性降至 99.9%,对于稳定性要求高于这个数字的业务可以考虑缓一缓使用我们的公有云,核心业务可以考虑独立部署方案。
后面平台会按照 SLA 承诺给受到损失的用户进行相应赔偿,对于选择迁移的用户,我们将提供未消费余额的全额退款,再次表示深深的歉意。
这一天迟早要来
大概一个月前还没被攻击的时候,Laf 作者老根吃饭时就提出了疑问:为什么 Sealos 还没受到攻击?这不合理,没被攻击反而让人感到不安。现在头顶的剑是落下了,这是成为一朵成熟的云的必经之路。没想到来的这么快。
创业一年中遇到的前所未有的挑战
创业的路途充满挑战,我们选择了一条艰难但又令人兴奋的路径:做公有云。这怎么看都不应该是一个小团队能做的了的事,我嫌难度不够再增加一点:做一个多租户的容器公有云。还可以把难度再加一点:先做国内。最终想做成一个既优雅又强大的公有云,让任何人都可以直接拥有这个云操作系统,一键装起来一个对标公有云能力的云,磨平公有云与私有云的边界。
虽然我创业之前也做过许多具有挑战性的事情,比如容器云支撑整个讯飞核心研发平台,深度学习平台的 GPU 批任务碎片化,当时做了一个亚洲最大的 GPU 集群,后面在 K8s 上完全取代 OpenStack 的创世系统。在阿里云期间负责应用交付平台和开源的 Sealer 等项目,但这些大多都是私有云,和公有云不是一个挑战级别。
创业时我们在技术上是激进的,现金流上是保守的,因为我认为敢于使用前沿而不成熟的技术是创业公司的竞争优势。我们将这些不成熟的技术变得成熟,从而构建我们的竞争壁垒。当有长期的积累,我们的云服务稳定运行超过两年后,我们就会达到原子弹爆炸的临界值,没人能拒绝这样优秀的东西了。
2023年3月17日,我们遭遇了第一次重大故障。记的这么清楚是因为那天是公司一周年庆祝,我们买了蛋糕水果,结果 Laf 刚上线没几天就挂了,全公司核心人员修复了 15 个小时,蛋糕摆在那儿就没时间切了。最终发现原因是使用了某平台的轻量服务器导致网络包紊乱,后来全部切走了,果然低成本是要付出代价的。
随后,Laf 的用户数量迅速增长,导致 MongoDB 的租户数量突破上限,这种多租户共享一个实例的场景很少见,严重影响到了我们的用户。其中有一个用户在北京,我就过去给他们道歉了,并承诺无论花多大代价都必须把他们的稳定性做好。后面几乎整个 Laf 团队都扑到了这个事情上。中间过程故事很多,已经到了我们帮助用户去调优代码的程度了,当然稳定性问题是没有那么好解决的,但是最终还是收敛下来了。现在,这个客户的用户已从零增长到数百万,这种背靠背作战让我们很有成就感,就像在爬一座又一座山,中间我们可能被划伤,摔倒,但是没死,变秃了也变强了。
然后就是网关,我们尝试了市面上几乎所有的网关,全部都测试了一遍,发现它们都有不同程度各种各样的问题。我自己遇到这些问题是兴奋的,这就意味着机会,意味着我们解决了这些问题就会变成竞争力,所以我们不断死磕难点。例如,我们正在使用的 K8s 最新的 Gateway API,我们会全面测试并解决其中还不太成熟的问题,又比如我们一定要把数据库稳定的跑在容器里。
最近遇到的就是被攻击,原因是因为 Sealos 上跑了大量的 GPT 相关的应用,某些应用的流量又特别大,而这些应用的竞争对手就会恶意攻击。我们做过充分的性能测试,比如几十万 QPS 都可以轻松扛住,但是攻击者是下血本了,流量打的非常之大,隔三差五就来两下。我们后续会通过 tls 特征分析,http2 以及 ip2local 几个层面来综合解决 cc 攻击的问题。这次之后我们又将再一次脱胎换骨,真的我现在确切的感受就是这样,一个产品的强大是要经过苛刻的场景千锤百炼的,高手的身上都是伤疤。
这次故障我们遇到了两种用户反应:
一种是谩骂声,说稳定性差,体验差,服务差,我十分理解,也多少有些失落,确实我们不完美,我们在努力改进,也尽自己所能去做一些弥补,当我们足够强大的时候,欢迎回来。
另外一种则是支持和鼓励,这让我非常感动。群里很多做网络安全的同学主动联系我,给我们提供非常靠谱的方案,甚至共享一些付费数据来为我们提供更好的防护能力。以前 Laf 遇到故障的时候也遇到过这种情况,有些客户给我们发红包,说修复故障辛苦了,是个好项目,无论遇到什么困难一定要做下去,这些用户真的是我们的前进动力。
稳定性与成本
很难的一件事就是用户不接受你不稳定,这个比较合情合理,但是用户同样也不接受成本高,而往往有时候就是需要投入更多的成本来解决稳定性问题,比如我们之前遇到的这些问题,一种解决方式就是把流量抗下来,那就需要耗费大量服务器,这就是成本,或者加 WAF、DDoS 防护等安全措施,这也是成本。这些隐性成本挺多用户要么不认,要么用不起 (也有愿意用的)。所以成本和稳定性之间就形成了一种矛盾。而且这种 CC 攻击如果攻击者足够专业的话让你没法做特征分析,那么理论上可能真的只有硬抗下来,抗的这个成本算谁的呢。
所以我现在能理解为什么公有云贵了,就是为了解决那剩下的 10% 问题,需要花 200% 300% 的成本去解决,比如多副本,比如机房灌水,等等。
这次被攻击之后让我更加坚定拥抱公有云,确实云在底层解决掉了很多问题,如果是托管服务器迟早都会遇到这些问题,然后花数倍的成本云解决。反而通过高效充分的云上调度手段能在公有云上把成本进一步降低。
总之,不稳定用户骂你,贵用户亦骂你。我是觉得骂的对,不骂不进步。技术有意思的点也在这,解决矛盾问题,比如稳定性与成本的矛盾,比如功能强大与复杂度的矛盾,这些新的牛逼的技术就是为了能找到一个优雅的方式能兼顾。
涅槃重生
我们还是一如既往的走技术激进路线,稳定性的问题是一定会被收敛的,Sealos 的核心组件就那么多,一块一块硬啃也能啃下来,今天暴露的问题是为了明天的高鲁棒性,要想涅槃重生得把自己架在火上烤,公有云就是我们的试金石,预计半年到一年的时间我们可以解决掉绝大多数核心问题,到时一个稳如老狗简单便宜开放的云会绽放在大家面前。
加入 Sealos 开源社区
体验像个人电脑一样简单的云操作系统
🏠官网链接
https://sealos.run
🐙GitHub 地址
https://github.com/labring/sealos
📑访问 Sealos 文档
https://sealos.run/docs/Intro
🏘️逛逛论坛
https://forum.laf.run/
往期推荐
好家伙,这个开源项目硬生生复制了一个 ChatGPT Plus 出来
2023-12-19
开源不挣钱?这个项目上线半年月入超 30w
2023-12-15
没错,数据库确实应该放入 K8s 里!
2023-12-06
关于 Sealos
Sealos 是一款以 Kubernetes 为内核的云操作系统发行版。它以云原生的方式,抛弃了传统的云计算架构,转向以 Kubernetes 为云内核的新架构,使企业能够像使用个人电脑一样简单地使用云。
关注 Sealos 公众号与我们一同成长👇👇👇