什么是Gateway API?
Gateway API是由SIG-NETWORK社區(qū)管理的開源項目。它包含了在Kubernetes中對服務(wù)網(wǎng)絡(luò)建模的資源集合。這些資源包括GatewayClass,Gateway,HTTPRoute,TCPRoute,Service等。他們可以由不同的供應(yīng)商實現(xiàn),同時保持通用的行業(yè)支持能力,以可擴展和面向角色的接口形式來實現(xiàn)Kubernetes服務(wù)網(wǎng)絡(luò)的工業(yè)化支持。
SIG-NETWORK:
https://github.com/kubernetes/community/tree/master/sig-network
資源參考
無論您是有興趣使用Gateway API,還是Gateway API的實施者,以下資源都將幫助您提供必要的背景知識:
接口概述
https://gateway-api.sigs.k8s.io/concepts/api-overview
用戶指南
https://gateway-api.sigs.k8s.io/guides
網(wǎng)關(guān)控制器實現(xiàn)
https://gateway-api.sigs.k8s.io/implementations
API參考規(guī)范
https://gateway-api.sigs.k8s.io/references/spec
社區(qū)鏈接
https://gateway-api.sigs.k8s.io/contributing/community
開發(fā)者指南
https://gateway-api.sigs.k8s.io/contributing/devguide
Gateway API基本概念
Gateway API的概念來源于以下的設(shè)計目標。它們展示了GatewayAPI與以往規(guī)范(例如Ingress)的關(guān)系,及特點。
面向角色–我們在實際部署中的網(wǎng)關(guān),是由一系列API資源組成,這些資源共同描述Kubernetes服務(wù)網(wǎng)絡(luò)模型。
可移植性-這雖然不是改進,但是作為新一代Kubernetes網(wǎng)絡(luò)建模,是不可或缺的考慮方面。正如Ingress作為通用規(guī)范,擁有眾多實現(xiàn)(https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/)一樣,Gateway API也被設(shè)計為可移植的,可在多個實現(xiàn)間切換。
更多表現(xiàn)能力–Gateway API資源支持許多核心功能,例如基于HTTP標頭的匹配、流量權(quán)重和其他功能,這些功能在Ingress中只能通過自定義注釋(annotation)實現(xiàn)。
可擴展–Gateway API允許在API的各個層鏈接自定義資源。這使得在API結(jié)構(gòu)中的適當位置進行精細定制成為可能。
其他一些值得注意的功能包括:
GatewayClasses–GatewayClass指定了負載平衡實現(xiàn)的類型。這些類使用戶能夠輕松明確地了解通過Kubernetes資源模型提供哪些功能。
共享Gateways和跨命名空間(namespace)支持-它們允許獨立的路由資源附加到同一gateway來共享負載均衡器和VIP。這允許團隊(甚至跨命名空間)安全地共享基礎(chǔ)結(jié)構(gòu),而無需相互協(xié)調(diào)。
類型化路由(Typed Routes)和類型化后端服務(wù)-Gateway API支持類型化路由資源以及不同類型的后端。這使得API能夠靈活地支持各種協(xié)議(如HTTP和gRPC)和各種后端目標(如Kubernetes服務(wù)、存儲或函數(shù))。
為什么面向角色的API很重要?
無論是數(shù)據(jù)中心還是Kubernetes集群,基礎(chǔ)設(shè)施都是為共享而構(gòu)建的。然而,共享基礎(chǔ)設(shè)施帶來了一個共同的挑戰(zhàn)-如何在保持基礎(chǔ)設(shè)施所有者控制的同時為基礎(chǔ)設(shè)施用戶提供靈活性?
Gateway API通過面向角色的Kubernetes服務(wù)網(wǎng)絡(luò)設(shè)計來實現(xiàn)這一點,該設(shè)計在使用分布靈活性和集中控制之間取得平衡。它允許共享網(wǎng)絡(luò)基礎(chǔ)設(shè)施(例如,硬件負載平衡器、云網(wǎng)絡(luò)、集群托管代理等)可以被許多上層不同的非協(xié)調(diào)團隊(例如應(yīng)用開發(fā)團隊)使用,使用過程受到集群運營商設(shè)置的策略的約束。以下示例顯示了這在實踐中的工作原理。
群集操作員可以在某種GatewayClass下創(chuàng)建Gateway資源。這個Gateway部署或配置代表的是基礎(chǔ)網(wǎng)絡(luò)資源。這時,集群操作員可以在Gateway上顯式聲明集中控制策略(如TLS),允許什么樣的Route可以綁定在此Gateway上。通過Route和Gateway的綁定,應(yīng)用開發(fā)者團隊可以在自己的namespace中發(fā)布自己的應(yīng)用,并通過Gateway將應(yīng)用發(fā)布出去供外部訪問。
GatewayClass:
https://gateway-api.sigs.k8s.io/api-types/gatewayclass
Gateway:
https://gateway-api.sigs.k8s.io/api-types/gateway
TLS:
https://gateway-api.sigs.k8s.io/guides/tls#downstream-tls
Route:
https://gateway-api.sigs.k8s.io/concepts/api-overview#attaching-routes-to-gateways
namespace:
https://gateway-api.sigs.k8s.io/guides/multiple-ns
另外,應(yīng)用開發(fā)者團隊在自己的命名空間中,可以選擇性的將某些Route附加到共享Gateway上,從而允許獨立控制各個應(yīng)用的路由邏輯。
Route:
https://gateway-api.sigs.k8s.io/guides/http-routing
這樣,集群操作員和應(yīng)用開發(fā)者團隊就可以分別操作于自己的控制平面,集群操作員控制網(wǎng)關(guān)的配置以控制入口策略,而應(yīng)用開發(fā)者團隊負責(zé)調(diào)配跟應(yīng)用相關(guān)的路由策略(例如根據(jù)url或者header等信息實現(xiàn)應(yīng)用流量分流等等)。
應(yīng)用流量分流:
https://gateway-api.sigs.k8s.io/guides/traffic-splitting
這種靈活性使Gateway API能夠適應(yīng)截然不同的組織模型和實現(xiàn),但同時保持可移植的特性。
Gateway適合于哪些場景?
Gateway API是一個SIG網(wǎng)絡(luò)項目,旨在改進和標準化Kubernetes中的服務(wù)網(wǎng)絡(luò)。當前和正在進行的實現(xiàn)包括BIG-IP,Contour,Emissary-Ingress,Google Kubernetes引擎(GKE),NGINX,Istio,Kong和Traefik等等。
SIG網(wǎng)絡(luò):
https://github.com/kubernetes/community/tree/master/sig-network
讀者可以查看實現(xiàn)參考:https://gateway-api.sigs.k8s.io/implementations/,了解支持Gateway的最新項目和產(chǎn)品。如果您有興趣使用網(wǎng)關(guān)API貢獻或構(gòu)建實現(xiàn),也非常歡迎參與其中:https://gateway-api.sigs.k8s.io/contributing/community!