这是《Docker 与 Kubernetes 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 服务网格把重试、超时、熔断、TLS、鉴权、流量拆分和遥测下沉到基础设施层,常见形态是 sidecar 代理或透明节点代理。
29.1 架构
App Pod
App container
Sidecar proxy
控制面:
Policy / configuration -> proxy
29.2 能力
| 能力 | 说明 |
|---|---|
| mTLS | 服务间加密 |
| 重试 | 网络层重试 |
| 超时 | 请求级控制 |
| 熔断 | 故障隔离 |
| 流量切分 | 金丝雀发布 |
| 遥测 | 统一指标和追踪 |
| 授权 | 服务访问控制 |
29.3 代价
- sidecar 资源;
- 延迟;
- 运维复杂度;
- 排障链路变长;
- 应用仍需处理业务幂等;
- 升级风险。
不是所有团队都需要服务网格。中小系统可以先在 SDK、网关和 Kubernetes 原生对象中实现关键能力。
29.4 流量切分
VirtualService 示例:
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: order-service
spec:
hosts:
- order-service
http:
- route:
- destination:
host: order-service
subset: stable
weight: 90
- destination:
host: order-service
subset: canary
weight: 10
29.5 可观测性
网格可以统一输出:
- 请求 QPS;
- 错误率;
- 延迟分布; 4.上下游关系;
- 连接错误;
- 重试次数。
业务语义错误仍需应用日志和业务指标判断。
本章小结
服务网格适合多语言、多团队、统一流量治理和安全策略的规模场景。引入前要评估延迟、资源、运维和排障成本。
思考题
- sidecar 模式的优点和代价是什么?
- mTLS 解决什么问题?
- 网络重试为什么要求业务幂等?
- 流量切分如何支持金丝雀?
- 什么时候不引入服务网格?