本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

Kubernetes 1.23:雙棧 IPv4/IPv6 網路達到 GA

"Kubernetes 何時支援 IPv6?" 自 Kubernetes v1.9 首次新增 IPv6 的 alpha 支援以來,這個問題被問到的頻率越來越高。雖然 Kubernetes 自 v1.18 以來就支援純 IPv6 叢集,但那時還無法從 IPv4 遷移到 IPv6。最終,IPv4/IPv6 雙棧網路在 Kubernetes v1.23 中達到了通用可用性 (GA)。

雙棧網路對您意味著什麼?讓我們來看一下……

服務 API 更新

服務在 1.20 之前是單棧的,因此要使用兩種 IP 家族,需要為每種 IP 家族建立一個服務。在 1.20 中,服務經過重新實現,允許同時使用兩種 IP 家族,從而簡化了使用者體驗,這意味著單個服務可以處理 IPv4 和 IPv6 工作負載。雙棧負載均衡可以在執行任意 IPv4 和 IPv6 組合的服務之間進行。

服務 API 現在包含支援雙棧的新欄位,取代了原來的單個 ipFamily 欄位。

  • 您可以透過將 ipFamilyPolicy 設定為以下三個選項之一來選擇 IP 家族:SingleStack、PreferDualStack 或 RequireDualStack。服務可以在單棧和雙棧之間切換(在一定限制內)。
  • ipFamilies 設定為已分配的家族列表,可以設定所用家族的順序。
  • clusterIPs 包含之前的 clusterIP 但允許多個條目,因此不再需要為兩種 IP 家族中的每一種執行重複的服務。相反,您可以在兩種 IP 家族中分配叢集 IP 地址。

請注意,Pod 也是雙棧的。對於給定的 Pod,無法在同一家族中設定多個 IP 地址。

預設行為仍為單棧

從 1.20 版本開始,隨著雙棧服務作為 alpha 功能的重新實現,Kubernetes 的底層網路已經包含了雙棧功能,無論叢集是否配置了啟用雙棧功能的特性標誌。

Kubernetes 1.23 移除了該特性標誌,作為該功能升級到穩定版的一部分。如果您想配置雙棧網路,它始終可用。您可以將叢集網路配置為單棧 IPv4、單棧 IPv6 或 IPv4/IPv6 雙棧。

雖然服務是根據您的配置設定的,但 Pod 預設使用 CNI 外掛設定的任何內容。如果您的 CNI 外掛分配了單棧 IP,除非 `ipFamilyPolicy` 指定 PreferDualStack 或 RequireDualStack,否則您將是單棧的。如果您的 CNI 外掛分配了雙棧 IP,`pod.status.PodIPs` 預設為雙棧。

儘管雙棧是可行的,但並非強制使用。文件中的示例展示了雙棧服務配置中可能存在的各種情況。

立即嘗試雙棧

雖然上游 Kubernetes 現在支援 雙棧網路 作為 GA 或穩定功能,但每個供應商對雙棧 Kubernetes 的支援可能有所不同。節點需要配置可路由的 IPv4/IPv6 網路介面。Pod 需要是雙棧的。網路外掛負責為 Pod 分配 IP 地址,因此叢集使用的網路外掛需要支援雙棧。一些容器網路介面 (CNI) 外掛支援雙棧,kubenet 也是如此。

雙棧的生態系統支援正在增加;您可以使用 kubeadm 建立雙棧叢集使用 KIND 在本地嘗試雙棧叢集,並在雲提供商中部署雙棧叢集(檢查 CNI 或 kubenet 可用性的文件後)。

參與 SIG Network

SIG-Network 希望從社群的雙棧網路經驗中學習,以瞭解不斷變化的需求和您的用例。來自 KubeCon NA 2021 的 SIG-Network 更新影片 總結了 SIG 的最新更新,包括雙棧在 1.23 版本中穩定釋出。

當前的 SIG-Network KEPs 和 GitHub 上的 問題 說明了 SIG 的重點領域。 雙棧 API 伺服器 是一個可以考慮貢獻的領域。

SIG-Network 會議 是一個友好、溫馨的場所,供您與社群建立聯絡並分享您的想法。期待您的加入!

致謝

雙棧網路功能代表了眾多 Kubernetes 貢獻者的工作。感謝所有貢獻程式碼、經驗報告、文件、程式碼審查以及介於兩者之間的所有內容的人。Bridget Kromhout 在Kubernetes 中的雙棧網路中詳細介紹了這項社群工作。Tim Hockin 和 Khaled (Kal) Henidak 在 2019 年 (IPv4/IPv6 雙棧 Kubernetes 的漫漫長路) 以及 Lachlan Evenson 在 2021 年 (我們來了:Kubernetes 中的雙棧網路) 的 KubeCon 主題演講中講述了雙棧之旅,歷時五年,程式碼量巨大。