ELB Ingress網(wǎng)關(guān)助力云原生應(yīng)用輕松管理流量(esb api網(wǎng)關(guān))
本文分享自華為云社區(qū)《ELB Ingress網(wǎng)關(guān)助力云原生應(yīng)用輕松管理流量-云社區(qū)-華為云》,作者:云容器大未來。
背景
通常情況下,K8s集群的容器網(wǎng)絡(luò)平面和外部網(wǎng)絡(luò)是隔離的,外部網(wǎng)絡(luò)無法直接訪問到集群內(nèi)部的容器業(yè)務(wù),如何為容器提供并管理統(tǒng)一的外部流量入口?社區(qū)提供的常見方式是使用Nodeport Service,Loadbalancer Service,Ingress等K8s資源對象來暴露集群內(nèi)部的容器原生應(yīng)用。Service對象提供了四層負(fù)載均衡能力,Ingress對象則提供了面向應(yīng)用層訪問(HTTP/HTTPS等)的七層負(fù)載均衡能力。
而隨著云原生架構(gòu)在企業(yè)內(nèi)的普遍落地,容器作為云原生微服務(wù)應(yīng)用的載體,需要面對更多挑戰(zhàn),如面對微服務(wù)的復(fù)雜組網(wǎng),業(yè)務(wù)請求在云服務(wù)之間轉(zhuǎn)發(fā)往往需要做源地址轉(zhuǎn)換而導(dǎo)致流量分發(fā)損耗;游戲類、電商搶購類等業(yè)務(wù)在短時間內(nèi)會進(jìn)行頻繁擴(kuò)縮容,必須應(yīng)對高并發(fā)的網(wǎng)絡(luò)流量;網(wǎng)關(guān)入口流量應(yīng)對互聯(lián)網(wǎng)的安全攻擊,如灰產(chǎn)、異常流量,需提供流量安全防護(hù)能力;此外,支持更加復(fù)雜的路由規(guī)則配置、多種應(yīng)用層協(xié)議(HTTP、HTTPS、GRPC等)、應(yīng)用藍(lán)綠發(fā)布、流量可觀測性等七層高級轉(zhuǎn)發(fā)能力也逐漸成為了云原生應(yīng)用的普遍訴求。
Ingress Nginx,Ingress Kong,Traefik等開源社區(qū)方案雖然提供了豐富的七層流量治理功能, 但對于關(guān)鍵生產(chǎn)業(yè)務(wù)上云,企業(yè)在選擇Ingress方案時,除了考慮功能性,還需要充分權(quán)衡安全性、可維護(hù)性和可靠性等方面的需求,以找到最佳平衡點。專業(yè)的云服務(wù)提供商提供托管的Ingress解決方案,能夠較好的應(yīng)對這些挑戰(zhàn)。
華為云CCE服務(wù)(云容器引擎_CCE_搭建_部署_企業(yè)級云容器_容器引擎-華為云)提供了基于應(yīng)用型負(fù)載均衡ELB(Elastic Load Balance)的全托管免運維的企業(yè)級 Ingress 流量治理,讓用戶輕松應(yīng)對云原生應(yīng)用流量管理。
ELB Ingress 介紹
在K8s集群中,容器網(wǎng)絡(luò)平面通常是獨立于集群主機(jī)網(wǎng)絡(luò)的一個隔離的網(wǎng)絡(luò)平面,工作負(fù)載在滾動升級或者重新調(diào)度后容器的地址會有變化,這就帶來一個問題:如何實現(xiàn)某組Pod的服務(wù)發(fā)現(xiàn),并提供固定的外部訪問入口?Service和Ingress對象就是K8s中實現(xiàn)集群內(nèi)外應(yīng)用統(tǒng)一訪問入口的一種機(jī)制。
K8s社區(qū)對集群外部的流量暴露提供了三種方式:Nodeport Service、Loadbalancer Service、Ingress,前兩者Service對象主要提供集群四層流量入口,Ingres對象提供七層流量治理能力。兩者相互配合,共同實現(xiàn)K8s集群應(yīng)用的對外訪問機(jī)制。如下圖一所示,客戶端通過Ingress管理的負(fù)載均衡器,訪問Ingress申明的路由,由負(fù)載均衡器將流量經(jīng)過后端Service導(dǎo)入至后端容器。
圖一:Ingress示例
ELB Ingress是華為云CCE服務(wù)提供的七層流量治理功能,基于社區(qū)標(biāo)準(zhǔn)Ingress API實現(xiàn),提供高可用、高性能、高安全、多協(xié)議的全托管免運維負(fù)載均衡能力。同時具備彈性能力,在流量突發(fā)時支持快速擴(kuò)展計算資源,支持千萬級并發(fā)連接,百萬級新建連接,是云原生應(yīng)用流量治理的理想選擇。
ELB Ingress工作原理
ELB Ingress部署于CCE集群的master節(jié)點上,與ELB實例對接,可將Ingress申明的容器后端地址、轉(zhuǎn)發(fā)策略、路由等信息配置至ELB實例,并且支持動態(tài)更新。
圖二是基于Nodeport中轉(zhuǎn)的ELB Ingress工作流圖,CCE Standard集群使用該方案的原理如下:
- 用戶為集群創(chuàng)建Ingress資源,在Ingress中配置流量訪問規(guī)則,如負(fù)載均衡器實例、URL路由、SSL證書等監(jiān)聽信息,以及訪問的后端Service等,控制器通過標(biāo)簽選擇器選中工作負(fù)載,將工作負(fù)載所在節(jié)點和Nodeport端口掛載至負(fù)載均衡器實例的后端;
- Ingress Controller監(jiān)聽到Ingress資源發(fā)生變化時,會根據(jù)其中定義的流量訪問規(guī)則,在ELB側(cè)重新配置監(jiān)聽器以及后端服務(wù)器路由;
- 用戶通過ELB訪問應(yīng)用程序,流量根據(jù)ELB中配置的轉(zhuǎn)發(fā)策略轉(zhuǎn)發(fā)到對應(yīng)的Node節(jié)點,再經(jīng)過Nodeport二次轉(zhuǎn)發(fā)訪問到關(guān)聯(lián)的工作負(fù)載(Nodeport轉(zhuǎn)發(fā)機(jī)制參見k8s官方文檔說明)。
圖二: Nodeport中轉(zhuǎn)的ELB Ingress流程圖
該方案中流量經(jīng)過節(jié)點、IPTables/IPVS規(guī)則多次轉(zhuǎn)發(fā),網(wǎng)絡(luò)性能存在損耗。在大流量場景下,網(wǎng)絡(luò)轉(zhuǎn)發(fā)效率、網(wǎng)絡(luò)連通速度的挑戰(zhàn)尤為突出。為此,我們推出了基于CCE Turbo集群的網(wǎng)絡(luò)加速方案:容器直接使用VPC網(wǎng)絡(luò)實現(xiàn)直通容器的ELB Ingress,將原有的“容器網(wǎng)絡(luò) 虛擬機(jī)網(wǎng)絡(luò)“兩層模型簡化為一層。如圖三所示,集群中的Pod IP直接從VPC中分配,支持北向ELB直通容器,外部流量可以不經(jīng)過節(jié)點端口轉(zhuǎn)發(fā)直接訪問集群中的Pod,達(dá)到流量分發(fā)零損耗的效果。
圖三:容器網(wǎng)絡(luò)直通的ELB Ingress流程圖
ELB Ingress流量治理核心優(yōu)勢
ELB Ingress基于原生Kubernetes Ingress,通過聲明式API指定Ingress的路由、對接的后端服務(wù),或者通過Annotation配置監(jiān)聽側(cè)的高級選項,由系統(tǒng)保證最終一致性。ELB Ingress為開發(fā)者和運維人員提供了極大的開發(fā)靈活性和維護(hù)便利性,其核心優(yōu)勢包括:
- 高吞吐、高可用、高彈性
ELB Ingress搭配獨享型ELB實例,最高支持2千萬并發(fā)連接;通過完善的健康檢查機(jī)制,保障業(yè)務(wù)實時在線,支持多可用區(qū)的同城雙活容災(zāi),無縫實時切換;彈性規(guī)格ELB實例支持根據(jù)流量負(fù)載自動彈性擴(kuò)縮實例規(guī)格,適用于業(yè)務(wù)用量波動較大的場景,例如游戲、視頻等行業(yè),能滿足瞬時流量同時成本最小化。
- 高安全性
ELB Ingress提供了端到端的全鏈路安全策略,如下圖四是外部流量經(jīng)過ELB訪問CCE Turbo集群的簡單示例:在訪問端可配置接入WAF引擎檢測并攔截惡意攻擊流量,而正常流量轉(zhuǎn)發(fā)至后端云服務(wù)器。通過Ingress的Annotation配置可輕松為ELB實例配置自定義安全策略,例如設(shè)置黑白名單,雙向認(rèn)證等。從ELB轉(zhuǎn)發(fā)至后端也支持HTTPS加密信道,進(jìn)一步增強(qiáng)整體安全性。
圖四: 外部流量訪問CCE Turbo安全示例
- 可移植性
完全兼容社區(qū)Ingress語義,從開源Nginx Ingress等方案遷移過來僅需改造annotation即可輕松適配。
- 可觀測性
云監(jiān)控可以按時間軸查看ELB的網(wǎng)絡(luò)流量和訪問日志,動態(tài)分析并告警潛在風(fēng)險;云審計可以實時監(jiān)控ELB資源更新日志,針對風(fēng)險動作實時告警,動態(tài)監(jiān)控云上資源安全;Ingress Controller也支持豐富的普羅監(jiān)控指標(biāo),如接口調(diào)用時延,reload次數(shù)等。
- 免維護(hù)性
ELB Ingress組件運行在集群的Master節(jié)點,用戶無需關(guān)注運維問題,組件在集群升級時會自動更新,且對業(yè)務(wù)無感。
ELB Ingress流量治理核心功能
在社區(qū)基礎(chǔ)功能之上,華為云ELB Ingress在負(fù)載均衡、路由規(guī)則、流量控制、安全性和可觀測性等方面都有較大增強(qiáng),滿足了更復(fù)雜的生產(chǎn)環(huán)境需求。下面介紹ELB Ingress流量治理核心功能:
- 灰度發(fā)布
灰度發(fā)布是業(yè)界常用的版本升級平滑過渡的一種方式。在版本升級時,先讓部分用戶使用新版本,其他用戶繼續(xù)使用老版本。待新版本穩(wěn)定后,再逐步擴(kuò)大新版本的使用范圍,直到所有用戶流量都遷移到新版本上。這樣可以最大限度地控制新版本發(fā)布帶來的業(yè)務(wù)風(fēng)險,降低故障影響范圍,同時支持快速回滾。
我們提供了基于Header/Cookie/Weight的灰度發(fā)布策略,前兩種策略通過將用戶分成若干組,在不同的時間段內(nèi)逐步引入新版本,最終擴(kuò)大新版本的影響范圍;基于Weight的策略則是通過控制新版本的權(quán)重,在不同時間段內(nèi)逐步增加新版本的流量比例,直到完全替代舊版本。
- 高級轉(zhuǎn)發(fā)策略
隨著云原生應(yīng)用組網(wǎng)的日益復(fù)雜,傳統(tǒng)的基于路由轉(zhuǎn)發(fā)的七層流量治理已經(jīng)難以滿足需求。我們提供的高級轉(zhuǎn)發(fā)策略可以很好地解決傳統(tǒng)方案面臨的局限性:
- 基于請求頭的負(fù)載均衡:根據(jù)客戶端請求頭的不同值,將請求分配到不同的后端服務(wù)器。
- HTTP重定向到HTTPS:系統(tǒng)自動將HTTP監(jiān)聽器流量轉(zhuǎn)發(fā)至HTTPS監(jiān)聽,提升網(wǎng)站安全性,防止內(nèi)容篡改等。
- URL重定向和重寫:支持將URL永久或臨時映射到另一個URL。同時,支持正則表達(dá)式匹配和實現(xiàn)不同路徑的重寫規(guī)則。
- 慢啟動
在應(yīng)用滾動升級時,ELB Ingress會自動更新負(fù)載均衡器后端,并且根據(jù)后端容器實例副本數(shù)自動設(shè)置后端權(quán)重。但是,在后端健康檢查通過后的上線過程中,可能面臨流量突增,導(dǎo)致后端容器的CPU或內(nèi)存資源瞬間高負(fù)荷,從而影響業(yè)務(wù)穩(wěn)定性。在開啟慢啟動模式后,系統(tǒng)可以在指定時間內(nèi),逐步將流量導(dǎo)入到目標(biāo)容器后端。這樣可以緩解業(yè)務(wù)容器突增的流量壓力,保護(hù)系統(tǒng)免受過度負(fù)載的影響,實現(xiàn)優(yōu)雅過渡。
小結(jié)
華為云CCE服務(wù)的ELB Ingress基于華為云應(yīng)用型負(fù)載均衡ELB(Elastic Load Balance)提供強(qiáng)大的Ingress流量管理能力,兼容Nginx Ingress,具備處理復(fù)雜業(yè)務(wù)路由和證書自動發(fā)現(xiàn)的能力,支持HTTP、HTTPS和GRPC等協(xié)議,滿足在云原生應(yīng)用場景下對超強(qiáng)彈性和大規(guī)模七層流量處理能力的需求。
后續(xù)我們還將發(fā)布系列文章,詳細(xì)介紹基于ELB Ingress的流量管理最佳實踐,歡迎各位讀者繼續(xù)關(guān)注。
相關(guān)鏈接:
- 華為云云容器引擎CCE服務(wù)路由概述:https://support.huaweicloud.com/usermanual-cce/cce_10_0094.html
- Ingress官方文檔:https://kubernetes.io/docs/concepts/services-networking/ingress/
關(guān)注#華為云開發(fā)者聯(lián)盟#點擊下方,第一時間了解華為云新鮮技術(shù)~