2023年12月19日,今天 sealos 的公有云一個小時內(nèi)被攻擊 3 次,每次 幾G 到 十幾G 的流量,都是 CC 攻擊(七層多 IP 地址模擬用戶請求),這種比 DDos 還難防,現(xiàn)在凌晨一點,剛處理完所有臨時方案,以及咨詢一些外部的安全專家,后續(xù)會有一系列的加強防控來保障穩(wěn)定性。有些感想,怕睡一覺忘了,趕緊寫下來。
致歉
首先要給所有喜歡 sealos 的同學道歉,這幾天的連續(xù)攻擊讓平臺出現(xiàn)幾次幾分鐘的不可用,比如今天每次大概會 3~5 min, 流量是瞬間過來把 15 臺 nginx 全部打爆的,然后 k8s 會自動拉起恢復,我們停止掉了被攻擊應用,并把資源擴大了一倍來硬抗,這是臨時方案。
被攻擊之后我們的穩(wěn)定性數(shù)據(jù)是 99.9%,對于穩(wěn)定性要求高于這個數(shù)字的業(yè)務可以考慮緩一緩使用我們的公有云,先可以跑一些開發(fā)測試或者周邊應用,核心業(yè)務可以考慮獨立部署方案。
后面平臺會按照 SLA 承諾給收到損失的用戶相應賠償,有遷移走的用戶可以聯(lián)系我們對未消費余額全部退款,再次表示深深的歉意。
這一天遲早要來
在大概一個月前還沒被攻擊的時候,laf 作者老根吃飯時就在講,為什么 sealos 還沒受到攻擊,這不合理,沒被攻擊反而讓人感到不安?,F(xiàn)在頭頂?shù)膭κ锹湎铝耍@是成為一朵成熟的云的必經(jīng)之路。沒想到來的這么快。
創(chuàng)業(yè)一年中遇到前所未有的挑戰(zhàn)
創(chuàng)業(yè)我們選擇了一條極難,極讓人興奮的路,做公有云,這怎么看都不應該是一個小團隊能做的了的事,我嫌難度不夠再增加一點:做一個多租戶的容器公有云。還可以把難度再加一點:先做國內(nèi)。最終想做成一個優(yōu)雅的牛逼的公有云,然后任何人都可以直接擁有這個云操作系統(tǒng),一鍵裝起來一個對標公有云能力的云,磨平公有云私有云的邊界。
創(chuàng)業(yè)前雖然也做過非常多有挑戰(zhàn)的事,比如容器云支撐整個訊飛核心研發(fā)平臺,深度學習平臺的 GPU 批任務 碎片化,當時做了一個亞洲最大的 GPU 集群,后面在 k8s 上完全取代 openstack 的創(chuàng)世系統(tǒng),在阿里云的時候應用交付平臺和開源 sealer 等,但這些大多都是私有云,和公有云不是一個挑戰(zhàn)級別。
創(chuàng)業(yè)時我們在技術(shù)上是激進的,現(xiàn)金流上是保守的,因為我認為前沿的不太成熟的技術(shù)別人不敢用,我敢 這就是創(chuàng)業(yè)公司的競爭優(yōu)勢,不成熟的技術(shù)你讓他成熟了這就成為你建立壁壘的磚塊。當有長期的積累,這朵云穩(wěn)定運行超過 2 年時,我們就會達到原子彈爆炸的臨界值,沒人能拒絕這樣優(yōu)秀的東西了。
第一次大的故障是 2023.3.17號,記的這么清楚是因為公司一周年慶祝,我們買了蛋糕水果,結(jié)果 laf 剛上線沒幾天就掛了,全公司核心人員修復了 15個小時,蛋糕擺在那兒就沒時間切了。最終原因是因為用了某平臺的輕量服務器,網(wǎng)絡包紊亂,后來全部切走,低成本是要付出代價的。
后面幾次故障是 laf 的用戶迅速暴漲,導致 mongo 的租戶迅速突破上限,很少有這種多租戶共享一個實例的場景,影響到了我們的用戶,其中有一個用戶在北京,我就過去給他們道歉了,并承諾無論花多大代價都必須把他們的穩(wěn)定性做好,后面幾乎整個 laf 團隊都鋪在這個事情上,中間過程故事很多,已經(jīng)到了我們幫助用戶去調(diào)優(yōu)代碼的程度了,當然穩(wěn)定性問題是沒有那么好解決的,但是最終還是收斂下來了,現(xiàn)在這個客戶今年已經(jīng)從 0 開始有大幾百萬用戶了,這種背靠背作戰(zhàn)讓我們很有成就感,就像在爬一座又一座山,中間我們可能被劃傷,摔倒,但是沒死,變禿了也變強了。
然后就是網(wǎng)關(guān),我們確實幾乎市面上所有的網(wǎng)關(guān)都嘗試用了一遍,測試了一遍,都有不同程度各種各樣的問題。 我自己遇到這些問題是興奮的,這就意味著機會,意味著我們解決了這些問題就會變成競爭力,所以我們不斷死磕難點。比如我們正在用的 k8s 剛剛 GA 的 Gateway API,我們會充分的壓力測試與解決其中還不太成熟的問題,又比如我們一定要把數(shù)據(jù)庫穩(wěn)定的跑容器里。
最近遇到的就是被攻擊,原因是因為 sealos 上跑了大量的 GPT 相關(guān)的應用,某些應用的流量又特別大,而這些應用的競爭對手就會惡意攻擊。我們做過充分的性能測試,比如幾十萬 QPS 都可以輕松扛住,但是攻擊者是下血本了,流量打的非常之大,隔三差五就來兩下。我們后續(xù)會通過 tls 特征分析,http2 以及 ip2local 幾個層面來綜合解決 cc 攻擊的問題。這次之后我們又將一次脫胎換骨,真的我現(xiàn)確切的感受就是這樣,一個產(chǎn)品的強大是要經(jīng)過苛刻的場景千錘百煉的,高手的身上都是傷疤。
這次故障用戶里面就會出現(xiàn)兩種人,一種是謾罵聲,說穩(wěn)定性差,體驗差,服務差,我十分理解,也多少有些失落,確實我們不完美,我們在努力改進,也盡自己所能去做一些彌補,當我們足夠強大的時候,歡迎回來。 另外一種是支持和鼓勵,讓我非常感動,群里很多做網(wǎng)絡安全的同學主動聯(lián)系我,給我們提供非??孔V的方案,甚至共享一些付費數(shù)據(jù)來為我們提供更好的防護能力,以前 laf 故障的時候也是,有些客戶給我們發(fā)紅包,說修復故障辛苦了,是個好項目,無論遇到什么困難一定要做下去,這些用戶真的是我們的前進動力。
穩(wěn)定性與成本
很難的一件事就是用戶不接受你不穩(wěn)定這合情合理,同樣不接受成本高,而往往有時候就是需要投入更大成本來解決穩(wěn)定性問題,比如我們這些遇到的,一種解決方式就是把流量抗下來,那就需要耗費大量服務器,這就是成本,或者加 waf ddos 防護這也是成本,這些隱性成本挺多用戶要么不認,要么用不起(也有原意用的)。所以成本和穩(wěn)定性之間就形成了一種矛盾。而且這種 CC 攻擊如果攻擊者足夠?qū)I(yè)的話讓你沒法做特征分析,那么理論上可能真的只有硬抗下來,抗的這個成本算誰的。
所以我現(xiàn)在能理解為什么公有云貴了,就是為了解決那剩下的 10% 問題,需要花 200% 300% 的成本去解決,比如多副本,比如機房灌水,等等。
這次被攻擊之后讓我更加堅定擁抱公有云,確實云在底層解決掉了很多問題,如果是托管服務器遲早都會遇到這些問題,然后花數(shù)倍的成本云解決。 反而通過高效充分的云上調(diào)度手段能在公有云上把成本進一步降低。
總之,不穩(wěn)定 用戶罵你,貴 用戶亦罵你。 我是覺得罵的對,不罵不進步。技術(shù)有意思的點也在這,解決矛盾問題,比如穩(wěn)定性與成本的矛盾,比如功能強大與復雜度的矛盾,這些新的牛逼的技術(shù)就是為了能找到一個優(yōu)雅的方式能兼顧。
涅槃重生
我們還是一如既往的走技術(shù)激進路線,穩(wěn)定性的問題是一定會被收斂的,sealos 的核心組件就那么多,一塊一塊硬啃也能啃下來,今天暴露的問題是為了明天的高魯棒性,要想涅槃重生得把自己架在火上烤,公有云就是我們的試金石,預計半年到一年的時間我們可以解決掉絕大多數(shù)核心問題,倒時一個穩(wěn)如老狗 便宜 簡單 開放的云會綻放在大家面前。
sealos 以kubernetes為內(nèi)核的云操作系統(tǒng)發(fā)行版,讓云原生簡單普及
laf 寫代碼像寫博客一樣簡單,什么docker kubernetes統(tǒng)統(tǒng)不關(guān)心,我只關(guān)心寫業(yè)務!