1. 服务网格概述
1.1 什么是服务网格
服务网格(Service Mesh)是云原生架构中用于处理服务间通信的基础设施层。它将微服务之间的流量管理、安全策略和可观测性能力从业务代码中剥离,下沉到透明的代理层,使开发者无需在应用代码中重复实现熔断、重试、认证等逻辑。
核心思想:将网络通信的复杂性从业务容器中移出,交给独立的代理进程处理,实现“通信与业务分离”。
1.2 服务网格的架构:数据平面与控制平面
服务网格采用经典的两平面架构,下表对比了二者的职责与组件:
| 平面 | 职责 | 典型组件 | 通信方式 |
|---|---|---|---|
| 数据平面 | 拦截并处理所有进出服务的网络流量;执行路由、负载均衡、健康检查、mTLS 加解密 | Envoy、Linkerd-proxy、MOSN | Sidecar 模式,与应用容器同 Pod 部署 |
| 控制平面 | 下发配置、管理证书、聚合遥测数据;定义流量规则和安全策略 | Istiod、Consul Server、Linkerd Controller | 通过 xDS 协议与数据平面通信 |
下图展示了服务网格的典型架构,其中数据平面以 Sidecar 模式注入每个服务 Pod,控制平面统一管理全局策略:
关键理解:Sidecar 代理对应用容器完全透明。App A 发送请求时,流量先经过本 Pod 的 Sidecar,再由 Sidecar 加密转发至目标 Pod 的 Sidecar,最后到达 App B。应用代码无需感知网络细节。
1.3 服务网格的核心价值
服务网格在云原生实践中提供三大核心价值,它们共同构成了流量拓扑安全实践的基础:
- 可观测性(Observability) — 自动采集服务间调用的延迟、错误率、流量拓扑图,无需埋点。数据平面为每条请求生成分布式追踪和指标,控制平面聚合展示。
- 流量管理(Traffic Management) — 支持灰度发布、蓝绿部署、金丝雀发布、超时重试、熔断限流。策略在控制平面定义,数据平面无感执行。
- 安全(Security) — 提供传输中的 mTLS 双向认证、证书自动轮换、细粒度访问控制(RBAC/ABAC)、请求级鉴权。安全策略与业务代码解耦,统一由网格管控。
下表从传统微服务与引入服务网格两个维度对比核心能力的实现方式:
| 能力维度 | 传统微服务实现 | 服务网格实现 |
|---|---|---|
| mTLS 双向认证 | 应用代码集成证书库,手动管理证书轮换 | Sidecar 自动协商证书,控制平面自动轮换 |
| 流量路由 | 依赖服务发现 SDK 和负载均衡库 | 控制平面下发路由规则,Sidecar 执行 |
| 调用链追踪 | 手动埋点,侵入性强 | Sidecar 自动生成 span,零代码接入 |
| 故障注入 | 需修改代码或部署特殊版本 | 控制平面配置故障规则,Sidecar 即时生效 |
注意:服务网格并非银弹。在引入网格前,请评估团队对 Envoy/xDS 协议的理解程度,以及网格带来的额外资源开销(每个 Pod 多一个 Sidecar 容器)。对于小规模或简单拓扑,传统 SDK 方案可能更轻量。
1.4 为什么服务网格对安全至关重要
在微服务架构中,东西向流量(服务间通信)占总流量的 80% 以上。传统边界防火墙无法感知 Pod 级别的动态 IP 变化,而服务网格通过以下机制填补了安全空白:
- 身份与信任:每个 Sidecar 持有由控制平面签发的 SPIFFE 身份证书,实现服务间强身份认证。
- 传输加密:默认启用 mTLS,所有服务间流量自动加密,防止中间人攻击。
- 动态策略:证书轮换、访问控制策略可在不重启服务的情况下热更新。
- 审计与合规:数据平面记录每一次加密握手和授权决策,满足 SOC2、PCI-DSS 等合规要求。