k8s 之流量链路(Ingress、Service、endpoint、kube-proxy、pod)
一、流量走向链路
ingress是控制器实现七层(HTTP)路由,将外部请求导向 Service,可选,且有多种ingress
Service 是核心抽象层,提供稳定ip,负载均衡到 Pod,必须存在
kube-proxy是svc的底层实现,kube-proxy实现 Service 的流量转发(通过 iptables/IPVS)
cilium是网络组件,功能强大,可替代 kube-proxy + 网络策略,网路组件必须存在,cilium可选
1、kube-proxy 版本(iptables/ipvs 实现)
外部请求 http://myapp.example.com
│
▼
[1] 进入 Node(80/443 → HostNetwork: Traefik Pod 或 NodePort Service)
│
▼
[2] Traefik Pod 收到流量,根据 Ingress 规则 → ClusterIP: myapp-svc:80
│
▼
[3] kube-proxy 在节点安装的 iptables/ipvs 规则拦截访问 Service: myapp-svc
│
▼
[4] kube-proxy 查询 Endpoints 对象,找到 Pod 列表(比如 10.0.0.11:8080、10.0.0.12:8080)
│
▼
[5] kube-proxy 选择一个 Pod(如 10.0.0.11:8080),DNAT 修改报文目的 IP/Port
│
▼
[6] Linux 内核转发数据包 → 目标 Pod IP(跨节点时需要 CNI 网络插件,比如 Flannel、Calico)
│
▼
[7] Pod 收到流量 → 应用容器处理并返回响应
2、Cilium eBPF 版本(替代 kube-proxy)
外部请求 http://myapp.example.com
│
▼
[1] 进入 Node(80/443 → HostNetwork: Traefik Pod 或 NodePort Service)
│
▼
[2] Traefik Pod 收到流量,根据 Ingress 规则 → ClusterIP: myapp-svc:80
│
▼
[3] Cilium 的 eBPF 程序挂载在内核网络钩子(tc/xdp/bpf_lxc),拦截对 myapp-svc 的访问
│
▼
[4] Cilium 查询内核中的 eBPF map(存有 Service → Endpoint 映射)
│
▼
[5] 从 Endpoints 列表中直接选择一个 Pod(如 10.0.0.11:8080)
│
▼
[6] 内核 eBPF 程序直接修改数据包目的地址,零拷贝转发到 Pod(可以同节点直达,也可以用 Cilium overlay / Cilium native routing 跨节点)
│
▼
[7] Pod 收到流量 → 应用容器处理并返回响应
3、补充与建议
小结补充:
1 Service:“谁提供服务”(逻辑入口)
2 kube-proxy / Cilium:“怎么把流量转给真正的 Pod”(底层转发)
3 Traefik Ingress:“根据域名和路径,决定把请求交给哪个 Service”(七层路由)
4 Cilium:可以同时干 kube-proxy + Ingress + NetworkPolicy 的活(一体化网络方案)
5 谁更新 Endpoint?
Endpoint Controller(端点控制器)
它是 Kubernetes 控制管理器(kube-controller-manager)中的一个组件,负责:
- 监听
Service和Pod的变化; - 根据
Service的selector匹配符合条件的 Pod; - 自动创建或更新同名的
Endpoints对象,填入这些 Pod 的 IP 和端口; - 当 Pod 崩溃、重启或被替换时,自动更新
Endpoints列表。 
6 什么是ep?
Endpoint 是 Kubernetes 的核心资源对象之一,由控制平面中的 Endpoint Controller 持续维护。它根据 Service 的 selector 规则,kube-proxy 或 Cilium)通过查询 Endpoint 对象,实现服务流量的负载均衡。 
建议:
如果你追求高性能、可观测性,推荐使用 Cilium,并启用 kube-proxy-replacement。
如果你已经有 Traefik,可以继续使用,或迁移到 Cilium Ingress(基于 Gateway API)。
不要同时运行 kube-proxy 和完整功能的 Cilium,会造成冲突。
二、pod服务暴露
Service 是 四层负载均衡的基础
Ingress 是 七层路由的入口
kube-proxy 或 Cilium 是实际转发引擎
Cilium + eBPF 是未来高性能方向
|
四层 LB
|
Service+kube-proxy |
iptables / IPVS
|
✅ 默认
|
|
四层 LB
|
Service+Cilium |
eBPF
|
❌ 需安装
|
|
七层 LB
|
Ingress+ Controller |
Nginx/Traefik/Cilium
|
❌ 需安装
|
|
下一代
|
Gateway API |
标准化路由
|
✅ 逐步成为主流
|
1、Kubernetes 服务暴露的设计目标
解耦服务发现与网络实现
应用无需关心后端 Pod 的 IP 变化,通过 Service 获得稳定入口。
支持多种访问场景
集群内部访问(Pod → Pod)
外部访问(用户 → 服务)
负载均衡与高可用
基于域名和路径的路由(七层)
可插拔架构
网络组件(如 CNI、Ingress Controller)可替换,适应不同环境(云、裸机、边缘)。
前三种都是 services 的四层实现,ip+port 访问
Ingress 是七层http、https 域名访问方式
1. Services ClusterIP(默认)
- 类型:
ClusterIP - 用途:仅在集群内部访问
- 特点:
- 分配一个集群内虚拟 IP
- 只能从其他 Pod 或节点内部访问
2. Services NodePort
- 类型:
NodePort - 用途:通过节点 IP + 固定端口暴露服务
- 特点:
- 每个节点都开放一个端口(如 30080)
- 外部用户访问
http://<node-ip>:30080 - 依赖 kube-proxy 或 Cilium 做转发
3. Services LoadBalancer
- 类型:
LoadBalancer - 用途:在云平台上自动创建外部负载均衡器(如 AWS ELB、GCP CLB)
- 特点:
- 云厂商提供公网 IP
- 自动将流量转发到 NodePort 或 Pod
- 成本较高,每个服务一个 LB
4. Ingress(推荐用于 HTTP/HTTPS)
- 类型:
Ingress资源 +Ingress Controller - 用途:统一入口,基于域名和路径路由
- 特点:
- 单个公网 IP 支持多个服务(多租户)
- 支持 TLS/SSL、重写、限流等高级功能
- 需要部署 Ingress Controller(如 Nginx、Traefik、Cilium)
5、现代趋势与增强方案
1. 使用 Gateway API(替代 Ingress)
- 更强大、结构化、支持 TCP/UDP、gRPC 等
- 由 SIG-Network 维护,未来将成为标准
- Cilium、Istio、Envoy Gateway 已支持
2. Cilium 替代 kube-proxy
- 使用 eBPF 实现更高效的 Service 转发
- 支持原生 SNI 路由、无 Sidecar Ingress
- 可作为一体化网络方案(CNI + LB + Ingress)
3. Service Mesh 集成
- 如 Istio、Linkerd,提供更细粒度的流量控制(金丝雀、熔断)
- 通常与 Ingress 协同工作
三、负载均衡
1、四层负载均衡(Layer 4):基于 IP 和端口
1、负载均衡实现方式(谁来做转发?)
✅ 方式一:kube-proxy(传统方式)
kube-proxy 运行在每个节点上,负责实现 Service 的负载均衡。
|
iptables(默认)
|
使用 iptables 规则随机转发
|
简单但规则多时性能下降
|
|
IPVS
|
使用 Linux IP Virtual Server,类似 LVS
|
高性能,支持轮询、最少连接等算法
|
- 监听
Service和Endpoints变化 - 生成 iptables/IPVS 规则
- 将访问
Service IP:Port的流量负载均衡到后端 Pod IP
查看 IPVS 负载均衡表
ipvsadm -ln # 输出: TCP 10.96.0.10:53 rr -> 10.1.0.10:53 Masq 1 0 0 -> 10.1.0.11:53 Masq 1 0 0
✅ 方式二:Cilium eBPF (现代高性能方案)
Cilium 使用 eBPF 技术,完全替代 kube-proxy,实现更高效、更灵活的负载均衡。
特点:
- 不依赖 iptables 或 IPVS
- 使用 eBPF 程序直接在内核层面转发流量
- 支持:
- 原生
ClusterIP、NodePort、LoadBalancer - 直接服务器返回(DSR)
- 更低延迟、更高吞吐
- 原生
- 可通过
cilium service list查看服务状态
✅ 负载均衡算法
|
kube-proxy (iptables)
|
随机(pseudo-random)
|
|
kube-proxy (IPVS)
|
RR、LC、DH、SH 等 8 种
|
|
Cilium (eBPF)
|
一致性哈希、轮询等
|
2、七层负载均衡(Layer 7):基于 HTTP 内容
1、Ingress 资源 + Ingress Controller
用于 Web 服务,根据 域名、路径、Header 等进行路由。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: app1.example.com
http:
paths:
- path: /
backend:
service:
name: app1-svc
port:
number: 80
- host: app2.example.com
http:
paths:
- path: /
backend:
service:
name: app2-svc
port:
number: 80
2、常见ingress 方案
|
Nginx Ingress
|
最流行,基于 Nginx,功能丰富
|
|
Traefik
|
自动发现,支持 Let's Encrypt
|
|
Cilium Ingress
|
基于 eBPF,无需额外代理,高性能
|
|
Istio/Gateway API
|
服务网格集成,精细控制
|

浙公网安备 33010602011771号