本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
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 主題演講中講述了雙棧之旅,歷時五年,程式碼量巨大。