kube-proxy原理 和 service關系詳解


每種類型的Service適合怎樣的場景以及kube-proxy是如何實現Service負載均衡是本文的重點

Kube-Proxy運行機制詳解

在Kubernetes集群中的每個Node上都會運行一個Kube-proxy服務進程,每個kube-proxy都充當一個負載均衡器,這是一個分布式的負載均衡器,我們可以把這個進程看作是透明代理兼負載均衡器,核心功能就是將訪問到某個Service的請求轉發到該Service對應的真實后端Pod上.

Service的ClusterIP和NodePort的實現方式都是kube-proxy服務通過iptables的NAT轉換實現的

比如從Node1主機上訪問Service和Node1上的Pod訪問Service

1.每個Node上的kube-proxy都會綁定集群內所有Service的IP到本機的kube-ipvs0的網卡上,如下圖

這個作用就是:讓數據包經過本機的INPUT鏈

 

2.通過socket調用,創建IPVS的virtual server和real server,分別對應Kubernetes的Service和EndPoints

 

3.發起請求后,通過kube-proxy請求先到本機,因為kube-proxy為本機綁定了對應的ServiceIP

4.然后通過kube-proxy創建的規則,把請求直接轉發到對應的Pod 進行處理

內部Node1節點上通過ClusterIP訪問Service和Node1節點上的Pod通過ClusterIP訪問Service:

 由於Node1本機綁定了所有的ServiceIP,所以請求到達Node1本機的Kube-proxy,然后Node1本機的kube-Proxy創建的規則將請求轉發到對應的后端真實Pod

內部Node2節點上通過ClusterIP訪問Service和Node2節點上的Pod通過ClusterIP訪問Service:

 由於Node2本機綁定了所有的ServiceIP,所以請求到達Node2本機的Kube-proxy,然后Node2本機的kube-Proxy創建的規則將請求轉發到對應的后端真實Pod

外部通過NodePort訪問:

 就是請求先到Node的端口,然后通過kube-proxy轉發到對應的pod直接處理

 

 

Service和Kube-Proxy在Kubernetes集群中的工作原理

Kube-proxy在集群中的作用

 

 

1.運行在每個Node節點的Kube-Proxy會實時的watch Service和Endpoints對象

當用戶在kubernetes集群中創建了含有label的Service之后,同時會在集群中創建出一個同名的Endpoints對象,用於存儲該service下的Pod IP

2.每個運行在Node節點的Kube-Proxy感知到Service和Endpoints的變化之后,會在各自的Node節點設置相關的iptables或IPVS轉發規則,用於之后用戶通過Service的ClusterIP去訪問該Service下的服務

3.當Kube-Proxy把需要的規則設置完成后,用戶就可以在集群內的Node或客戶端Pod上通過ClusterIP經過該節點下的Iptales或IPVS設置的規則進行路由和轉發后 直接將請求發送到真實的后端Pod

Service類型

ClusterIP

ClusterIP 類型的 Service 是 Kubernetes 集群默認的 Service, 它只能用於集群內部通信(比如通過集群內Node節點訪問Service或者Pod里訪問Service);不能用於外部通信

NodePort

如果你想要在集群外訪問集群內部的服務,你可以使用這種類型的 Service。NodePort 類型的 Service 會在集群內部的所有 Node 節點打開一個指定的端口。之后所有的流量直接發送到這個端口之后,就會轉發的 Service 去對真實的服務進行訪問

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM