叢集網路

網路是 Kubernetes 的核心部分,但要準確理解其工作原理可能具有挑戰性。需要解決 4 個不同的網路問題:

  1. 緊密耦合的容器到容器通訊:這透過 Pod 和 `localhost` 通訊來解決。
  2. Pod 到 Pod 通訊:這是本文件的主要焦點。
  3. Pod 到 Service 通訊:這由 Service 覆蓋。
  4. 外部到 Service 通訊:這同樣由 Service 覆蓋。

Kubernetes 的核心思想是在應用程式之間共享機器。通常,共享機器需要確保兩個應用程式不會嘗試使用相同的埠。在多個開發人員之間協調埠在規模上很難做到,並且會讓使用者面臨超出他們控制範圍的叢集級問題。

動態埠分配給系統帶來了許多複雜性——每個應用程式都必須將埠作為引數,API 伺服器必須知道如何將動態埠號插入到配置塊中,服務必須知道如何相互查詢等等。Kubernetes 沒有處理這些問題,而是採取了不同的方法。

要了解 Kubernetes 網路模型,請參閱此處

Kubernetes IP 地址範圍

Kubernetes 叢集需要從以下元件配置的可用地址範圍中,為 Pod、Service 和 Node 分配不重疊的 IP 地址:

  • 網路外掛被配置為為 Pod 分配 IP 地址。
  • kube-apiserver 被配置為為 Service 分配 IP 地址。
  • kubelet 或 cloud-controller-manager 被配置為為 Node 分配 IP 地址。
A figure illustrating the different network ranges in a kubernetes cluster

叢集網路型別

根據配置的 IP 系列,Kubernetes 叢集可以分為:

  • 僅 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 叢集只考慮 Pods、Services 和 Nodes 物件中存在的 IP 系列,而與所代表物件的現有 IP 地址無關。例如,伺服器或 Pod 可以在其介面上具有多個 IP 地址,但只有 `node.status.addresses` 或 `pod.status.ips` 中的 IP 地址才被用於實現 Kubernetes 網路模型並定義叢集型別。

如何實現 Kubernetes 網路模型

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

有關 Kubernetes 支援的網路外掛的非詳盡列表,請參閱此頁面

下一步

網路模型的早期設計及其原理在網路設計文件中有更詳細的描述。有關未來計劃和一些旨在改進 Kubernetes 網路的持續努力,請參閱 SIG-Network KEPs

最後修改於 2024 年 3 月 7 日太平洋標準時間晚上 10:20:更新 networking.md (4dde8759cc)