在kubernetes集羣的每一個node都會運行一個kube-proxy服務進程,這個進程可用看做Service的透明代理兼負載均衡器。其核心功能是將到某個Service的訪問請求轉發到後端的多個pod實例上。對每個TCP類型的kubernetes Service,kube-proxy都會在本地Node上創建一個SocketServer類負責接受請求,而後均勻發送到後端某個pod的端口上,這個過程默認採用Round Robin負載均衡算法。也提供經過修改Service的service.spec.sessionAffinity參數的值來實現會話保持特性的定向轉發。若是設置的值爲clientIp,則未來自同一個clientIp的請求都轉發到同一個後端pod上。node
訪問Service的請求,不管是用Cluster Ip+TargetPort的方式仍是用節點機Ip+NodePort的方式,都被節點及的Iptables規則重定向到kube-proxy監聽Service服務代理端口。kube-proxy接收到Service的訪問請求後,會如何選擇後端的pod呢?算法
目前kube-porxy負載均衡器只支持Round Robin算法,按照成員列表逐個選取成員。一輪循環完,開始下一輪。還支持Session保持。後端