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