Kube-Proxy 和 CNI:Kubernetes 网络的支柱
发布: (2026年1月4日 GMT+8 02:55)
3 min read
原文: Dev.to
Source: Dev.to
概览
Kubernetes 网络看起来很简单:每个 Pod 都会获得自己的 IP 地址,Service 会自动将流量路由到相应的 Pod。 这种简洁性由两个核心组件提供支持:
- 容器网络接口(CNI)
- kube-proxy
它们共同负责 IP 分配、网络接口设置、路由以及集群内的 Service 负载均衡。
kube-proxy
kube-proxy 负责使 Service 能够工作,通过将 Service 的 IP 和端口转换为实际的 Pod 端点来实现。
- Service IP 稳定性 – kube-proxy 确保 Service IP 即使在底层 Pod 短暂存在的情况下,也保持为一个稳定的入口点。
- 路由规则创建 – 当创建 Service 或其端点时,kube-proxy 会在节点上安装 iptables 或 IPVS 规则,将流量从 Service IP 引导到对应的 Pod。
- 动态更新 – 若为 Service 提供服务的 Pod 被添加或删除,kube-proxy 会相应更新内核规则,保持服务可用性。
- 负载分配 – 通过利用内核网络(iptables 或 IPVS),kube-proxy 将进入的流量在实现该 Service 的一组 Pod 之间进行分配。
- 没有 kube-proxy – Service IP 仍会存在,但不会将流量转发到 Pod;kube-proxy 将 Service IP 与端口“接线”到实际的 Pod 端点。
容器网络接口(CNI)
CNI 插件处理 Pod 级别的网络,使 Pod 能在节点内部和跨节点之间相互通信。
- IP 分配 – 每个 Pod 从集群的 IP 池中获取唯一的 IP 地址。
- 接口创建 – CNI 为 Pod 创建一对 veth 设备,将一端放入 Pod 的网络命名空间,另一端留在宿主机上。
- 路由配置 – CNI 设置路由规则,使得 Pod 能够访问位于不同节点的其他 Pod,通常通过配置宿主机的路由表或覆盖网络实现。
- 网络隔离 – 通过管理命名空间和接口,CNI 确保 Pod 之间相互隔离,同时在需要时仍能进行通信。
这两个组件——负责 Service 路由的 kube-proxy 和负责 Pod 网络的 CNI——构成了 Kubernetes 网络的骨干,使整个集群能够实现无缝通信。