kubernetes實踐之五十一:kube-proxy執行機制分析

百聯達發表於2018-05-31
一: Service,Endpoints與Pod的關係

Kube-proxy程式獲取每個Service的Endpoints,實現Service的負載均衡功能

二:Service的負載均衡轉發規則

訪問Service的請求,不論是Cluster IP+TargetPort的方式;還是用Node節點IP+NodePort的方式,都被Node節點的Iptables規則重定向到Kube-proxy監聽Service服務代理埠。kube-proxy接收到Service的訪問請求後,根據負載策略,轉發到後端的Pod。

三:kube-proxy工作原理


1.Service在很多情況下只是一個概念,而真正將Service的作用實現的是kube-proxy服務程式。

2.每個Node節點上都會執行一個kube-proxy服務程式。

3.對每一個TCP型別的Kubernetes Service,kube-proxy都會在本地Node節點上建立一個SocketServer來負責接收請求,然後均勻傳送到後端某個Pod的埠上。這個過程預設採用Round Robin負載均衡演算法。

4.kube-proxy在執行過程中動態建立與Service相關的Iptables規則,這些規則實現了ClusterIp及NodePort的請求流量重定向到kube-proxy程式上對應服務的代理埠功能。

5.kube-proxy透過查詢和監聽API Server 中Service與Endpoints的變化,為每個Service都建立一個“服務代理物件”,並自動同步。服務代理物件是kube-proxy程式內部的一種資料結構,它包括一個用於監聽此服務請求的SockerServer,SocketServer的埠是隨機選擇一個本地空閒埠。此外,kube-proxy內部建立了一個負載均衡器-LoadBalancer.

6.針對發生變化的Service列表,kube-proxy會逐個處理:
a. 如果沒有設定叢集IP,則不做任何處理,否則,取該Service的所有埠定義列表。
b.為Service埠分配服務代理物件併為該Service建立相關的Iptables規則。
c.更新負載均衡器元件中對應Service的轉發地址列表

7.kube-proxy在啟動時和監聽到Service或Endpoint的變化後,會在本機Iptables的NAT表中新增4條規則鏈。
a.KUBE-PORTALS-CONTAINER: 從容器中透過Cluster IP 和埠號訪問service.
b.KUBE-PORTALS-HOST: 從主機中透過Cluster IP 和埠號訪問service.
c.KUBE-NODEPORT-CONTAINER:從容器中透過NODE IP 和埠號訪問service.
d. KUBE-NODEPORT-HOST:從主機中透過Node IP 和埠號訪問service.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2155433/,如需轉載,請註明出處,否則將追究法律責任。

相關文章