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