Kubernetes 中暴露服務(wù)的新方法
Ingress 是 Kubernetes 中使用最廣泛的資源之一。該組件負(fù)責(zé)基礎(chǔ)設(shè)施和應(yīng)用程序,并有助于將應(yīng)用程序和服務(wù)暴露到集群外。然而,Kubernetes 網(wǎng)絡(luò)技術(shù)已經(jīng)有了長足的發(fā)展,許多新的用例很快暴露了 Ingress 的局限性。
Ingress API 沒有提供用戶想要定義的高級(jí)負(fù)載均衡功能,而且用戶管理起來相當(dāng)不切實(shí)際。供應(yīng)商試圖通過使用 annotations 來解決這些額外的用例以擴(kuò)展平臺(tái),但這導(dǎo)致供應(yīng)商之間的實(shí)現(xiàn)不一致。
因此,Gateway API 創(chuàng)建了一個(gè)新資源和 API 的集合,這些資源和 API 會(huì)改進(jìn)并可能在未來取代 Ingress。
Gateway API 將 Ingress 功能分為 3 個(gè)組件,每個(gè)組件負(fù)責(zé)自己的部分,如下所述。此外,Gateway API 添加了其他有價(jià)值的功能。許多 Gateway API 的下游實(shí)施者和集成商都提供了公共預(yù)覽版,并且正在快速迭代。
除了這個(gè) Envoy 還宣布了他們的 Envoy Gateway 來標(biāo)準(zhǔn)化 Kubernetes Ingress。
舊方法 - Ingress
使用安全最佳實(shí)踐是通過 Ingress 公開 API,您應(yīng)該配置了 ingress 的服務(wù),然后再連接到負(fù)載均衡器。這意味著 Ingress 包括入口控制器詳細(xì)信息(由平臺(tái)管理員配置)和應(yīng)用程序路由(由開發(fā)人員配置)。
新方式 - Gateway API
1.架構(gòu)
GatewayClass -> Gateway -> [*]Route
GatewayClass 由平臺(tái)/基礎(chǔ)設(shè)施提供商提供,例如 Istio 或 Google Cloud。
Gateway 是由平臺(tái)/集群管理員定義的 gatewayClass 的一個(gè)實(shí)例,它將網(wǎng)關(guān)綁定到 LoadBalancer。
*Route 用于將路由綁定到網(wǎng)關(guān)(可以將多個(gè)路由配置到一個(gè)網(wǎng)關(guān))。在 TCP/IP 層中可用:
- HTTPRoute - 可以路由 HTTP 和 HTTPS
- TLSRoute - 根據(jù) TLS 層中的參數(shù)和 SNI(服務(wù)器名稱指示)路由 TLS 和路由
- TCPRoute - 基于 TCP 目標(biāo)端口的路由
- UDPRoute - 基于 UDP 目標(biāo)端口的路由
2.優(yōu)點(diǎn)
使用新方式的優(yōu)點(diǎn):
(1) 網(wǎng)關(guān) API 增加了新功能:
- 基于 HTTP 標(biāo)頭的匹配
- HTTP 標(biāo)頭操作
- 加權(quán)流量拆分
- 流量鏡像
- 面向角色的資源模型
(2) Gateway API 還支持?jǐn)U展:
- 路由到其他協(xié)議
- 任意后端 CRD,例如桶、函數(shù)等。
- 自定義參數(shù)和配置(LB 算法、自定義匹配)
- 新方法將基礎(chǔ)架構(gòu)與應(yīng)用程序解耦
展望未來
Gateway API 支持更復(fù)雜的 LB 功能,例如加權(quán)流量拆分和基于 HTTP 標(biāo)頭的匹配和操作。該功能仍在開發(fā)中,許多供應(yīng)商已開始提供實(shí)驗(yàn)性支持,因此預(yù)計(jì)網(wǎng)關(guān) API 將穩(wěn)步向前發(fā)展。
原文:https://nonamesecurity.com/blog/the-new-way-to-expose-apis-in-kubernetes-cluster