kube-proxy - Traffic controller
kube-proxy 是 Kubernetes 节点上的网络代理组件,它负责将访问 Service 的流量转发到正确的 Pod,实现负载均衡。它通过维护 iptables 或 IPVS 规则来完成这一过程,是 Service 能够稳定工作的幕后核心。
🧩 kube-proxy 的核心职责
- 流量转发:将访问 Service 的请求(ClusterIP/NodePort/LoadBalancer)转发到后端 Pod。
- 负载均衡:在多个 Pod 副本之间分配流量,支持轮询、最少连接等策略。
- 规则维护:监听 API Server 中 Service 和 Endpoints 的变化,动态更新转发规则。
- 多种模式:支持 iptables(默认)、IPVS(推荐大规模集群)、以及早期的 userspace 模式。
📌 类比理解
- kube-proxy = 交通指挥
- 它站在工厂门口(节点),把进入的车辆(请求)引导到正确的工人(Pod)。
- 如果有多个工人,它会安排车辆分流,避免某个工人过载。
- 它不决定工人是谁(那是 Scheduler 的工作),只负责交通分配。
⚙️ 工作流程
- 用户访问 Service 的 ClusterIP。
- 请求进入节点网络栈。
- kube-proxy 根据 iptables/IPVS 规则,将请求转发到某个 Pod IP。
- Pod 响应请求,完成一次服务调用。
🔎 模式对比
| 模式 | 特点 | 适用场景 |
|---|---|---|
| userspace | 早期实现,性能低,已淘汰 | 不推荐 |
| iptables | 默认模式,利用内核 NAT 规则,简单稳定 | 中小型集群 |
| IPVS | 高性能,支持更多负载均衡算法(最少连接、加权轮询等),规则管理更高效 | 大规模集群 |
⚠️ 注意事项
- 性能优化:大规模集群推荐使用 IPVS 模式。
- 与 CoreDNS 配合:CoreDNS 负责解析服务名 → ClusterIP,kube-proxy 再转发到 Pod。
- 未来趋势:部分网络插件(如 Cilium)正在探索基于 eBPF 的“无 kube-proxy”模式。
💡 总结
- kube-proxy 是 Kubernetes Service 的流量调度核心。
- 它通过 iptables/IPVS 规则实现流量转发和负载均衡。
- 小集群用 iptables 模式即可,大集群推荐 IPVS 模式。
🧩 CoreDNS
CoreDNS(接线员)是 Kubernetes 集群中的 DNS 服务组件,它的作用是把服务名解析成 IP 地址,让 Pod 能够通过名字互相访问,而不是依赖不断变化的 Pod IP。
🧩 CoreDNS 的职责
- 服务发现
👉 当 Pod 想访问一个 Service(如nginx.default.svc.cluster.local),CoreDNS 会把这个名字解析成对应的 ClusterIP。 - DNS 解析
👉 CoreDNS 作为集群的 DNS 服务器,负责解析所有 Service 和 Pod 的域名。
👉 它会根据 Kubernetes API Server 提供的服务信息动态更新解析规则。 - 插件化架构
👉 CoreDNS 采用插件机制,可以扩展功能,比如缓存、负载均衡、重写规则等。
📌 类比理解
- CoreDNS = 电话接线员
- 当你拨打公司分机号(Service 名称),接线员会查找通讯录,把你接到正确的部门(ClusterIP)。
- 接线员不负责交通分配(那是 kube-proxy 的工作),它只负责告诉你“这个部门的入口在哪里”。
⚠️ 注意事项
- Pod IP 不稳定:Pod 重启后 IP 会变化,所以不能直接用 Pod IP。
- Service 名称稳定:通过 CoreDNS,应用只需记住 Service 名称,就能稳定访问。
- 与 kube-proxy 配合:CoreDNS 负责“找地址”,kube-proxy 负责“送到目的地”。
💡 总结
- CoreDNS 是 Kubernetes 的 服务发现核心。
- 它把 Service 名称 → ClusterIP,保证应用能稳定访问。
- 与 kube-proxy 配合,完成从名字解析到流量分发的完整链路。

浙公网安备 33010602011771号