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