一文讀懂 Traefik Proxy v3.0 里程碑特性
Hello folks,我是 Luga,今天我們來(lái)聊一下云原生生態(tài)中的網(wǎng)關(guān)技術(shù) - 由 Traefik Labs 開(kāi)發(fā)的開(kāi)源項(xiàng)目 Traefik Proxy,一個(gè)誕生于 8 年前、在社區(qū)的幫助下已成為現(xiàn)代云原生基礎(chǔ)設(shè)施堆棧的重要組成部分。
一、Traefik 發(fā)展歷程簡(jiǎn)要回顧
時(shí)光荏苒,白駒過(guò)隙 ...
距離 Traefik 上一個(gè)主要版本 v2.0 發(fā)布,已經(jīng)過(guò)去了近五年。在這五年里,Traefik 以其強(qiáng)大的功能、靈活的配置和易用的特性,贏得了全球開(kāi)發(fā)者的青睞,成為了業(yè)界領(lǐng)先的反向代理和負(fù)載均衡器之一。
對(duì)于 Traefik 的發(fā)展歷程,我們可以通過(guò)如下幾個(gè)數(shù)字來(lái)進(jìn)行概要性總結(jié):
- 超過(guò) 30 億次下載量: Traefik 的受歡迎程度可見(jiàn)一斑。
- 超過(guò) 700 名貢獻(xiàn)者: 龐大的社區(qū)為 Traefik 的不斷發(fā)展提供了強(qiáng)勁動(dòng)力。
- DockerHub 排名前 15: Traefik 在開(kāi)發(fā)者社區(qū)中擁有廣泛的影響力。
- 46,000 個(gè) GitHub star: Traefik 的代碼質(zhì)量和受歡迎程度得到了高度認(rèn)可。
- 連續(xù)五年蟬聯(lián) API 網(wǎng)關(guān)排名第一: Traefik 在 API 網(wǎng)關(guān)領(lǐng)域的地位無(wú)可撼動(dòng)。
二、Traefik Proxy v3.0 RC1 里程碑特性概括
在此版本(v3.0 RC1)中,主要圍繞幾個(gè)關(guān)鍵方面進(jìn)行了增強(qiáng)性設(shè)計(jì)。
首先,增加了對(duì)流行的新興技術(shù)的支持及優(yōu)化——WebAssembly (Wasm)、OpenTelemetry 以及 Kubernetes Gateway API。這些技術(shù)的引入為用戶提供了更廣泛的選擇和更高的靈活性。
同時(shí),基于 Proxy 的核心基石——“路由”和“安全性”等特性,對(duì)路由規(guī)則的一些關(guān)鍵部分進(jìn)行修改,旨在提供更強(qiáng)大、更可靠的路由功能,使用戶能夠更好地管理和控制流量的流向。
此外,還添加了對(duì)一些前沿技術(shù)的支持,如 HTTP/3、SPIFFE 和 Tailscale。通過(guò)支持 HTTP/3,我們提升了性能和效率,使用戶能夠更快地傳輸數(shù)據(jù)。SPIFFE 技術(shù)的引入增強(qiáng)了安全性,為用戶提供了更可靠的身份驗(yàn)證和授權(quán)機(jī)制。而 Tailscale 技術(shù)的支持則使用戶能夠更方便地建立安全的網(wǎng)絡(luò)連接,實(shí)現(xiàn)跨網(wǎng)絡(luò)的通信。
三、Traefik Proxy v3.0 RC1 里程碑特性解析
1. 引入 WebAssembly 支持:擴(kuò)展性和靈活性再升級(jí)
早在 2019 年,隨著 Traefik v2 的發(fā)布,引入了擴(kuò)展引擎 Yaegi,使得能夠?yàn)槠渖舷挛拈_(kāi)發(fā)中間件(或提供程序)。
作為一個(gè)極其強(qiáng)大的解釋器引擎,Yaegi 邊界儼然已超越了 Traefik 本身。但考慮到其性質(zhì),Yaegi 仍然需要做很多工作來(lái)支持完整的 Go 規(guī)范并跟上該語(yǔ)言的每個(gè)版本,此種場(chǎng)景下,會(huì)導(dǎo)致添加極具挑戰(zhàn)性的功能變得困難。
Traefik v3.0 RC1 中添加了對(duì) WebAssembly (Wasm) 技術(shù)的支持。WebAssembly 是一種低級(jí)的、可執(zhí)行的二進(jìn)制格式,可以在多種環(huán)境中運(yùn)行,包括瀏覽器和服務(wù)器。Traefik 通過(guò) WebAssembly 支持,可以在 WebAssembly 環(huán)境中執(zhí)行更多的功能,例如擴(kuò)展 Traefik 的功能或?qū)崿F(xiàn)新的插件。這一支持將使 Traefik 更加靈活和可擴(kuò)展。
Traefik 對(duì) Wasm 的支持包括以下功能:
(1) 將 Wasm 模塊作為路由器
Wasm 模塊可以用來(lái)定義路由規(guī)則,并根據(jù)請(qǐng)求將流量路由到不同的服務(wù)。通過(guò)這種方式,用戶可以根據(jù)自定義的邏輯和需求,靈活地控制流量的分發(fā)和路由。
# 使用 Wasm 模塊定義路由規(guī)則
routers:
wasm:
# Wasm 模塊的路徑
module: /path/to/wasm/module.wasm
# Wasm 模塊的導(dǎo)出函數(shù)
function: router
# 將流量路由到不同的服務(wù)
services:
service1:
# 匹配 /path/to/service1 的請(qǐng)求
path: /path/to/service1
service2:
# 匹配 /path/to/service2 的請(qǐng)求
path: /path/to/service2
(2) 將 Wasm 模塊作為中間件
Wasm 模塊可以用來(lái)處理請(qǐng)求和響應(yīng),并在它們之間進(jìn)行轉(zhuǎn)換。這樣的靈活性允許用戶在請(qǐng)求和響應(yīng)的處理過(guò)程中插入自定義邏輯,以滿足特定的需求。用戶可以根據(jù)自己的業(yè)務(wù)邏輯,對(duì)請(qǐng)求和響應(yīng)進(jìn)行修改、過(guò)濾或增強(qiáng)。
# 使用 Wasm 模塊處理請(qǐng)求和響應(yīng)
middlewares:
wasm:
# Wasm 模塊的路徑
module: /path/to/wasm/module.wasm
# Wasm 模塊的導(dǎo)出函數(shù)
function: middleware
# 在所有路由之前應(yīng)用中間件
http:
middlewares:
- wasm
# 定義路由
routers:
default:
# 匹配所有請(qǐng)求
path: /
# 將流量路由到不同的服務(wù)
services:
service1:
# 匹配 /path/to/service1 的請(qǐng)求
path: /path/to/service1
service2:
# 匹配 /path/to/service2 的請(qǐng)求
path: /path/to/service2
(3) 支持多種 Wasm 運(yùn)行時(shí)
Traefik 支持多種 Wasm 運(yùn)行時(shí),包括 Wasmtime 和 Lucet。這意味著用戶可以根據(jù)自己的偏好和需求選擇適合的 Wasm 運(yùn)行時(shí)。這種靈活性使得 Traefik 可以與不同的運(yùn)行時(shí)環(huán)境無(wú)縫集成,提供更廣泛的選擇和更好的兼容性。
2. 擁抱 OpenTelemetry,邁向更強(qiáng)大的觀測(cè)
作為現(xiàn)代應(yīng)用架構(gòu)的核心組件,Traefik 從 v1 版本開(kāi)始就將可觀測(cè)性作為其中的核心功能之一,并支持多種供應(yīng)商的指標(biāo)和追蹤分析。隨著 OpenTelemetry 的出現(xiàn),Traefik 積極擁抱這一新興標(biāo)準(zhǔn),為用戶提供更強(qiáng)大的監(jiān)控能力,并提供平滑遷移的路徑。
在 Metrics 方面,Traefik 已經(jīng)廣泛支持并應(yīng)用于多個(gè)供應(yīng)商,比如 Datadog、Prometheus 等?,F(xiàn)在,加入 OpenTelemetry 使得用戶有更多選擇,根據(jù)自身需求選擇最合適的工具,并在遷移到 OpenTelemetry 的過(guò)程中保持現(xiàn)有的監(jiān)控工具鏈的完整性。
在 Traces 方面,Traefik 曾經(jīng)是 OpenSensus 和 OpenTracing 兩個(gè)標(biāo)準(zhǔn)的早期支持者。隨著這兩個(gè)標(biāo)準(zhǔn)的合并,Traefik 也緊跟潮流,放棄對(duì)舊標(biāo)準(zhǔn)的支持,全力支持 OpenTelemetry。這一舉措不僅簡(jiǎn)化了 Traefik 的代碼,還為用戶提供了更統(tǒng)一、更強(qiáng)大的追蹤體驗(yàn)。
除了擁抱 OpenTelemetry 之外,Traefik v3 在可觀測(cè)性方面還進(jìn)行了其他改進(jìn),例如:
- 新增對(duì)gRPC健康檢查的支持:滿足gRPC應(yīng)用場(chǎng)景的需求,提供更全面的監(jiān)控能力。
- 優(yōu)化指標(biāo)的收集和處理:提高效率,降低資源消耗。
- 提供更豐富的可觀測(cè)性數(shù)據(jù):幫助用戶更深入地了解應(yīng)用的運(yùn)行狀況。
Traefik 不僅僅是一個(gè)功能強(qiáng)大的應(yīng)用架構(gòu)組件,而且在可觀測(cè)性方面持續(xù)改進(jìn)和擁抱新的標(biāo)準(zhǔn),為用戶提供了更好的監(jiān)控和追蹤能力。這些改進(jìn)使得用戶能夠更好地理解和管理其應(yīng)用程序的性能和運(yùn)行狀態(tài)。
3. 路由與安全再升級(jí):構(gòu)建更加可靠、安全的應(yīng)用
Traefik 的基本目的之一是以安全且智能的方式路由網(wǎng)絡(luò)流量,這是代理服務(wù)器的核心功能之一。而 Traefik v3 版本通過(guò)引入大量新功能和改進(jìn),進(jìn)一步鞏固了其在這方面的領(lǐng)先地位,給用戶帶來(lái)了令人滿意的體驗(yàn)。
讓我們從互聯(lián)網(wǎng)的基礎(chǔ)協(xié)議 HTTP 開(kāi)始談起。自 2015 年 HTTP/2 獲得批準(zhǔn)以來(lái),Traefik 團(tuán)隊(duì)一直在努力定義下一個(gè)里程碑:HTTP/3。在實(shí)現(xiàn)這一目標(biāo)方面,Traefik 進(jìn)行了大量的工作。HTTP/3 是一個(gè)重要的協(xié)議,它不再依賴于舊的 TCP 協(xié)議,而是基于 QUIC(一種由 Google 在 2012 年開(kāi)發(fā)的新傳輸協(xié)議)使用 UDP。HTTP/3 帶來(lái)了許多優(yōu)勢(shì),如性能增強(qiáng)、連接建立更快、加密更簡(jiǎn)單等?,F(xiàn)在,Traefik 已經(jīng)完成了對(duì) HTTP/3 的實(shí)驗(yàn),準(zhǔn)備將其投入生產(chǎn)使用。
另一個(gè)在云原生環(huán)境中廣泛使用的關(guān)鍵技術(shù)是 gRPC。gRPC 是一種現(xiàn)代的遠(yuǎn)程過(guò)程調(diào)用(RPC)框架,可以在各種環(huán)境中運(yùn)行。它使用 Protocol Buffers 作為接口描述語(yǔ)言,并提供雙向流和流控制、取消和超時(shí)等高級(jí)功能。Traefik v3 現(xiàn)在支持 gRPC-Web,這使得從瀏覽器中的 Web 應(yīng)用程序調(diào)用 gRPC 服務(wù)成為可能。
在生產(chǎn)環(huán)境中部署數(shù)十甚至數(shù)百個(gè)服務(wù)會(huì)帶來(lái)許多挑戰(zhàn)之一是確保工作負(fù)載能夠相互信任并證明其身份。為解決這個(gè)問(wèn)題,SPIFFE(Secure Production Identity Framework For Everyone)是一個(gè)安全的生產(chǎn)身份框架項(xiàng)目,它定義了一套框架和標(biāo)準(zhǔn),用于識(shí)別和保護(hù)應(yīng)用程序服務(wù)之間的通信。
Traefik 不僅在網(wǎng)絡(luò)流量路由方面保持著領(lǐng)先地位,而且通過(guò)引入新功能和支持關(guān)鍵技術(shù),如 HTTP/3、gRPC-Web 和 SPIFFE,不斷推動(dòng)著現(xiàn)代應(yīng)用架構(gòu)的發(fā)展。這些改進(jìn)和創(chuàng)新使 Traefik 成為一個(gè)強(qiáng)大而全面的工具,滿足用戶在安全、智能和可靠性方面的需求。
4. 增強(qiáng) Kubernetes 支持:助力 DevOps 釋放更多潛能
對(duì)于使用 Kubernetes 的組織來(lái)說(shuō),Traefik 一直是首選的入口控制器。 借助 IngressRoutes,用戶可以擺脫舊版 Ingress 規(guī)范的限制,從而享受聲明式路由等諸多優(yōu)勢(shì)。
隨著 Kubernetes 的不斷發(fā)展,Traefik 積極參與 Gateway API 的開(kāi)發(fā),并率先支持其 alpha 版本。 現(xiàn)在,網(wǎng)關(guān) API 規(guī)范已經(jīng)正式發(fā)布,Traefik 也為用戶提供了完整支持。
# 定義 Gateway
apiVersion: networking.k8s.io/v1
kind: Gateway
metadata:
name: traefik-gateway
spec:
listeners:
- name: http
protocol: HTTP
port: 80
hosts:
- "*"
# 定義 HTTPRoute
apiVersion: networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: traefik-route
spec:
host: "www.example.com"
rules:
- http:
paths:
- path: /
backend:
serviceName: service1
servicePort: 80
# 定義 Service
apiVersion: v1
kind: Service
metadata:
name: service1
spec:
selector:
app: service1
ports:
- name: http
protocol: TCP
port: 80
Traefik 深知 Kubernetes 生態(tài)系統(tǒng)的強(qiáng)大力量,并始終致力于與各供應(yīng)商合作,為用戶提供最佳的工具選擇。 在 Traefik v3 中,我們進(jìn)一步加強(qiáng)了與 Hashicorp Consul 和 Nomad 的集成,以滿足用戶和客戶的普遍需求:
- Consul: 針對(duì)需要特殊 TLS 管理的網(wǎng)格,Traefik v3 增強(qiáng)了對(duì) Consul 的支持,幫助用戶更輕松地構(gòu)建安全可靠的微服務(wù)架構(gòu)。
- Nomad: Traefik v3 現(xiàn)在支持 Nomad 的命名空間,使用戶能夠更細(xì)粒度地控制流量路由,并滿足不同應(yīng)用的需求。
此外,Traefik v3 還為 Kubernetes 用戶帶來(lái)了以下增強(qiáng)功能:
- 簡(jiǎn)化配置: 使用 Gateway API 資源可以統(tǒng)一管理所有路由和負(fù)載均衡配置,簡(jiǎn)化了 Kubernetes 集群中的流量管理。
- 提高性能: Traefik 可以利用 Gateway API 資源進(jìn)行更有效的負(fù)載均衡,提升流量處理效率。
- 增強(qiáng)安全性: Traefik 可以與 Gateway API 結(jié)合,提供更強(qiáng)的安全控制,例如身份驗(yàn)證、授權(quán)和 TLS 加密等。
以上為關(guān)于 Traefik Proxy v3.0 RC1 內(nèi)容解讀,更多信息可參考官方項(xiàng)目介紹,若大家感興趣的話。
Reference :
- [1] https://traefik.io/blog/announcing-traefik-proxy-v3-rc
- [2] https://github.com/traefik/traefik/releases/tag/v3.0.0-rc1?ref=traefik.io