一 kube-proxy原理 1.1 kube-proxy概述 Kubernetes為了支持集群的水平擴展、高可用性,抽象出了Service的概念。Service是對一組Pod的抽象,它會根據訪問策略(如負載均衡策略)來訪問這組Pod。Kubernetes在創建Service時會為Service分配 ...
一 kube-proxy原理
1.1 kube-proxy概述
Kubernetes為了支持集群的水平擴展、高可用性,抽象出了Service的概念。Service是對一組Pod的抽象,它會根據訪問策略(如負載均衡策略)來訪問這組Pod。Kubernetes在創建Service時會為Service分配一個虛擬的IP地址,客戶端通過訪問這個虛擬的IP地址來訪問服務,Service則負責將請求轉發到後端的Pod上。 Service作用類似反向代理,但與普通的反向代理有一些不同:首先,它的IP地址是虛擬的,預設情況無法從外面訪問;其次,它的部署和啟停是由Kubernetes統一自動管理的。 然而,Service是一個抽象概念,而真正提供Service功能的是kube-proxy服務進程。在Kubernetes集群的每個Node上都會運行一個kube-proxy服務進程,可以簡單理解此進程是Service的透明代理兼負載均衡器,其核心功能是將到某個Service的訪問請求轉發到後端的多個Pod實例上。 此外,Service的ClusterIP與NodePort等概念是kube-proxy服務通過iptables的NAT轉換實現的,kube-proxy在運行過程中動態創建與Service相關的iptables規則,這些規則實現了將訪問服務(ClusterIP或NodePort)的請求負載分發到後端Pod的功能。 由於iptables機制針對的是本地的kube-proxy埠,所以在每個Node上都要運行kube-proxy組件。這樣一來,在Kubernetes集群內部,才可以在任意Node上發起對Service的訪問請求。 綜上所述,由於kube-proxy的作用,在Service的調用過程中客戶端無須關心後端有幾個Pod,中間過程的通信、負載均衡及故障恢復都是透明的。二 kube-proxy模式
2.1 userspace模式
起初,kube-proxy進程是一個真實的TCP/UDP代理,類似HAProxy,負責從Service到Pod的訪問流量的轉發,這種模式被稱為userspace(用戶空間代理)模式。

2.2 iptables模式
如圖所示,Kubernetes從1.2版本開始,將iptables作為kube-proxy的預設模式。iptables模式下的kube-proxy不再起到Proxy的作用,其核心功能:通過API Server的Watch介面實時跟蹤Service與Endpoint的變更信息,並更新對應的iptables規則,Client的請求流量則通過iptables的NAT機制“直接路由”到目標Pod。
- KUBE-CLUSTER-IP:在masquerade-all=true或clusterCIDR指定的情況下對ServiceClusterIP地址進行偽裝,以解決數據包欺騙問題。
- KUBE-EXTERNAL-IP:將數據包偽裝成Service的外部IP地址。
- KUBE-LOAD-BALANCER、KUBE-LOAD-BALANCERLOCAL:偽裝LoadBalancer類型的Service流量。
- KUBE-NODE-PORT-TCP、KUBE-NODE-PORT-LOCALTCP、KUBE-NODE-PORTUDP、KUBE-NODE-PORT-LOCAL-UDP:偽裝NodePort類型的Service流量。
2.3 IPVS模式

- 為大型集群提供了更好的可擴展性和性能;
- 支持比iptables更複雜的複製均衡演算法(最小負載、最少連接、加權等);
- 支持伺服器健康檢查和連接重試等功能;
- 可以動態修改ipset的集合,即使iptables的規則正在使用這個集合。