一文讀懂 “云原生網(wǎng)關(guān)” 演進(jìn)史
Hello folks,我是 Luga,今天我們來(lái)聊一下云原生網(wǎng)關(guān)的歷史演進(jìn)歷程:從 Ingress 到 Gateway API。
眾所周知,Kubernetes 網(wǎng)絡(luò)格局正在發(fā)生深刻的變化。傳統(tǒng)的 Kubernetes Ingress 方法正在被一種更強(qiáng)大、更靈活、更具擴(kuò)展性的標(biāo)準(zhǔn)所補(bǔ)充,甚至在某些情況下被其取代:Kubernetes Gateway API。
1.云原生網(wǎng)關(guān)發(fā)展歷史點(diǎn)滴
眾所周知,在云原生生態(tài)體系下,Kubernetes 事實(shí)上已成為編排和管理容器化應(yīng)用程序的首選平臺(tái),其核心能力之一是網(wǎng)絡(luò)流量管理。因?yàn)榫W(wǎng)絡(luò)的高效管理對(duì)于確保這些應(yīng)用程序的性能和可用性至關(guān)重要。然而,在處理 Kubernetes 網(wǎng)絡(luò)的復(fù)雜性通常會(huì)導(dǎo)致 Ingress 方法面臨諸多挑戰(zhàn)。雖然 Ingress 是當(dāng)前管理集群服務(wù)外部流量的標(biāo)準(zhǔn)方法,但在復(fù)雜的環(huán)境中,往往需要依賴自定義注釋和自定義資源定義 (CRD) 來(lái)實(shí)現(xiàn)所需的操作,從而無(wú)疑增加了管理難度和維護(hù)成本。
傳統(tǒng)的 Ingress 控制器提供了基本的 HTTP 路由功能,但在面對(duì)更復(fù)雜的流量管理需求時(shí),其靈活性和擴(kuò)展性顯得力不從心。用戶不得不通過(guò)添加各種自定義注釋或引入額外的 CRD 來(lái)實(shí)現(xiàn)高級(jí)功能,如細(xì)粒度的流量控制、安全策略、多租戶隔離等。這種方式不僅增加了配置的復(fù)雜性,還可能導(dǎo)致不同環(huán)境下的行為不一致,進(jìn)而影響系統(tǒng)的穩(wěn)定性和可維護(hù)性。
Kubernetes Gateway API 帶來(lái)了令人期待的變革。作為一種更現(xiàn)代化的解決方案,Gateway API 提供了一個(gè)基于角色的、適應(yīng)性強(qiáng)的框架,與使用 Kubernetes 服務(wù)網(wǎng)絡(luò)的組織角色保持一致,簡(jiǎn)化了網(wǎng)絡(luò)管理和流量控制。Gateway API 不僅保留了 Ingress 的優(yōu)點(diǎn),還在多個(gè)方面進(jìn)行了改進(jìn)和擴(kuò)展。它提供了更豐富的路由功能,支持多種協(xié)議和高級(jí)流量管理策略,能夠更好地適應(yīng)復(fù)雜的微服務(wù)環(huán)境和高并發(fā)場(chǎng)景。
此外,Gateway API 注重安全性和可擴(kuò)展性,通過(guò)細(xì)粒度的策略控制和靈活的配置選項(xiàng),確保在多租戶環(huán)境下的資源隔離和安全性。它引入了控制平面和數(shù)據(jù)平面的分離,允許不同團(tuán)隊(duì)基于各自的角色和職責(zé),獨(dú)立管理和配置流量策略。這不僅提高了系統(tǒng)的可維護(hù)性和可擴(kuò)展性,還增強(qiáng)了團(tuán)隊(duì)協(xié)作的效率。
2.Ingress :讓 Kubernetes 流量管理變得簡(jiǎn)單
在 Kubernetes 中,Ingress 是一個(gè)關(guān)鍵的 API 對(duì)象,通常被用于管理集群中服務(wù)的外部 IP 訪問(wèn)。其主要功能是將外部的 HTTP 和 HTTPS 流量路由到集群內(nèi)的相應(yīng)服務(wù),從而提供了一種將外部請(qǐng)求引導(dǎo)至內(nèi)部應(yīng)用的簡(jiǎn)便方式。通過(guò)定義一組規(guī)則,Ingress 資源控制了這些流量的路由路徑,可以實(shí)現(xiàn)多種復(fù)雜的流量管理需求。
Ingress 資源不僅支持基本的 HTTP 和 HTTPS 路由,還可以配置為提供服務(wù)的 SSL/TLS 終止,這意味著它可以處理加密流量并在入口點(diǎn)解除加密,從而減輕后端服務(wù)的負(fù)擔(dān)。此功能在保證數(shù)據(jù)傳輸安全的同時(shí),提升了系統(tǒng)的整體性能。此外,Ingress 還支持流量負(fù)載平衡,通過(guò)將外部請(qǐng)求均勻分配到多個(gè)后端服務(wù)實(shí)例上,確保了服務(wù)的高可用性和可靠性。它還能提供外部可訪問(wèn)的 URL,使得用戶可以通過(guò)域名直接訪問(wèn)集群中的服務(wù),簡(jiǎn)化了對(duì)外服務(wù)的配置和管理。
基于名稱的虛擬托管也是 Ingress 的一大特點(diǎn)。通過(guò)配置不同的域名和路徑,Ingress 可以將來(lái)自同一入口點(diǎn)的流量路由到不同的服務(wù),從而實(shí)現(xiàn)同一 IP 地址上的多服務(wù)托管。這對(duì)運(yùn)行多個(gè)微服務(wù)的應(yīng)用架構(gòu)尤其有用,可以顯著簡(jiǎn)化外部流量的管理。
Ingress 的功能實(shí)現(xiàn)通常依賴于 Ingress 控制器。Ingress 控制器是一種專門的組件,它負(fù)責(zé)監(jiān)控 Ingress 資源的變化并相應(yīng)地配置底層負(fù)載均衡器或其他前端設(shè)備。雖然負(fù)載均衡器是最常見(jiàn)的 Ingress 控制器實(shí)現(xiàn)方式,但它也可以配置其他前端設(shè)備(例如邊緣路由器)來(lái)協(xié)助管理流量。這種靈活性使得 Ingress 能夠適應(yīng)各種不同的網(wǎng)絡(luò)拓?fù)浜托枨髨?chǎng)景。
通過(guò)使用 Ingress,用戶可以集中管理集群內(nèi)的服務(wù)訪問(wèn),避免了在每個(gè)服務(wù)上公開(kāi)節(jié)點(diǎn) IP 或者為每個(gè)服務(wù)創(chuàng)建單獨(dú)的負(fù)載均衡器。這不僅簡(jiǎn)化了配置管理,還降低了資源消耗和運(yùn)營(yíng)成本。因此,Ingress 被廣泛應(yīng)用于 Kubernetes 集群中,成為了管理外部流量訪問(wèn)的標(biāo)準(zhǔn)方法。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: devops-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /api
backend:
serviceName: api-service
servicePort: 8080
- path: /web
backend:
serviceName: web-service
servicePort: 80
其實(shí),從本質(zhì)上來(lái)講,起初,Ingress 控制器被引入 Kubernetes 生態(tài)系統(tǒng),以解決集群內(nèi)外部流量的管理問(wèn)題。Ingress 提供了一種簡(jiǎn)潔的方式來(lái)定義路由規(guī)則,使得外部請(qǐng)求能夠正確地到達(dá)內(nèi)部服務(wù)。通過(guò)配置 Ingress 資源,用戶可以實(shí)現(xiàn)基于 HTTP 和 HTTPS 的路徑路由、負(fù)載均衡以及 SSL 終止等功能。Ingress 控制器作為 Kubernetes 集群中的標(biāo)準(zhǔn)組件,被廣泛采用。
然而,隨著微服務(wù)架構(gòu)的復(fù)雜性增加,Ingress 的局限性逐漸顯現(xiàn)。其配置方式相對(duì)簡(jiǎn)單,難以滿足復(fù)雜路由規(guī)則和高級(jí)流量管理需求。此外,Ingress 缺乏對(duì)多租戶隔離、細(xì)粒度安全策略等功能的支持,這使得在大規(guī)模應(yīng)用場(chǎng)景中顯得力不從心。
3.IngressRoute :解鎖 Kubernetes 流量管理的精細(xì)化密鑰
Ingress Route 作為 Kubernetes Ingress 的擴(kuò)展實(shí)現(xiàn),旨在解決標(biāo)準(zhǔn) Kubernetes Ingress 功能有限的問(wèn)題,為云原生應(yīng)用提供更加豐富、靈活和強(qiáng)大的流量管理能力。它由 Kubernetes Ingress 社區(qū)獨(dú)立維護(hù),與眾多流行的 Ingress 控制器相兼容,如 Contour、Nginx Ingress Controller、Envoy 等,為用戶提供了更廣闊的選擇空間。
標(biāo)準(zhǔn) Kubernetes Ingress 的功能相對(duì)較為簡(jiǎn)單,主要基于域名和 URL 路徑進(jìn)行路由轉(zhuǎn)發(fā),缺乏更高級(jí)的路由策略和協(xié)議支持。而 Ingress Route 在此基礎(chǔ)上做了大幅增強(qiáng),提供了諸多強(qiáng)大的功能特性。
apiVersion: contour.heptio.com/v1
kind: IngressRoute
metadata:
name: devops-ingress-route
spec:
virtualhost:
fqdn: example.com
routes:
- match: /api
services:
- name: api-service
port: 8080
- match: /web
services:
- name: web-service
port: 80
通常而言,Ingress Route 主要解決了傳統(tǒng) Ingress 對(duì)象在以下幾個(gè)方面的問(wèn)題,具體可參考如下所示:
(1) 配置復(fù)雜性和靈活性
傳統(tǒng) Ingress 使用標(biāo)準(zhǔn)的 Kubernetes Ingress 對(duì)象,配置較為簡(jiǎn)單,但靈活性有限,尤其是對(duì)于復(fù)雜的流量管理需求(如多層次的路徑路由、基于頭信息的路由、加權(quán)路由等)。而 Ingress Route 則提供了更細(xì)粒度的控制和配置選項(xiàng),可以定義更復(fù)雜的路由規(guī)則、流量管理策略等。
(2) TLS管理
傳統(tǒng) Ingress 的 TLS 配置相對(duì)簡(jiǎn)單,支持單一的 TLS 證書(shū)管理,無(wú)法輕松地為不同域名或路徑配置不同的 TLS 策略。而 Ingress Route 則通常支持更豐富的 TLS 配置,可以為不同的路由定義獨(dú)立的 TLS 證書(shū)和策略,從而提高了安全性和管理的靈活性。
(3) 路由規(guī)則的表達(dá)能力
傳統(tǒng) Ingress 路由規(guī)則的表達(dá)能力有限,主要基于路徑前綴匹配。而 Ingress Route 則支持更復(fù)雜的路由規(guī)則,例如基于請(qǐng)求頭、查詢參數(shù)、路徑等多種條件的路由規(guī)則,滿足更精細(xì)的流量管理需求。
(4) 流量分配和負(fù)載均衡
傳統(tǒng) Ingress 的負(fù)載均衡策略比較簡(jiǎn)單,通常是基于輪詢等基本策略。而 Ingress Route 支持更復(fù)雜的流量分配策略,例如加權(quán)輪詢、基于請(qǐng)求屬性的負(fù)載均衡、流量鏡像等。
(5) 健康檢查和故障轉(zhuǎn)移
傳統(tǒng) Ingress 健康檢查和故障轉(zhuǎn)移功能相對(duì)簡(jiǎn)單。Ingress Route 則通常集成了更高級(jí)的健康檢查和故障轉(zhuǎn)移功能,能夠更有效地檢測(cè)和應(yīng)對(duì)后端服務(wù)的故障。
(6) 擴(kuò)展性和插件支持
傳統(tǒng) Ingress 在擴(kuò)展性層面支持有限,難以集成自定義的功能或第三方插件。而 Ingress Route 則通常設(shè)計(jì)為更易于擴(kuò)展,可以方便地集成各種自定義功能和第三方插件,以滿足不同的業(yè)務(wù)需求。
總的來(lái)說(shuō),Ingress Route 雖然為云原生應(yīng)用帶來(lái)了更加靈活和強(qiáng)大的流量管理能力,但也同時(shí)增加了管理和運(yùn)維的復(fù)雜度。因此,在采用 Ingress Route 時(shí),需要全面評(píng)估其帶來(lái)的好處和挑戰(zhàn),并做好相應(yīng)的準(zhǔn)備工作,包括團(tuán)隊(duì)技能培養(yǎng)、流程優(yōu)化等,以確保能夠充分發(fā)揮其強(qiáng)大功能,并將復(fù)雜性控制在可管理的范圍內(nèi)。同時(shí),也需要根據(jù)實(shí)際需求和團(tuán)隊(duì)情況,選擇合適的 Ingress 控制器,以盡可能減少不必要的復(fù)雜性。只有這樣,才能真正釋放 Ingress Route 的全部潛力,為云原生應(yīng)用提供高效、可靠的流量管理服務(wù)。
4.Gateway API :云原生時(shí)代 API 管理新范式
Kubernetes Gateway API 是由 SIG-NETWORK 社區(qū)管理的一種規(guī)范或標(biāo)準(zhǔn),旨在統(tǒng)一對(duì) Kubernetes 集群中服務(wù)網(wǎng)絡(luò)的建模和描述方式。它提供了一種靈活且基于角色的接口,讓用戶可以更好地定義和管理 Kubernetes 服務(wù)網(wǎng)絡(luò),從而優(yōu)化服務(wù)暴露、流量管理和安全策略等方面的功能。
作為 Kubernetes 生態(tài)系統(tǒng)中的一項(xiàng)關(guān)鍵規(guī)范,Gateway API 為不同的網(wǎng)絡(luò)解決方案提供了統(tǒng)一的抽象層和模型語(yǔ)義。這種統(tǒng)一性使得各種網(wǎng)絡(luò)解決方案能夠遵循相同的模型和語(yǔ)義,從而極大提高了跨平臺(tái)的可移植性和可重用性。用戶無(wú)需重新學(xué)習(xí)新的操作界面和流程,只需在不同環(huán)境和平臺(tái)之間無(wú)縫切換,即可享受到相同的使用體驗(yàn)。
對(duì)于支持 Gateway API 的項(xiàng)目和公司而言,全面遵守該規(guī)范具有重要意義。這不僅可以確保它們實(shí)現(xiàn)了與規(guī)范完全一致的功能和行為,而且還可以獲得 Kubernetes 社區(qū)的大力支持。Gateway API 由活躍的 Kubernetes 社區(qū)集體維護(hù),社區(qū)中的貢獻(xiàn)者們不遺余力地持續(xù)優(yōu)化和完善這一規(guī)范,使其能夠與 Kubernetes 生態(tài)系統(tǒng)的發(fā)展同步演進(jìn)。因此,支持 Gateway API 的項(xiàng)目和公司可以借助社區(qū)的力量,及時(shí)獲得規(guī)范的更新和改進(jìn),確保其產(chǎn)品和服務(wù)能夠隨時(shí)與最新版本的 Gateway API 保持一致,為用戶提供始終如一的優(yōu)秀體驗(yàn)。
Gateway API 的推出標(biāo)志著 Kubernetes 服務(wù)網(wǎng)絡(luò)發(fā)展的一個(gè)新里程碑,為適應(yīng)現(xiàn)代化復(fù)雜部署環(huán)境帶來(lái)了前所未有的功能支持。這項(xiàng)創(chuàng)新性的技術(shù)為組織在 Kubernetes 環(huán)境中高效管理流量提供了全新的工具,促進(jìn)了跨部門之間的無(wú)縫運(yùn)營(yíng)協(xié)作,為構(gòu)建靈活、可擴(kuò)展的云原生體系架構(gòu)注入了新的動(dòng)力。
然而,Gateway API 技術(shù)的真正適用性和價(jià)值體現(xiàn),取決于其是否與特定組織的架構(gòu)模式和運(yùn)維理念相契合,是否能夠成功地在不同的團(tuán)隊(duì)和部門之間合理分配工作負(fù)荷。Gateway API 的有效性仍有待在實(shí)踐中經(jīng)受更多的檢驗(yàn)和觀察。
毋庸置疑,傳統(tǒng)的 Ingress 規(guī)范一直以其簡(jiǎn)單直觀的性質(zhì)而備受青睞,這使得它在處理基本的流量管理場(chǎng)景時(shí)游刃有余。但是,當(dāng)面臨復(fù)雜的多租戶環(huán)境、微服務(wù)架構(gòu)、數(shù)據(jù)平面與控制平面解耦等現(xiàn)代化需求時(shí),Ingress 規(guī)范的局限性就暴露無(wú)遺了。
與之相比,Gateway API 憑借其增強(qiáng)的安全性、職責(zé)分離以及更豐富的功能集,為組織提供了一種全新的選擇方案。通過(guò)將控制平面和數(shù)據(jù)平面進(jìn)行邏輯上的分離,Gateway API 實(shí)現(xiàn)了對(duì)流量管理職責(zé)的合理劃分,使得網(wǎng)絡(luò)管理員和應(yīng)用開(kāi)發(fā)人員能夠各司其職,提高了運(yùn)維效率。同時(shí),它支持豐富的流量控制策略、安全加固機(jī)制以及與服務(wù)網(wǎng)格的無(wú)縫集成,為組織構(gòu)建更加健壯、可靠的云原生應(yīng)用系統(tǒng)奠定了堅(jiān)實(shí)基礎(chǔ)。
當(dāng)然,我們也需要清醒地認(rèn)識(shí)到,Gateway API 作為一種新興技術(shù),其成熟度和生態(tài)建設(shè)仍有待時(shí)日。許多組織或許會(huì)秉持保守策略,繼續(xù)選擇 Ingress 規(guī)范,除非 Gateway API 真正展現(xiàn)出其無(wú)可替代的優(yōu)勢(shì)。但無(wú)疑,對(duì)于那些追求卓越、渴望構(gòu)建下一代云原生應(yīng)用平臺(tái)的組織而言,Gateway API 值得被重點(diǎn)關(guān)注和評(píng)估。
因此,總的來(lái)說(shuō),Gateway API 的出現(xiàn)為 Kubernetes 生態(tài)注入了全新的活力,為云原生架構(gòu)的發(fā)展路徑提供了更多可能性。作為一種具有變革性意義的技術(shù)創(chuàng)新,將如何與組織內(nèi)部的運(yùn)維實(shí)踐、架構(gòu)模式相互融合、相互影響,如何在云原生領(lǐng)域掀起新的發(fā)展浪潮,這一切都將是非常值得期待和關(guān)注的。
Reference :
- [1] https://traefik.io/blog/getting-started-with-kubernetes-gateway-api-and-traefik/
- [2] https://avinetworks.com/glossary/kubernetes-ingress-services/