Service Mesh 是一个用于实现 Istio 和 Linkerd 服务网格的技能,帮助管理微服务之间的通信。其核心目标是通过 mTLS、流量整形、可观测性和策略执行,实现服务到服务的通信管理。
用途
该技能适用于以下场景:使用自动 mTLS 保护微服务通信;实现金丝雀部署、流量拆分或 A/B 测试;在不修改应用代码的情况下添加熔断、重试和超时;获得服务级可观测性(延迟、错误率、请求量);在服务之间执行授权策略。
主要能力
- Istio 安装与 Sidecar 注入:通过 istioctl 安装(default 或 demo profile),为命名空间启用自动 Sidecar 注入,并安装 Kiali、Prometheus、Grafana、Jaeger 等可观测性插件。
- 流量管理:使用 VirtualService 定义路由规则(基于请求头的路由、按百分比的流量拆分、超时与重试),使用 DestinationRule 定义子集与连接策略(连接池、异常检测),使用 Gateway 暴露外部流量。
- mTLS 配置:通过 PeerAuthentication 设置集群级严格 mTLS 或按命名空间的宽松 mTLS,并提供验证 mTLS 状态的方法。
- 授权策略:通过 AuthorizationPolicy 实现仅允许特定服务调用 API,以及拒绝其他流量。
- 熔断:通过 DestinationRule 的 connectionPool 和 outlierDetection 配置熔断。
- Linkerd 安装与流量拆分:安装 Linkerd CLI、CRD 和控制平面,注入 Sidecar,使用 SMI TrafficSplit 进行流量拆分,并通过 linkerd viz 查看实时流量仪表盘。
- 调试与故障排查:提供 Istio 的 proxy-config、analyze、日志调试命令,以及 Linkerd 的 viz stat、top、edges 命令,并附有常见症状、原因与修复的排查表。
使用方式
使用前需满足以下前提:Kubernetes 集群(1.26+)并配置 kubectl;安装 Helm 3(部分安装方式需要);集群资源充足(Istio 控制平面约需 2 GB RAM);Istio 需安装 istioctl CLI,Linkerd 需安装 linkerd CLI。资料中提供了安装命令、YAML 配置示例和调试命令,可直接参考使用。
适用场景
适用于微服务架构中需要统一管理服务间通信、安全、流量和可观测性的团队,尤其是使用 Kubernetes 并希望在不改动应用代码的前提下增强服务治理能力的场景。
限制
- 版本兼容性需以官方 Kubernetes 兼容矩阵为准,资料中的 1.26+ 和内存估算不构成充分的兼容性或容量保证。
- CRD 和示例插件必须与所固定的发布版本匹配。
- 旧的 authn tls-check 和 SMI TrafficSplit 示例是版本特定的,可能不可用,需检查 CLI 帮助或已安装扩展。
- 严格 mTLS 需要已注册的工作负载并分阶段验证;重试要求操作幂等,以避免重复效果。
- 不要通过削弱 mTLS 或提高熔断限制来解决 503 错误,而应先定位原因并批准变更。
- 示例仪表盘并非生产加固部署。
- 基础设施命令可能中断服务:在变更状态前确认目标主机/范围,并准备备份或快照。
- 该技能为仅文档导入,上游脚本和模板未捆绑。