云原生網關哪家強---Sealos 網關血淚史

云原生網關哪家強---Sealos 網關血淚史

Sealos 公有云(https://cloud.sealos.io)幾乎打爆了市面上所有主流的開源網關,本文可以給大家很好的避坑,在網關選型方面做一些參考。

Sealos Cloud 的復雜場景

Sealos 公有云上線以來,用戶呈爆發式增長,目前總共注冊用戶 8.7w,每個用戶都去創建應用,每個應用都需要有自己的訪問入口,就導致整個集群路由條目非常巨大,需要有支撐數十萬條 ingress 的能力。

另外,在公網提供共享集群的服務,對多租戶要求極為苛刻,用戶之間的路由必須不能相互影響,需要非常好的隔離性,以及流量控制能力。

公有云的受攻擊面是很大的,黑客會攻擊云上跑的用戶應用,也會直接攻擊平臺的出口網絡,安全性上也有非常大的挑戰。

對控制器的性能和穩定要求都比較高,很多控制器路由條目一多時消耗資源會非常大,甚至 OOM 導致網關奔潰。

排除 Nginx Ingress

我們最早用的就是 Nginx Ingress, 最后發現有幾個核心問題無法解決:

  • reload 問題,每次有 ingress 變更會導致斷連一小會,而一個集群用戶一多的時候,ingress 的創建變更會是個頻繁事件,就會導致網絡經常不穩定。
  • 長鏈接不穩定,也是因為變更,在用的長鏈接會經常斷。
  • 性能不行,生效時間慢,消耗資源多。

所以幾乎排除掉了很多底層用 Nginx 實現的網關。我們實測下來基于 Envoy 實現的網關性能彪悍太多,幾乎控制面和數據面都不怎么消耗性能。

這是 Envoy 的:

image

這是 nginx 的:

image

差距非常之大,所以我們就可以排除掉 nginx 系列選項了。徹底擁抱 Envoy。

關于 APISIX

APISIX 本身是個優秀項目,解決了 Nginx reload 的一些問題,所以我們 Laf 早期也用了 APISIX,但是很不幸 APISIX 的 Ingress Controller 并不是很穩定,控制面奔潰給造成了我們好幾次大的故障,還出現過控制器 OOM 等問題,我們本來真的很想用,但是最終還是因為故障問題被強制勸退,當然 APISIX 社區也在一直跟進這些問題,希望能越做越好。

總結一下就是: APISIX 本身穩定性很好,但是控制器需要優化的東西還很多,穩定性也有待提高。社區支持力度也很大,無奈我們線上問題火燒眉毛沒法按照社區的節奏慢慢迭代,只能先切成別的網關了。

Cilium Gateway

Sealos 的 CNI 很早就切換成 Cilium 了,確實很強,所以我們想著網關也統一用 Cilium 得了,但是現實很骨感。

Cilium Gateway 只支持 LB 模式,這樣就強依賴云廠商的 LB,而我們也有一些私有化的場景,所以不希望耦合,穩定性方面也遇到了路由非常多的時候 Ingress 生效特別慢的問題,需要分鐘級生效,這樣用戶的體驗就很差了,我們能接受的是 5s 內路由生效。所以結論就是只能再等等。

envoy gateway

K8s 標準的發展來看,會逐漸從 Ingress 遷移到 Gateway 的標準,而我們底層又更傾向使用 Envoy,那 Envoy Gateway 的實現似乎是一個很好的選擇,所以我們調研了 Envoy Gateway, 但是這個項目還是太過于早期,遇到了一些不穩定的 bug,比如會 OOM,pathpolicy 不生效,有些特性在 merge gateway 模式下不生效等問題,在持續解決中,我們也在不斷幫助上游社區提改進意見和貢獻,希望未來可以能達到生產可用的狀態。

逼格很高但不那么實用的 Gateway 標準

Gateway 的處境很尬感,我的感覺是設計者并沒有真的實踐過多租戶場景,當多租戶共享一個集群時,就要明確區分管理者和使用者的權限問題,Gateway 設計之初就沒完全考慮清楚,舉個例子:

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: eg
spec:
  gatewayClassName: eg
  listeners:
  - name: http
    port: 80
    protocol: HTTP
    # hostname: "*.example.com"
  - name: https
    port: 443
    protocol: HTTPS
    # hostname: "*.example.com"
    tls:
      mode: Terminate
      certificateRefs:
      - kind: Secret
        name: example-com

這里監聽端口這類的配置應該是給集群管理員而不是普通用戶,而 TLS 證書的配置屬于某個應用,管理員可以有權限配置,主要還是每個用戶去配置自己的,所以這里面權限就沒有分開。 那就只能讓用戶也有權限配置 Gateway,所以這里就又需要在控制器里實現很多的權限控制的細節問題,如端口號白名單,沖突檢測等。

個人覺得更優雅的設計是把其中租戶級別的字段下沉到 HTTPRoute 中實現,或者一個單獨的 CRD,這樣用戶態和超級管理員就可以分開的更清楚。 現有的方式也能做,就是有點混雜。

最終 Higress 勝出

除了以上重點的項目我們還測試了很多其他項目,我這里就不一一列舉了。 Sealos 最終選了 Higress。

我們目前選擇網關的邏輯很簡單,主要就是在滿足我們功能的前提下足夠穩定,最終選擇 Higress 幾乎是排除法得出來的。

穩定性是排在第一位的,在我們的場景里面能夠達到生產可用的目前只有 Higress,不過實踐過程中也出現過一些問題,好在 Higress 社區的支持力度很大,很快速的解決了,主要有幾個:

  1. ingress 生效速度慢,路由條目多時 2min 多新建路由才能生效,社區最后優化到了 3s 左右,這已經到極致了,也沒有再優化的必要了,因為已經比容器 Ready 時間還短了, Higress 使用了一種增量加載配置的機制,讓海量路由條目時也能有夸張的性能。
  2. 控制器 OOM,在無動態加載時資源消耗比較大,出現過 OOM 的情況,目前三高問題都解決掉了。
  3. 超時問題,有一個進一步優化加載延時的參數配置 onDemandRDS 在我們一個主集群會偶發請求超時,目前是把該配置關閉了,還在進一步查看原因,而在其它集群中未發現這個問題。

安全性方面,我們很多時候的故障問題都是性能問題造成的,流量過大,打爆網關比較常見,所以網關的性能變得至關重要,實測下來 Envoy 要彪悍很多,控制器寫的好不好也生死攸關,這個方面 Higress 表現出眾:

image

image

在我們已經海量路由,超高并發的情況下,需要的資源少的可憐。

Higress 還兼容 Nginx Ingress 語法,主要是一些 annotations,我們之前的代碼都是用的 Ingress,所以幾乎沒有任何遷移成本,直接幾分鐘的升級就可以搞定。

同樣為了促進社區更好的發展我們也給 Higress 一些意見:

  • 能對 Gateway 的標準有更好的支持,目前雖然已經支持了 v1 版本,但還沒有完全兼容 ingress 上的能力。
  • 能開放出一些大殺器的功能,比如安全和熔斷方面的能力。讓開源和商業結合的更緊密一些,我們倒是不排斥付費,但是隨著平臺發展,需要更強的一些功能。
  • 周邊功能建議更多通過插件機制擴展,讓核心功能更內聚一些,簡單可依賴。

總結

網關對于云和應用而言是個非常非常核心的組件,隨著我們規模的不斷擴大也會出現很多新的挑戰,我們希望能和上下游社區建立緊密的合作,讓開源網關能得到更好的發展,讓更多開發者受益。

以上列舉的很多網關都很優秀,Sealos 沒用不代表項目不厲害,只是我們的場景苛刻且奇葩,真的在公網環境能支持多租戶的網關并不多,所以各位看官還是要從自己的場景出發,我們的選型僅作參考,同樣 Sealos 本身也會以一個開放心態來繼續跟進其他網關的發展。

最后非常感謝 Higress 開源社區的大力支持,感謝阿里云云原生團隊開源了這么優秀的項目,造福廣大社區用戶。
sealos 以kubernetes為內核的云操作系統發行版,讓云原生簡單普及

laf 寫代碼像寫博客一樣簡單,什么docker kubernetes統統不關心,我只關心寫業務!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,412評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,514評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,373評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,975評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,743評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,199評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,262評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,414評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,951評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,780評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,527評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,218評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,649評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,889評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,673評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內容