kube-proxy
主要通過管理網絡規則和流量轉發來幫助 Pod 之間進行通信,具體方式如下:
1. 維護 Service 相關的網絡規則
kube-proxy
監聽 API Server,當 Service 或 Endpoints 發生變化時,動態更新網絡規則。- 確保流量能正確地從 Service 發送到對應的 Pod。
2. 支持三種模式進行流量轉發
-
iptables
模式(默認):kube-proxy
通過iptables
規則攔截訪問 Service 的流量,并將其 NAT 轉發到后端 Pod。- 適用于大部分場景,性能較好,但規則過多時管理會變復雜。
-
ipvs
模式:- 使用 Linux 內核
IPVS
(IP Virtual Server)機制進行流量轉發,性能更優,支持更多的負載均衡算法。 - 適合大規模集群,但需要內核支持
ipvs
模塊。
- 使用 Linux 內核
-
userspace
模式(已廢棄):- 由
kube-proxy
進程直接處理流量,再轉發到 Pod,性能較差,不推薦使用。
- 由
3. 提供 Service 訪問能力
- 通過 ClusterIP 訪問:
- Pod 訪問 Service 時,
kube-proxy
負責將流量轉發到后端 Pod。
- Pod 訪問 Service 時,
- 通過 NodePort 訪問:
kube-proxy
監聽 Node 上的端口,并將外部流量轉發到 Service。
- 通過 LoadBalancer 訪問:
- 結合云廠商的負載均衡服務,將流量分發到集群內的 Node。
4. 實現 Pod 之間的跨節點通信
kube-proxy
結合 CNI(如 Flannel、Calico)實現不同 Node 上 Pod 之間的通信。- 確保訪問 Service 時,即使后端 Pod 在不同的 Node 上,也能正確轉發流量。
企業級案例:電商平臺的流量轉發(Kube-Proxy 實踐)
場景描述
某電商公司使用 Kubernetes 部署了一個高并發的購物平臺,包含多個微服務,如:
frontend
(前端服務,用戶訪問入口)cart-service
(購物車服務)order-service
(訂單服務)payment-service
(支付服務)
這些服務需要通過 kube-proxy
實現流量轉發,確保用戶下單時,各個服務能正確通信。
1. 購物車訪問訂單服務的通信
用戶流程:
- 用戶在
frontend
添加商品到購物車。 frontend
調用cart-service
,存儲購物信息。- 用戶點擊“下單”,
cart-service
需要調用order-service
處理訂單。
Kubernetes 部署情況:
cart-service
和order-service
部署在不同的 Node 上。order-service
通過 KubernetesService
暴露,ClusterIP 為10.96.0.10
。kube-proxy
負責管理cart-service
訪問order-service
的流量。
Kube-Proxy 作用:
kube-proxy
監聽order-service
的 Endpoints,確定后端可用的 Pod。- 使用
iptables
或ipvs
規則,讓cart-service
訪問10.96.0.10
時,流量自動轉發到order-service
的 Pod。
2. 訂單服務調用支付服務(跨節點流量)
用戶流程:
order-service
處理訂單后,需要調用payment-service
進行支付。payment-service
可能運行在不同的 Node 上。- 需要保證流量能跨節點轉發,防止單點失敗。
Kube-Proxy 作用:
- 維護
payment-service
的 Service 規則,讓order-service
訪問10.96.0.20
(ClusterIP)時,自動轉發到某個payment-service
Pod。 - 如果
payment-service
的某個 Pod 故障,kube-proxy
會自動調整流量,轉發到健康的 Pod,保證支付功能正常。
3. 用戶外部訪問購物平臺(NodePort 模式)
場景:
- 用戶需要訪問
frontend
,但frontend
只能通過 Service 暴露。 - 由于
frontend
需要被外網訪問,我們使用NodePort
Service。
Kube-Proxy 作用:
kube-proxy
在每個 Node 上開啟一個高位端口(如30080
)。- 當用戶訪問
NodeIP:30080
時,kube-proxy
自動將流量轉發到frontend
Pod。 - 如果
frontend
Pod 不在該 Node 上,kube-proxy
會通過iptables
或ipvs
規則,轉發流量到正確的 Node。
總結
需求 | Kube-Proxy 解決方案 |
---|---|
購物車服務訪問訂單服務 | kube-proxy 通過 iptables/ipvs 規則,管理 ClusterIP 轉發 |
訂單服務調用支付服務 | kube-proxy 確保跨節點 Pod 之間的流量轉發 |
用戶訪問前端服務 | kube-proxy 通過 NodePort 讓用戶外部訪問 |
https://github.com/0voice