前言
Kubernetes 提供了基於 IPVS 的服務代理。相比於 iptables 代理模式,IPVS 代理模式具有低延遲、高性能的優勢。本文主要介紹 IPVS 相關概念。如果想了解 iptables 模式,可以參考另一篇文章:netfiler/iptables 介紹。
Linux 虛擬服務器
要了解 IPVS,不得不談到 Linux 虛擬服務器項目(Linux Virtual Server, LVS)。Linux 虛擬服務器技術是為了解決服務器承受的日益增長的訪問壓力,它通過部署虛擬服務器,使真實服務器集群使用同一個地址對外暴露服務,並在集群內實現負載均衡。真實服務器之間可以通過高速局域網或地理分隔的廣域網相互連接,負載均衡器將請求分發到不同的真實服務器。因此,可以通過添加新服務器,提高系統可擴展性。
實現原理
LVS 實現負載均衡的方式有三種可以配置:Nat,IP Tunneling 和 Direct Routing(直接路由)。
NAT 實現
集群可以使用私有網絡地址,使用負載均衡器的公網 IP 暴露服務。NAT 實現的缺點是負載均衡器需要修改請求、響應數據包,容易成為性能瓶頸。
IP 隧道實現
IP 隧道技術是將原始 IP 數據報封裝在另一個 IP 數據報中進行傳輸,原數據報作為新數據報的載荷,隧道包目的地址就是轉交地址。所以,IP 隧道實現對網絡沒有要求,既可以是 LAN,也可以是 WAN。服務器在接受請求后,可以直接向客戶端返回響應。
直接路由實現
直接路由作用和 IP 隧道類似,負載均衡器負責分發請求,服務器收到請求后可以直接向客戶端返回響應。但直接路由只支持局域網,集群服務器必須和負載均衡器物理相連。負載均衡器通過修改數據幀的目的 MAC 地址實現負載均衡。
IPVS
IPVS(IP Virtual Server)是一個軟件,是內置在 Linux 內核中的傳輸層負載均衡器,實現了四層負載均衡(Layer-4 Load Balancing)。四層負載均衡的意思是負載均衡策略是基於傳輸層的信息。IPVS 的管理程序是 ipvsadm,可以通過man ipvsadm
查看使用手冊。ipvsadm 支持直接路由(-g)、IP 隧道(-i)、NAT(-m)三種轉發模式:
$ man ipvsadm
-g, --gatewaying Use gatewaying (direct routing). This is the default.
-i, --ipip Use ipip encapsulation (tunneling).
-m, --masquerading Use masquerading (network access translation, or NAT).
延伸閱讀
[1] The Linux Virtual Server project
[2] Wiki - Load Balancing
[3] Software - IPVS
[4] ipvsadm:Linux 的負載均衡功能 ipvs 的使用,ipvsadm的常用操作命令