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-servicePod。 - 如果
payment-service的某个 Pod 故障,kube-proxy会自动调整流量,转发到健康的 Pod,保证支付功能正常。
3. 用户外部访问购物平台(NodePort 模式)
场景:
- 用户需要访问
frontend,但frontend只能通过 Service 暴露。 - 由于
frontend需要被外网访问,我们使用NodePortService。
Kube-Proxy 作用:
kube-proxy在每个 Node 上开启一个高位端口(如30080)。- 当用户访问
NodeIP:30080时,kube-proxy自动将流量转发到frontendPod。 - 如果
frontendPod 不在该 Node 上,kube-proxy会通过iptables或ipvs规则,转发流量到正确的 Node。
总结
| 需求 | Kube-Proxy 解决方案 |
|---|---|
| 购物车服务访问订单服务 | kube-proxy 通过 iptables/ipvs 规则,管理 ClusterIP 转发 |
| 订单服务调用支付服务 | kube-proxy 确保跨节点 Pod 之间的流量转发 |
| 用户访问前端服务 | kube-proxy 通过 NodePort 让用户外部访问 |
https://github.com/0voice