1.什么是IPVS?
IPVS (IP Virtual Server,IP虛擬服務器)是基於Netfilter的、作為linux內核的一部分實現傳輸層負載均衡的技術,通常稱為第4層LAN交換。
IPVS集成在LVS(Linux Virtual Server)中,它在主機中運行,並在真實服務器集群前充當負載均衡器。IPVS可以將對TCP/UDP服務的請求轉發給后端的真實服務器,並使真實服務器的服務在單個IP地址上顯示為虛擬服務。因此IPVS天然支持Kubernetes Service。
2.為什么選擇IPVS
隨着kubernetes使用量的增長,其資源的可擴展性變得越來越重要。特別是對於使用kubernetes運行大型工作負載的開發人員或者公司來說,service的可擴展性至關重要。
kube-proxy是為service構建路由規則的模塊,之前依賴iptables來實現主要service類型的支持,比如(ClusterIP和NodePort)。但是iptables很難支持上萬級的service,因為iptables純粹是為防火牆而設計的,並且底層數據結構是內核規則的列表。
kubernetes早在1.6版本就已經有能力支持5000多節點,這樣基於iptables的kube-proxy就成為集群擴容到5000節點的瓶頸。舉例來說,如果在一個5000節點的集群,我們創建2000個service,並且每個service有10個pod,那么我們就會在每個節點上有至少20000條iptables規則,這會導致內核非常繁忙。
基於IPVS的集群內負載均衡就可以完美的解決這個問題。IPVS是專門為負載均衡設計的,並且底層使用哈希表這種非常高效的數據結構,幾乎可以允許無限擴容。
3.IPVS vs. IPTABLES區別
IPVS模式在Kubernetes v1.8中引入,並在v1.9中進入了beta。 1.11中實現了GA(General Availability)。IPTABLES模式在v1.1中添加,並成為自v1.2以來的默認操作模式。 IPVS和IPTABLES都基於netfilter。 IPVS模式和IPTABLES模式之間的差異如下:
3.1 IPVS為大型集群提供了更好的可擴展性和性能。
3.2 IPVS支持比iptables更復雜的負載平衡算法(最小負載,最少連接,位置,加權等)。
3.3 IPVS支持服務器健康檢查和連接重試等。