1.?ipvsadm
?是什么?
ipvsadm
(IP Virtual Server Administration)是 Linux 內核中?IPVS(IP Virtual Server)?模塊的管理工具,用于配置和監控內核級的負載均衡規則。它是 Kubernetes 中?kube-proxy
?在?IPVS 模式?下的底層實現工具。
主要功能
-
管理 IPVS 的虛擬服務(Virtual Service)和真實服務器(Real Server,即后端 Pod)。
-
支持多種負載均衡算法(如輪詢?
rr
、加權輪詢?wrr
、最少連接?lc
?等)。 -
查看當前負載均衡規則和連接狀態。
常用命令
ipvsadm -Ln # 列出所有 IPVS 規則(數字格式顯示) ipvsadm -Ln --stats # 顯示統計信息(如連接數、流量) ipvsadm -Ln --rate # 顯示速率(如每秒請求數) ipvsadm -E -t <VIP:PORT> -s <ALGORITHM> # 修改調度算法
2. IPVS 模式詳解
IPVS(IP Virtual Server)是 Linux 內核內置的?四層(L4)負載均衡器,工作在傳輸層(TCP/UDP),性能遠高于傳統的?iptables
?模式。
為什么 Kubernetes 使用 IPVS 模式?
-
高性能:基于哈希表存儲規則,查詢效率為 O(1),適用于大規模集群。
-
支持多種調度算法:如輪詢(
rr
)、加權輪詢(wrr
)、最少連接(lc
)等。 -
更好的可擴展性:在 Service 數量超過 10,000 時,性能仍穩定。
IPVS 模式的核心組件
組件 | 說明 |
---|---|
Virtual Service | 虛擬服務(VIP),對應 Kubernetes Service 的?ClusterIP:Port 。 |
Real Server | 真實后端(Pod),對應 Endpoints 中的?PodIP:Port 。 |
調度算法 | 決定流量如何分發給后端 Pod(如?rr 、wrr 、lc )。 |
IPVS 與 iptables 模式對比
特性 | IPVS 模式 | iptables 模式 |
---|---|---|
負載均衡算法 | 支持多種(rr/wrr/lc 等) | 僅支持隨機均衡 |
規則存儲結構 | 哈希表(O(1) 復雜度) | 線性鏈表(O(n) 復雜度) |
大規模集群性能 | 更優(適合 10k+ Service) | 性能下降明顯 |
依賴內核模塊 | ip_vs 、ip_vs_rr ?等 | iptables 、nf_conntrack |
3. Kubernetes 中 IPVS 的工作流程
-
Service 創建
-
當創建?
ClusterIP
?類型的 Service 時,kube-proxy
?會:-
在?
kube-ipvs0
?虛擬接口上綁定 Service 的 ClusterIP。 -
通過?
ipvsadm
?添加 IPVS 規則,將 VIP(Service IP)映射到后端 Pod IP。
-
-
-
流量轉發
-
當訪問?
ClusterIP:Port
?時:-
內核根據 IPVS 規則匹配到目標 Service。
-
IPVS 按調度算法選擇一個后端 Pod,轉發流量。
-
-
-
示例規則
執行?ipvsadm -Ln
?可能看到如下輸出:TCP 10.233.25.255:80 rr-> 10.233.1.2:80 Masq 1 0 0-> 10.233.1.3:80 Masq 1 0 0
-
rr
:輪詢算法。 -
Masq
:使用 SNAT(源地址轉換)。 -
后端是兩個 Pod(
10.233.1.2:80
?和?10.233.1.3:80
)。 -
檢查 Service 和 Endpoints
kubectl get svc -A | grep 10.233.25.255 # 找到關聯的 Service kubectl describe endpoints <service-name> # 檢查是否有健康的 Pod
-
查看 IPVS 規則
ipvsadm -Ln | grep 10.233.25.255
-
如果輸出中無目標 Pod(
->
?開頭的行),則說明 Endpoints 缺失。
-
-
4. 常見問題
Q1: 為什么?kube-ipvs0
?顯示?state DOWN
?
-
這是正常的,因為?
kube-ipvs0
?是虛擬接口,僅用于綁定 IP,不參與實際網絡通信。IPVS 規則由內核直接處理。
Q2: 如何檢查 IPVS 是否正常工作?
# 查看規則 ipvsadm -Ln # 檢查是否有流量轉發 ipvsadm -Ln --stats
Q3: 如何切換 kube-proxy 到 IPVS 模式?
在 kube-proxy 啟動參數中添加:
--proxy-mode=ipvs --ipvs-scheduler=rr # 指定調度算法
總結
-
ipvsadm
?是管理 IPVS 負載均衡規則的工具,Kubernetes 通過它實現高性能 Service 轉發。 -
IPVS 模式?適用于大規模集群,支持多種調度算法,性能優于 iptables。
-
遇到?
no destination available
?時,優先檢查 Endpoints 和 Pod 狀態。