Sidecar 模式
Envoy 代理、透明拦截。
30 分钟
Sidecar 模式
Sidecar(边车) 指与业务容器 同 Pod、同生命周期 的辅助进程。在服务网格里,Sidecar 代理(多为 Envoy)拦截进出应用的流量,执行路由、TLS、指标采集——应用仍以为在调「普通 TCP/HTTP」。
学习目标
- 理解 Sidecar 部署模型与透明拦截原理
- 知道 Envoy 在 Istio 数据面的角色
- 对照 k8s-pods 多容器 Pod 概念
Pod 里的两个容器
┌─────────────── Pod ───────────────┐
│ ┌─────────┐ ┌─────────────┐ │
│ │ app │───→│ envoy-proxy │──┼──→ 集群内其他服务
│ │ :8080 │←───│ (Sidecar) │ │
│ └─────────┘ └─────────────┘ │
└───────────────────────────────────┘
- app:你的 Spring Boot / Node 服务,监听 8080
- envoy-proxy:Istio 注入,监听虚拟端口,由 iptables / eBPF 重定向流量
应用 无需改代码 即可走代理;这与在 JVM 里嵌 Feign 客户端形成对比(见 sc-feign)。
透明拦截怎么做到
在 Linux 节点上,Istio 常用 init 容器 配置 iptables:
- 出站:app 发往
course-service:8080的包 → 先经 Sidecar 15001 - 入站:到达 Pod IP 的流量 → 经 Sidecar 再转给 app
因此 服务发现地址 仍可以是 K8s DNS 名 course-service.default.svc.cluster.local,Sidecar 负责选具体 Endpoint、负载均衡、重试。
Envoy 做什么
Envoy 是 CNCF 毕业项目,Istio 默认数据面。核心能力:
| 能力 | 说明 |
|---|---|
| L7 路由 | 按 Header、路径、权重分流 |
| 负载均衡 | round-robin、least-request 等 |
| TLS | 终止或发起 mTLS |
| 可观测 | 访问日志、Prometheus 指标、trace 头传播 |
| 扩展 | WASM / Lua 过滤器(进阶) |
控制面(Istiod)把 xDS API 配置推给 Envoy,Sidecar 热更新,无需重启 app。
Sidecar 的成本
- 资源:每 Pod 多一个容器,CPU/内存要留配额
- 延迟:多一跳本地转发,通常亚毫秒级,但需压测验证
- 调试:问题可能在 app、Sidecar 或策略三者之间,需会看
istioctl proxy-config
与 obs-instrumentation 对照:Sidecar 提供 思路,但 Pod 密度高时要算总账。