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