Kubernetes Kube-Proxy 工作原理详解:Service 流量转发的核心组件¶
文章摘要¶
在 Kubernetes 中,每个 Pod 都拥有独立 IP 地址,但 Pod 可能随时重建、迁移甚至销毁。
为了让业务能够稳定访问后端 Pod,Kubernetes 引入了 Service 资源。
而真正负责实现 Service 流量转发的核心组件,就是 Kube-Proxy。
本文将详细讲解 Kube-Proxy 的工作原理、iptables 与 IPVS 模式、Service 转发机制以及生产环境中的常见问题。
学习目标¶
阅读完本文后,你将掌握:
- Kube-Proxy 的作用
- Service 为什么存在
- ClusterIP 如何工作
- Endpoint 与 EndpointSlice 的关系
- iptables 模式原理
- IPVS 模式原理
- 流量转发全过程
- 常见故障排查方法
适用人群¶
本文适合:
- Kubernetes 初学者
- Linux 运维工程师
- DevOps 工程师
- 云计算学习者
- Kubernetes 面试准备人员
什么是 Kube-Proxy?¶
很多新手都会认为:
实际上:
如果把 Kubernetes 集群看作一个酒店:
| 角色 | Kubernetes |
|---|---|
| 酒店总机号码 | Service |
| 前台接线员 | Kube-Proxy |
| 房间 | Pod |
客户拨打:
总机号码不会变。
但具体接到哪个房间:
由前台负责转接。
Kube-Proxy 的职责也是如此。
为什么需要 Service?¶
假设有三个 Nginx Pod:
问题来了:
如果 Pod-B 被删除:
就不存在了。
业务访问将失败。
Pod IP 不稳定¶
Kubernetes 中:
因此:
Service 提供稳定入口¶
例如:
创建后:
这个地址基本不会变化。
用户访问:
即可访问后端 Pod。
Kube-Proxy 在 Kubernetes 中的位置¶
Kube-Proxy 的核心职责¶
主要负责:
- 监听 Service 变化
- 监听 Endpoint 变化
- 维护转发规则
- 实现负载均衡
- 转发 Service 流量
简单来说:
Kube-Proxy 负责把访问 Service 的流量转发到正确的 Pod。
Kube-Proxy 如何工作?¶
第一步:监听 API Server¶
Kube-Proxy 持续 Watch:
资源。
第二步:发现 Service¶
例如:
第三步:发现 Pod¶
对应 Endpoint:
第四步:生成转发规则¶
Kube-Proxy 自动生成:
或者:
规则。
第五步:流量转发¶
用户访问:
流量自动转发到:
或者:
或者:
Endpoint 是什么?¶
很多人容易忽略 Endpoint。
实际上:
它只知道:
例如:
Service:
系统自动生成:
内容:
Kube-Proxy 根据这些信息完成转发。
EndpointSlice¶
Kubernetes 新版本推荐:
替代:
原因:
当 Pod 数量达到数千个时:
对象过于庞大。
EndpointSlice 会拆分:
提升性能。
iptables 模式¶
这是最经典的模式。
查看:
配置:
工作流程:
优点¶
- 简单稳定
- 部署方便
- 社区成熟
缺点¶
当 Service 数量很多时:
性能下降。
IPVS 模式¶
生产环境更推荐。
配置:
工作流程:
优点¶
- 转发效率更高
- 支持更多调度算法
- 大规模集群性能更好
支持的算法¶
例如:
轮询。
最少连接。
源地址哈希。
流量转发全过程¶
假设:
对应:
访问:
过程:
整个过程中:
真正工作的是:
Kube-Proxy 与 CNI 的区别¶
很多新人容易混淆。
| 组件 | 职责 |
|---|---|
| Kube-Proxy | Service 转发 |
| CNI | Pod 网络通信 |
例如:
属于:
负责。
例如:
属于:
负责。
生产环境常见故障¶
Service 无法访问¶
检查:
Endpoint 为空¶
查看:
可能发现:
说明没有匹配到 Pod。
Selector 配置错误¶
例如:
Pod:
导致无法关联。
Kube-Proxy 异常¶
查看:
iptables 规则缺失¶
查看:
IPVS 规则异常¶
查看:
运维排查命令¶
查看 Kube-Proxy:
查看日志:
查看 Service:
查看 Endpoint:
查看 EndpointSlice:
面试常见问题¶
Kube-Proxy 的作用是什么?¶
负责 Service 流量转发。
Service 自己会转发流量吗?¶
不会。
由 Kube-Proxy 实现。
Kube-Proxy 常见模式有哪些?¶
- iptables
- IPVS
为什么推荐 IPVS?¶
性能更好,适合大规模集群。
Kube-Proxy 会直接转发网络包吗?¶
不会。
它通过维护 Linux 内核规则实现流量转发。
FAQ¶
每个节点都需要 Kube-Proxy 吗?¶
通常需要。
因为每个节点都可能访问 Service。
删除 Kube-Proxy 会怎样?¶
已有规则短时间可能继续工作。
但后续 Service 更新将失效。
Kube-Proxy 会直接访问 ETCD 吗?¶
不会。
通过 API Server 获取资源信息。
总结¶
Kube-Proxy 是 Kubernetes Service 网络模型的核心组件。
它负责:
- 监听 Service
- 监听 Endpoint
- 维护转发规则
- 实现负载均衡
可以记住一句话:
Service 提供稳定入口,Kube-Proxy 负责真正把流量转发到后端 Pod。