在K8S中,kube-proxy ipvs原理是什麼?

黄嘉波發表於2024-10-07

在Kubernetes(K8S)中,kube-proxyIPVS 模式是一種高效能的負載均衡解決方案,它利用 Linux 核心的 IPVS(IP Virtual Server)功能來實現服務的負載均衡。以下是 kube-proxyIPVS 模式下的工作原理:

  1. 監聽API伺服器kube-proxy 啟動後會持續監聽 Kubernetes API伺服器上的Service資源物件的變化。每當有新的Service建立、更新或刪除時,kube-proxy都會收到通知。

  2. 配置IPVS規則:當一個新的Service被建立時,kube-proxy會根據Service的定義資訊,在核心中的IPVS表中建立相應的虛擬服務(Virtual Server)。這個虛擬服務對應的是Service的Cluster IP和埠。

  3. 後端Endpoint管理:同樣地,kube-proxy會關注Endpoints資源的變化,即Pod的IP地址和埠集合。當匹配Service選擇器的Pod發生變化時(例如Pod建立或銷燬),kube-proxy會動態地將這些Pod的實際IP和埠新增到或從IPVS的Real Server列表中移除,確保虛擬服務與實際後端Pod保持同步。

  4. 負載均衡策略:IPVS提供了多種負載均衡演算法,如輪詢(round-robin)、最少連線(least connection)、源雜湊(source hashing)等。kube-proxy可以根據Service配置選擇合適的負載均衡策略,並將其應用於IPVS規則中。

  5. 資料包轉發:網路流量到達Service的Cluster IP時,核心中的IPVS模組會根據已配置的虛擬服務和真實伺服器列表進行負載均衡處理,將流量透明地轉發至正確的後端Pod。

  6. IPVS與iptables的協同工作:雖然IPVS用於負載均衡,但它無法處理kube-proxy中的其他問題,例如包過濾、資料包偽裝(SNAT)等。因此,IPVS模式下的kube-proxy仍然會利用iptables來處理這些場景。iptables規則數量在IPVS模式中是恆定的,因為IPVS本身已經處理了大部分的負載均衡工作。

  7. 使用ipset提高效率:為了減少iptables規則的數量,IPVS模式下的kube-proxy使用ipset來管理IP地址集合,這樣可以更高效地處理大量的服務和端點。

  8. 服務的虛擬IP地址機制IPVS模式下,kube-proxy確保節點中存在虛擬介面(預設為kube-ipvs0),將服務IP地址繫結到虛擬介面,併為每個服務IP地址建立IPVS虛擬伺服器。

綜上所述,透過這種方式,kube-proxyIPVS模式下利用Linux核心的高效負載均衡能力來提供高可擴充套件性和高效能的服務發現與負載均衡機制,使得Kubernetes叢集內的應用服務能夠穩定、可靠地執行。

相關文章