本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
Gateway API v1.1:服務網格、GRPCRoute 以及更多
繼去年十月 Gateway API 的 GA 版本釋出之後,Kubernetes SIG Network 很高興地宣佈 Gateway API 的 v1.1 版本釋出。在此版本中,有幾個功能升級到 Standard Channel (GA),其中最引人注目的是對服務網格和 GRPCRoute 的支援。我們還引入了一些新的實驗性功能,包括會話永續性和客戶端證書驗證。
新增內容
畢業至 Standard Channel
此版本包括四個備受期待的功能畢業至 Standard Channel。這意味著它們不再是實驗性的概念;被納入 Standard 釋出渠道表明對 API 介面的高度信心,並提供向後相容性的保證。當然,與任何其他 Kubernetes API 一樣,Standard Channel 的功能可以隨著時間的推移,透過向後相容的增補繼續演進,我們當然期望這些新功能在未來會有進一步的完善和改進。有關此工作原理的更多資訊,請參閱 Gateway API 版本控制策略。
服務網格支援
Gateway API 中的服務網格支援允許服務網格使用者使用相同的 API 來管理入口流量和網格內流量,複用相同的策略和路由介面。在 Gateway API v1.1 中,路由(例如 HTTPRoute)現在可以有一個 Service 作為 parentRef
,以控制到特定服務的流量行為。更多資訊請閱讀 Gateway API 服務網格文件或檢視 Gateway API 實現列表。
舉個例子,可以在應用程式呼叫圖的深處使用 HTTPRoute 進行工作負載的金絲雀部署,如下所示:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: color-canary
namespace: faces
spec:
parentRefs:
- name: color
kind: Service
group: ""
port: 80
rules:
- backendRefs:
- name: color
port: 80
weight: 50
- name: color2
port: 80
weight: 50
這將把傳送到 faces
名稱空間中 color
服務的流量在原始的 color
服務和 color2
服務之間進行 50/50 的分割,使用一種可移植的配置,很容易從一個網格遷移到另一個網格。
GRPCRoute
如果你已經在使用實驗版本的 GRPCRoute,我們建議在你所使用的控制器更新以支援 GRPCRoute v1 之前,暫緩升級到 GRPCRoute 的 Standard Channel 版本。在此之前,升級到 v1.1 中包含 v1alpha2 和 v1 API 版本的 GRPCRoute 實驗性渠道版本是安全的。
ParentReference Port
port
欄位已新增到 ParentReference 中,允許你將資源附加到 Gateway Listener、Service 或其他父資源(取決於實現)。繫結到埠還允許你一次附加到多個 Listener。
例如,你可以將一個 HTTPRoute 附加到一個或多個由 Listener port
指定的 Gateway 的特定 Listener 上,而不是使用 Listener 的 name
欄位。
更多資訊,請參見附加到閘道器。
一致性配置檔案和報告
一致性報告 API 已透過 mode
欄位(用於指定實現的工件模式)和 gatewayAPIChannel
(standard 或 experimental)進行了擴充套件。gatewayAPIVersion
和 gatewayAPIChannel
現在由套件機制自動填充,並附有測試結果的簡要描述。報告已以更結構化的方式重新組織,並且實現現在可以新增有關測試執行方式的資訊並提供復現步驟。
Experimental Channel 的新增內容
閘道器客戶端證書驗證
透過在 tls
中引入一個新的 frontendValidation
欄位,閘道器現在可以為每個 Gateway Listener 配置客戶端證書驗證。該欄位支援配置一個 CA 證書列表,可用作信任錨來驗證客戶端提供的證書。
以下示例展示瞭如何使用儲存在 foo-example-com-ca-cert
ConfigMap 中的 CA 證書來驗證連線到 foo-https
Gateway Listener 的客戶端所提供的證書。
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: client-validation-basic
spec:
gatewayClassName: acme-lb
listeners:
- name: foo-https
protocol: HTTPS
port: 443
hostname: foo.example.com
tls:
certificateRefs:
- kind: Secret
group: ""
name: foo-example-com-cert
frontendValidation:
caCertificateRefs:
- kind: ConfigMap
group: ""
name: foo-example-com-ca-cert
會話永續性與 BackendLBPolicy
會話永續性正透過一個新的策略(BackendLBPolicy)引入 Gateway API,用於服務級別的配置,並作為 HTTPRoute 和 GRPCRoute 中的欄位,用於路由級別的配置。BackendLBPolicy 和路由級別的 API 提供了相同的會話永續性配置,包括會話超時、會話名稱、會話型別和 Cookie 的生命週期型別。
下面是一個 BackendLBPolicy
的配置示例,它為 foo
服務啟用了基於 Cookie 的會話永續性。它將話名稱設定為 foo-session
,定義了絕對超時和空閒超時,並將 Cookie 配置為會話 Cookie。
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: BackendLBPolicy
metadata:
name: lb-policy
namespace: foo-ns
spec:
targetRefs:
- group: core
kind: service
name: foo
sessionPersistence:
sessionName: foo-session
absoluteTimeout: 1h
idleTimeout: 30m
type: Cookie
cookieConfig:
lifetimeType: Session
其他所有內容
TLS 術語澄清
作為使我們的 TLS 術語在整個 API 中更加一致這一更廣泛目標的一部分,我們對 BackendTLSPolicy 引入了一些破壞性變更。這導致了新的 API 版本(v1alpha3),並要求此策略的任何現有實現正確處理版本升級,例如,透過備份資料並在安裝此較新版本之前解除安裝 v1alpha2 版本。
任何對 v1alpha2 BackendTLSPolicy 欄位的引用都需要更新到 v1alpha3。欄位的具體更改包括:
targetRef
變為targetRefs
,以允許一個 BackendTLSPolicy 附加到多個目標。tls
變為validation
tls.caCertRefs
變為validation.caCertificateRefs
tls.wellKnownCACerts
變為validation.wellKnownCACertificates
有關此版本中包含的更改的完整列表,請參閱 v1.1.0 發行說明。
Gateway API 背景
Gateway API 的想法最初是在 2019 年聖地亞哥 KubeCon 上作為下一代 Ingress API 提出的。從那時起,一個令人難以置信的社群已經形成,共同開發了可能是 Kubernetes 歷史上最具協作性的 API。到目前為止,已有 200 多人為此 API 做出了貢獻,而且這個數字還在繼續增長。
維護者們要感謝為 Gateway API 做出貢獻的*每一個人*,無論是透過向倉庫提交程式碼、參與討論、提出想法,還是一般的支援。沒有這個專注而活躍的社群的支援,我們真的不可能走到今天。
立即試用
與其他 Kubernetes API 不同,你無需升級到最新版本的 Kubernetes 即可獲得最新版本的 Gateway API。只要你執行的是 Kubernetes 1.26 或更高版本,你就能使用此版本的 Gateway API。
要試用該 API,請遵循我們的入門指南。
參與其中
我們有很多機會參與進來,幫助定義 Kubernetes 入口和服務網格路由 API 的未來。
- 檢視使用者指南,瞭解可以解決哪些用例。
- 試用現有的 Gateway 控制器之一。
- 或者加入我們的社群,幫助我們共同構建 Gateway API 的未來!
相關 Kubernetes 部落格文章
- Gateway API v1.0 中的新實驗性功能 11/2023
- Gateway API v1.0: GA 版本 10/2023
- 介紹 ingress2gateway;簡化到 Gateway API 的升級 10/2023
- Gateway API v0.8.0:引入服務網格支援 08/2023