叢集網路

網路是 Kubernetes 的核心部分,但要確切理解其預期運作方式可能具有挑戰性。有 4 個不同的網路問題需要解決

  1. 高度耦合的容器到容器通訊:這透過 Podlocalhost 通訊解決。
  2. Pod 到 Pod 通訊:這是本文檔的主要重點。
  3. Pod 到服務通訊:這由服務涵蓋。
  4. 外部到服務通訊:這也由服務涵蓋。

Kubernetes 的核心概念是在應用程式之間共用機器。通常,共用機器需要確保兩個應用程式不會嘗試使用相同的埠。跨多個開發人員協調埠非常難以大規模進行,並且會讓使用者面臨超出其控制範圍的叢集層級問題。

動態埠分配為系統帶來許多複雜性 - 每個應用程式都必須將埠作為標誌,API 伺服器必須知道如何將動態埠號碼插入組態區塊,服務必須知道如何找到彼此等等。Kubernetes 並非處理這些問題,而是採用不同的方法。

若要了解 Kubernetes 網路模型,請參閱這裡

Kubernetes IP 位址範圍

Kubernetes 叢集需要從以下元件中設定的可用的位址範圍,為 Pod、服務和節點分配不重疊的 IP 位址

  • 網路外掛程式已設定為將 IP 位址指派給 Pod。
  • kube-apiserver 已設定為將 IP 位址指派給服務。
  • kubelet 或 cloud-controller-manager 已設定為將 IP 位址指派給節點。
A figure illustrating the different network ranges in a kubernetes cluster

叢集網路類型

Kubernetes 叢集,根據設定的 IP 系列,可以分為

  • 僅限 IPv4:網路外掛程式、kube-apiserver 和 kubelet/cloud-controller-manager 設定為僅指派 IPv4 位址。
  • 僅限 IPv6:網路外掛程式、kube-apiserver 和 kubelet/cloud-controller-manager 設定為僅指派 IPv6 位址。
  • IPv4/IPv6 或 IPv6/IPv4 雙堆疊
    • 網路外掛程式已設定為指派 IPv4 和 IPv6 位址。
    • kube-apiserver 已設定為指派 IPv4 和 IPv6 位址。
    • kubelet 或 cloud-controller-manager 已設定為指派 IPv4 和 IPv6 位址。
    • 所有元件必須就設定的主要 IP 系列達成一致。

Kubernetes 叢集僅考量 Pod、服務和節點物件上存在的 IP 系列,而與所表示物件的現有 IP 無關。例如,伺服器或 Pod 的介面上可以有多個 IP 位址,但只有 node.status.addressespod.status.ips 中的 IP 位址會被考量用於實作 Kubernetes 網路模型和定義叢集類型。

如何實作 Kubernetes 網路模型

網路模型由每個節點上的容器執行階段實作。最常見的容器執行階段使用容器網路介面 (CNI) 外掛程式來管理其網路和安全性功能。許多不同的 CNI 外掛程式來自許多不同的供應商。其中一些僅提供新增和移除網路介面的基本功能,而另一些則提供更複雜的解決方案,例如與其他容器編排系統整合、執行多個 CNI 外掛程式、進階 IPAM 功能等。

請參閱此頁面,以取得 Kubernetes 支援的網路附加元件的非詳盡清單。

下一步

網路模型的早期設計及其原理在網路設計文件中有更詳細的描述。如需旨在改進 Kubernetes 網路的未來計畫和一些正在進行的工作,請參閱 SIG-Network KEP

上次修改時間:2024 年 3 月 7 日下午 10:20 PST:Update networking.md (4dde8759cc)