服務、負載均衡和網路

Kubernetes 網路背後的概念和資源。

Kubernetes 網路模型

Kubernetes 網路模型由以下幾個部分組成:

  • 叢集中的每個Pod都有自己獨特的叢集範圍 IP 地址。

    • Pod擁有自己的私有網路名稱空間,該名稱空間由Pod中的所有容器共享。在同一個Pod中不同容器中執行的程序可以透過`localhost`相互通訊。
  • Pod網路(也稱為叢集網路)處理Pod之間的通訊。它確保(排除有意分割網路的情況):

    • 所有 Pod 都可以與其他所有 Pod 通訊,無論它們是在同一節點上還是在不同節點上。Pod 可以直接相互通訊,無需使用代理或地址轉換 (NAT)。

      在 Windows 上,此規則不適用於主機網路 Pod。

    • 節點上的代理(例如系統守護程序或 kubelet)可以與該節點上的所有 Pod 通訊。

  • Service API 允許你為由一個或多個後端 Pod 實現的服務提供一個穩定的(長期存在的)IP 地址或主機名,其中組成服務的單個 Pod 可能會隨時間而變化。

    • Kubernetes 自動管理 EndpointSlice 物件,以提供當前支援 Service 的 Pod 資訊。

    • 服務代理實現監視 Service 和 EndpointSlice 物件的集合,並透過使用作業系統或雲提供商 API 來攔截或重寫資料包,從而程式設計資料平面以將服務流量路由到其後端。

  • Gateway API(或其前身Ingress)允許您讓叢集外部的客戶端訪問服務。

  • NetworkPolicy是 Kubernetes 內建的 API,允許您控制 Pod 之間或 Pod 與外部世界之間的流量。

在較舊的容器系統中,不同主機上的容器之間沒有自動連線,因此通常需要顯式地在容器之間建立連結,或者將容器埠對映到主機埠以使其可被其他主機上的容器訪問。這在 Kubernetes 中不需要;Kubernetes 的模型是,從埠分配、命名、服務發現、負載均衡、應用程式配置和遷移的角度來看,Pod 可以像虛擬機器或物理主機一樣處理。

此模型中只有少數部分由 Kubernetes 本身實現。對於其他部分,Kubernetes 定義了 API,但相應的功能由外部元件提供,其中一些是可選的。

  • Pod 網路名稱空間設定由實現容器執行時介面的系統級軟體處理。

  • Pod 網路本身由Pod 網路實現管理。在 Linux 上,大多數容器執行時使用容器網路介面 (CNI)與 Pod 網路實現進行互動,因此這些實現通常被稱為_CNI 外掛_。

  • Kubernetes 提供了一個服務代理的預設實現,稱為kube-proxy,但一些 Pod 網路實現則使用自己的服務代理,該代理與實現的其他部分更緊密整合。

  • NetworkPolicy 通常也由 Pod 網路實現來實施。(一些更簡單的 Pod 網路實現不支援 NetworkPolicy,或者管理員可能會選擇在沒有 NetworkPolicy 支援的情況下配置 Pod 網路。在這些情況下,API 仍然存在,但不會產生任何效果。)

  • Gateway API有許多實現,其中一些特定於特定的雲環境,一些更側重於“裸機”環境,還有一些更通用。

下一步

透過使用服務連線應用程式教程,您可以透過動手示例瞭解服務和 Kubernetes 網路。

叢集網路解釋瞭如何為您的叢集設定網路,並提供了所涉及技術的概述。


服務

將執行在叢集中的應用程式暴露在單個對外端點後,即使工作負載分佈在多個後端上,也能使其可用。

Ingress

使用協議感知的配置機制使您的 HTTP(或 HTTPS)網路服務可用,該機制理解 URI、主機名、路徑等 Web 概念。Ingress 概念允許您根據透過 Kubernetes API 定義的規則將流量對映到不同的後端。

Ingress 控制器

為了讓Ingress在您的叢集中工作,必須有一個_Ingress 控制器_正在執行。您需要至少選擇一個 Ingress 控制器並確保其已在您的叢集中設定。此頁面列出了您可以部署的常見 Ingress 控制器。

Gateway API

Gateway API 是一系列 API 種類,提供動態基礎設施供應和高階流量路由。

EndpointSlice

EndpointSlice API 是 Kubernetes 用來讓您的 Service 擴充套件以處理大量後端,並允許叢集高效更新其健康後端列表的機制。

網路策略

如果你想在 IP 地址或埠級別(OSI 第 3 層或第 4 層)控制流量,NetworkPolicy 允許你指定叢集內部以及 Pod 與外部世界之間的流量規則。你的叢集必須使用支援 NetworkPolicy 強制執行的網路外掛。

服務和 Pod 的 DNS

您的工作負載可以使用 DNS 在叢集中發現服務;本頁解釋了其工作原理。

IPv4/IPv6 雙棧

Kubernetes 允許您配置單棧 IPv4 網路、單棧 IPv6 網路或同時啟用兩種網路家族的雙棧網路。本頁解釋瞭如何操作。

拓撲感知路由

“拓撲感知路由”提供了一種機制,有助於將網路流量保留在其來源區域內。優先選擇叢集中 Pod 之間的同區域流量有助於提高可靠性、效能(網路延遲和吞吐量)或降低成本。

Windows 上的網路

服務 ClusterIP 分配

服務內部流量策略

如果叢集中的兩個 Pod 需要通訊,並且它們都執行在同一節點上,請使用_服務內部流量策略_將網路流量保留在該節點內。避免透過叢集網路進行往返有助於提高可靠性、效能(網路延遲和吞吐量)或降低成本。

最後修改於 2024 年 9 月 18 日太平洋標準時間下午 5:39:清理 services-networking/_index.md (810f856ca9)