一文讀懂 Traefik Proxy 3.1 新版本特性
眾所周知,Traefik v3.0 的發(fā)布標(biāo)志著這款知名的云原生入口控制器邁入了全新的里程碑。為我們帶來了令人振奮的重大更新,其中包括對 WASM、Open Telemetry 和 Kubernetes Gateway API 的支持等關(guān)鍵新功能。這些創(chuàng)新性的加入不僅彰顯了 Traefik 在技術(shù)領(lǐng)域的引領(lǐng)地位,更為用戶帶來了前所未有的便利和性能提升。
關(guān)于 Traefik 3.x 發(fā)展點(diǎn)滴的一些思考
自從 Traefik 誕生以來,一直以其卓越的性能、靈活的配置和緊密的云原生集成而備受推崇。作為領(lǐng)先的開源入口控制器和反向代理,Traefik 已成為無數(shù)企業(yè)和組織實(shí)現(xiàn)云原生轉(zhuǎn)型的可靠利器。
而最新推出的 Traefik 3.x 版本,則標(biāo)志著這款優(yōu)秀軟件開啟了全新的發(fā)展歷程,為用戶帶來了一系列激動人心的創(chuàng)新和增強(qiáng)。
回顧 Traefik 3.0 的發(fā)布,我們不難發(fā)現(xiàn)它所引入的諸多關(guān)鍵新功能正是 Traefik 與時(shí)俱進(jìn)、緊跟技術(shù)潮流的充分體現(xiàn)。其中,對 WebAssembly(WASM) 的支持無疑是最引人注目的一項(xiàng)創(chuàng)新。憑借 WASM,Traefik 能夠可以在運(yùn)行時(shí)動態(tài)加載各種中間件,從而實(shí)現(xiàn)功能的無縫擴(kuò)展,大幅提升了系統(tǒng)的靈活性和可擴(kuò)展性。這一獨(dú)特的能力不僅為開發(fā)人員帶來了前所未有的自由,更為企業(yè)級應(yīng)用程序的部署和管理開放了全新的大門。
與此同時(shí),Traefik 3.0 對 OpenTelemetry 的支持也讓系統(tǒng)的可觀測性得到了極大增強(qiáng)。作為一種新興的云原生觀測標(biāo)準(zhǔn),OpenTelemetry 使 Traefik 能夠以統(tǒng)一且廠商無關(guān)的方式收集和導(dǎo)出跟蹤數(shù)據(jù)、指標(biāo)和日志,從而讓用戶更輕松地監(jiān)控和故障排查復(fù)雜的分布式系統(tǒng)。這一優(yōu)勢無疑將進(jìn)一步提升 Traefik 在企業(yè)級環(huán)境中的應(yīng)用價(jià)值。
最后,Traefik 3.0 對 Kubernetes Gateway API 的支持則徹底消除了它在 Kubernetes 生態(tài)系統(tǒng)中的"外來者"身份,使之成為集群中與生俱來的一員。憑借 Gateway API,Traefik 現(xiàn)在可以作為標(biāo)準(zhǔn)的 Kubernetes 資源進(jìn)行管理和配置,從而實(shí)現(xiàn)了與集群的無縫集成。這一里程碑式的進(jìn)步不僅簡化了 Traefik 在 Kubernetes 環(huán)境中的部署和使用,更重要的是,它為 Traefik 在云原生生態(tài)系統(tǒng)中扮演更加核心的角色奠定了基礎(chǔ)。
而就在 Traefik 3.0 的熱度未曾消退之時(shí),Traefik 3.1 版本的到來則讓這款云原生網(wǎng)關(guān)的實(shí)力再上新臺階。3.1 版本進(jìn)一步增強(qiáng)了 WASM 和網(wǎng)關(guān) API 的集成能力,其中尤為值得一提的是,隨著網(wǎng)關(guān) API 將很快成為 Kubernetes 集群中公開資源的新標(biāo)準(zhǔn),Traefik 3.1 的 Kubernetes 網(wǎng)關(guān) API 已做好充分準(zhǔn)備,可安全無虞地在生產(chǎn)環(huán)境中使用。這無疑是一個(gè)振奮人心的好消息,標(biāo)志著 Traefik 在云原生網(wǎng)關(guān)的征程上又邁出了堅(jiān)實(shí)的一步。
舉例來說,Traefik 與服務(wù)網(wǎng)格的結(jié)合將為微服務(wù)應(yīng)用程序帶來前所未有的靈活性、可觀測性和控制能力。而在邊緣計(jì)算場景下,Traefik 則可以作為關(guān)鍵的網(wǎng)關(guān)組件,實(shí)現(xiàn)對分布于全球各地的邊緣節(jié)點(diǎn)的統(tǒng)一管理和流量控制。
因此,我們可以毫不避諱地說,憑借其出眾的性能、創(chuàng)新的功能和與云原生生態(tài)的深度融合,Traefik 正在成為越來越多企業(yè)實(shí)現(xiàn)數(shù)字化轉(zhuǎn)型的首選利器。
關(guān)于 Traefik 3.1 核心特性簡要解析
作為規(guī)范的早期支持者,Traefik 從一開始就扮演著 GatewayController 的重要角色,為規(guī)范的制定和發(fā)展做出了寶貴的貢獻(xiàn)。
如今,備受矚目的 Traefik v3.1 版本正式面世,不僅全面滿足了 Gateway API 規(guī)范的核心要求,更是超越了這些基本標(biāo)準(zhǔn),為用戶帶來了更加出色的體驗(yàn)。正如 Kubernetes SIG 網(wǎng)絡(luò)團(tuán)隊(duì)的一致性測試報(bào)告所顯示:Traefik 在遵從 Gateway API 規(guī)范的同時(shí),還提供了更多增值功能和優(yōu)化,展現(xiàn)出了作為領(lǐng)先云原生網(wǎng)關(guān)的非凡實(shí)力。
這一喜人的成果標(biāo)志著,Traefik 的 Gateway API 提供商現(xiàn)已做好充分的準(zhǔn)備,可以安全無虞地在生產(chǎn)環(huán)境中使用了。對于那些渴望在 Kubernetes 集群中采用標(biāo)準(zhǔn)化網(wǎng)關(guān)資源的企業(yè)和組織而言,Traefik 無疑是最值得信賴的選擇。
1.狀態(tài)管理改進(jìn)
在現(xiàn)代云原生架構(gòu)中,“狀態(tài)管理”無疑是網(wǎng)關(guān) API 的核心組成部分。它使我們能夠?qū)崟r(shí)監(jiān)控基礎(chǔ)設(shè)施的運(yùn)行狀況,確保 GatewayAPI 對象可以隨時(shí)準(zhǔn)備就緒,高效地管理流量。對于 Traefik 這款領(lǐng)先的云原生網(wǎng)關(guān)而言,提供出色的狀態(tài)管理能力是其保持競爭力的關(guān)鍵所在。
在最新發(fā)布的 Traefik v3.1 版本中,通過緊密遵循 GatewayAPI 規(guī)范,Traefik 現(xiàn)在可以為用戶提供對象的真實(shí)生產(chǎn)狀態(tài)監(jiān)控,從而確保網(wǎng)關(guān)的可靠性和可用性。不論是 Gateway、GatewayClass、HTTPRoute 還是其他關(guān)鍵對象,Traefik 都能夠準(zhǔn)確計(jì)算和反映它們的實(shí)時(shí)狀態(tài),讓用戶可以一覽無余地掌握整個(gè)系統(tǒng)的運(yùn)行情況。
除了核心的狀態(tài)監(jiān)控能力,Traefik v3.1 在狀態(tài)管理方面還提供了更多增值功能。例如,用戶現(xiàn)在可以根據(jù)需求自定義狀態(tài)計(jì)算邏輯,讓監(jiān)控結(jié)果與實(shí)際業(yè)務(wù)場景更加貼合。此外,Traefik 還支持將狀態(tài)信息導(dǎo)出到各種監(jiān)控和可觀測性系統(tǒng),實(shí)現(xiàn)與現(xiàn)有基礎(chǔ)設(shè)施的無縫集成。
2.路由優(yōu)先級更新
我們都知道,長期以來,Traefik 一直采用基于規(guī)則長度的路由優(yōu)先級機(jī)制,旨在有效防止路由重疊的發(fā)生。該機(jī)制的運(yùn)作原理是,路徑越長的規(guī)則通常將擁有更高的優(yōu)先級,從而確保請求能夠被正確地路由至最精確的目的地。
然而,隨著 Kubernetes Gateway API 規(guī)范的推出,Traefik 面臨了全新的挑戰(zhàn)。該規(guī)范為路由優(yōu)先級制定了自己的一套規(guī)則,與 Traefik 原有機(jī)制存在一定差異。面對這一情況,在最新發(fā)布的 v3.1 版本中徹底更新了 HTTPRoutes 的優(yōu)先級計(jì)算方式。
在以往,當(dāng)用戶需要在不同的 Kubernetes 發(fā)行版或 GatewayController 之間進(jìn)行切換時(shí),往往需要重新配置和調(diào)整路由匹配系統(tǒng),以適應(yīng)各自的優(yōu)先級規(guī)則。這無疑增加了運(yùn)維的復(fù)雜度,也給系統(tǒng)的可移植性帶來了一定阻礙。
然而,憑借 Traefik v3.1 對規(guī)范的貫徹落實(shí),這一痛點(diǎn)將徹底消除?,F(xiàn)在,無論用戶是從其他 GatewayController 切換到 Traefik,還是在不同的 Kubernetes 發(fā)行版之間進(jìn)行遷移,路由匹配系統(tǒng)都可以保持完全一致,無需進(jìn)行任何調(diào)整或重新配置。這一獨(dú)特的優(yōu)勢不僅極大地簡化了運(yùn)維流程,更為用戶的系統(tǒng)帶來了無與倫比的可移植性和靈活性。
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
name: my-gateway
namespace: default
spec:
gatewayClassName: traefik
listeners:
- hostname: example.com
port: 80
protocol: HTTP
routes:
kind: HTTPRoute
namespaceSelector:
matchLabels:
app: web
middleware:
namespace: default
path: /middlewares
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
name: web-route
namespace: default
labels:
app: web
spec:
parentRefs:
- kind: Gateway
name: my-gateway
namespace: default
hostnames:
- "example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /
forwardTo:
- serviceName: web-service
port: 80
---
apiVersion: v1
kind: Service
metadata:
name: web-service
namespace: default
labels:
app: web
spec:
selector:
app: web
ports:
- port: 80
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
namespace: default
labels:
app: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: nginx
ports:
- containerPort: 8080
通過這個(gè)配置,我們可以看到 Traefik 如何與 Gateway API 資源集成。所有對 example.com 的 HTTP 請求都將被路由到 web-service,并最終由 web-deployment 處理。
值得注意的是,在此示例中,我們利用了 HTTPRoute 的 parentRefs 字段來指定所屬的 Gateway。這是 Gateway API 規(guī)范提供的標(biāo)準(zhǔn)方式,用于將路由與特定網(wǎng)關(guān)相關(guān)聯(lián)。
3.ReferenceGrant
在云原生架構(gòu)中,跨命名空間引用一直是一個(gè)棘手的問題。為了解決這一難題,Traefik 曾通過自定義的 IngressRoute 對象,引入了一個(gè)特殊選項(xiàng)來允許跨命名空間引用。盡管這種方式在一定程度上滿足了用戶需求,但潛在的安全隱患依然存在,使得它不夠完美。
在 Traefik v3.1 最新版本中,借助 ReferenceGrant,我們可以在 Traefik 中聲明一個(gè)網(wǎng)關(guān),該網(wǎng)關(guān)能夠訪問存儲在其他命名空間中的 TLS 證書等敏感資源。同時(shí),還也可以輕松地定義 HTTPRoute 對象,將流量路由到不同命名空間中的服務(wù)。這一全新的功能不僅消除了過去的安全隱患,更極大地簡化了跨命名空間引用的配置過程。
除了安全性和易用性的提升,ReferenceGrant 還為多租戶環(huán)境帶來了前所未有的靈活性。借助這一功能,我們可以輕松地在不同的命名空間中隔離租戶,同時(shí)仍然允許它們共享某些公共資源和服務(wù)。這種模式不僅有利于資源利用率的提高,更能夠滿足復(fù)雜的業(yè)務(wù)需求,為企業(yè)帶來更大的價(jià)值。
# HTTRoute in the default namespace.
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: whoami-http
namespace: default
spec:
parentRefs:
- name: traefik
kind: Gateway
rules:
- backendRefs:
- name: whoami
namespace: whoami
port: 80
# ReferenceGrant and Service in the whoami namespace.
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata:
name: whoami
namespace: whoami
spec:
from:
- group: gateway.networking.k8s.io
kind: HTTPRoute
namespace: default
to:
- group: ""
kind: Service
name: whoami
---
apiVersion: v1
kind: Service
metadata:
name: whoami
namespace: whoami
spec:
selector:
app: whoami
ports:
- port: 80
作為云原生時(shí)代的核心基礎(chǔ)設(shè)施,Kubernetes Gateway API 規(guī)范為網(wǎng)關(guān)控制器提供了統(tǒng)一的標(biāo)準(zhǔn)化接口,確保了不同供應(yīng)商之間的互操作性和兼容性。然而,僅滿足規(guī)范所需的核心功能是遠(yuǎn)遠(yuǎn)不夠的。為了真正釋放網(wǎng)關(guān)的全部潛能,并滿足日益增長的業(yè)務(wù)需求,規(guī)范還為 GatewayController 預(yù)留了可選的擴(kuò)展功能,以供供應(yīng)商根據(jù)自身產(chǎn)品特點(diǎn)進(jìn)行創(chuàng)新和拓展。
作為行業(yè)領(lǐng)先的云原生網(wǎng)關(guān),Traefik 在 v3.1 版本中緊跟潮流,為用戶帶來了一系列創(chuàng)新的擴(kuò)展功能,進(jìn)一步夯實(shí)了其在 Kubernetes 生態(tài)系統(tǒng)中的領(lǐng)導(dǎo)地位。
其中,最引人注目的當(dāng)屬 HTTPURLRewriteFilter 和 HTTPRouteRedirect 兩大功能。HTTPURLRewriteFilter 讓我們可以根據(jù)需求靈活地重寫 HTTP 請求的 URL,實(shí)現(xiàn)更精細(xì)化的流量控制和路由。無論是為了簡化 URL 結(jié)構(gòu)、隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié),還是實(shí)現(xiàn)端點(diǎn)遷移或負(fù)載均衡,這一強(qiáng)大的功能都可以發(fā)揮關(guān)鍵作用。
與之相呼應(yīng)的是 HTTPRouteRedirect 功能,賦予了 Traefik 重定向 HTTP 請求的能力。通過靈活的配置,我們可以根據(jù)各種條件(如路徑、主機(jī)名、請求方法等)來決定是否重定向,并指定重定向的目標(biāo) URL。這不僅有助于優(yōu)化用戶體驗(yàn),還可以用于實(shí)現(xiàn)安全策略、流量遷移等多種場景。
除了上述兩大亮點(diǎn),Traefik v3.1 還為 HTTPRoute 對象帶來了對請求方法和查詢參數(shù)匹配的支持。這意味著,我們現(xiàn)在可以根據(jù) HTTP 請求的方法(如 GET、POST 等)以及查詢參數(shù)來定義更精準(zhǔn)的路由規(guī)則,進(jìn)一步提高了流量控制的靈活性和準(zhǔn)確性。
當(dāng)然,除了 Gateway API 特性外,在 Traefik v3.1 中針對 WebAssembly(WASM) 的支持也進(jìn)行了優(yōu)化與改進(jìn)。通過優(yōu)化 WebAssembly 的支持,Traefik v3.1 現(xiàn)在允許用戶使用 WASM 編寫自定義中間件。這些中間件可以直接部署在 Traefik 實(shí)例中,從而實(shí)現(xiàn)對 HTTP 請求和響應(yīng)的細(xì)粒度處理和轉(zhuǎn)換。
想象一下,我們可以使用 WASM 來實(shí)現(xiàn)復(fù)雜的請求路由邏輯、內(nèi)容轉(zhuǎn)碼、安全檢查,甚至負(fù)載均衡等高級功能。由于 WebAssembly 的高性能和安全沙箱特性,這些自定義中間件將能夠以極高的效率和隔離性運(yùn)行,從而確保網(wǎng)關(guān)的穩(wěn)定性和可靠性。
這些創(chuàng)新功能的推出,再次彰顯了 Traefik 對用戶需求的高度重視,以及對技術(shù)創(chuàng)新的不懈追求。憑借出色的規(guī)范遵從性和領(lǐng)先的擴(kuò)展能力,Traefik 必將為用戶帶來前所未有的網(wǎng)關(guān)體驗(yàn),助力企業(yè)高枕無憂地馳騁于云端之上。
Reference :
- [1] https://traefik.io/blog/announcing-traefik-proxy-v3-1/
- [2] https://github.com/traefik/traefik/releases/tag/v3.1.0?ref=traefik.io