服务网格用控制面配置数据面的服务通信
说明数据面代理、控制面调和、工作负载身份、流量治理和渐进采用,并分析策略叠加与故障范围。
服务网格用控制面配置数据面的服务通信
服务网格把服务间通信能力从业务进程中抽离,由数据面代理处理连接、路由、身份验证和遥测,由控制面把期望配置分发给代理。它能统一跨语言服务的网络策略,却也增加新的配置层、运行开销和故障域。是否采用应由多服务通信治理问题驱动,而不是把代理数量当作架构成熟度。
控制面和数据面的分离是逻辑职责划分。具体实现可以是每个工作负载的边车、节点级代理或专用网关;这些模式对资源隔离、流量路径和故障影响不同。
数据面直接处理请求流量
数据面位于服务通信路径,负责服务发现结果的使用、负载均衡、连接池、超时、重试、熔断、TLS 和指标生成。它必须在控制面暂时不可用时继续使用最后已知配置,否则控制面故障会立即中断所有业务流量。
代理只看到网络协议和可解析的应用层信息,无法理解全部业务语义。它可以按 HTTP 路径或身份路由,却不能判断一次支付是否可安全重试。重试、超时和流量镜像等策略必须与应用幂等性、截止期限和数据敏感性协调。
Istio 的架构文档把网格逻辑上分为数据面与控制面,并说明代理和 Istiod 的职责:https://istio.io/latest/docs/ops/deployment/architecture/ 。实现版本会演进,资源消耗、支持协议和部署模式应按实际版本验证。
控制面把高层策略编译为代理配置
控制面观察服务注册、路由规则、安全策略和工作负载身份,再生成代理可消费的配置。配置分发是持续调和过程,不是单次文件复制。控制面要处理代理连接、增量更新、版本确认和不兼容配置,并提供某个代理实际收到什么配置的诊断能力。
配置正确性比配置送达更重要。一个语法有效但选择器过宽的授权策略,可能同时影响大量服务。发布前应执行 schema 校验、引用检查、冲突分析和目标范围预览,再按命名空间、工作负载或流量比例分阶段生效。
控制面通常还承担证书签发或协调身份材料。它属于高权限基础设施,应限制管理访问、保护根信任、审计策略变化并隔离租户。控制面高可用只能减少组件宕机,不能防止错误配置被高可用地分发到全网格。
服务身份与传输加密不能代替授权
网格可基于工作负载身份建立双向 TLS,使连接双方认证并加密传输。身份应绑定到工作负载和服务账户,而非易变 IP。证书轮换、时钟偏差、信任域迁移和跨集群身份映射都需要监控。
认证确认调用者是谁,授权决定其能访问什么。NIST 零信任架构强调围绕资源做显式认证与授权,而不是因网络位置默认信任:https://csrc.nist.gov/pubs/sp/800/207/final 。网格策略可执行服务级或请求级授权,但数据行权限、业务角色和用户委托仍可能需要应用判断。
启用 mTLS 后还要验证所有预期流量确实经过数据面。旁路地址、主机网络、未纳管命名空间和直接外部连接可能绕开策略。策略状态应通过实际握手、拒绝测试和流量观测确认,而不是只看控制面对象存在。
流量治理要避免策略叠加失控
服务网格常提供超时、重试、断路、故障注入、金丝雀路由和地域优先。若应用、客户端库、网关和网格分别配置重试,一次请求可能呈乘法放大。应建立端到端截止期限和统一重试预算,明确每层的责任。
金丝雀发布需要稳定的子集标识和足够样本。按比例分流不能保证每个用户会话一致,也不能自动隔离数据库 schema 或消息兼容问题。回滚路由前应确认旧版本仍能读取新版本已写入的数据。
遥测由代理统一采集可提高可见性,但代理指标只反映其经过的流量。采样、标签基数和跨代理时钟会影响成本与解释。网络错误、应用错误和业务拒绝应分开标记,否则统一状态码会掩盖真实故障位置。
引入过程从可观测性开始
可先把少量非关键服务纳入网格,只启用被动遥测,建立延迟和资源基线;再启用宽松 mTLS、显式授权和高级路由。每一步都应有旁路和回滚方案,并验证控制面故障、代理重启、证书过期与错误配置。
容量测试要测量代理带来的 CPU、内存、连接数和尾延迟,覆盖长连接、大报文和高并发。升级应考虑控制面、数据面和配置 API 的版本兼容,避免一次替换全部代理。
服务网格最适合解决跨团队、跨语言且重复出现的通信治理问题。服务数量少、团队边界简单或调试能力不足时,网关和应用库可能更容易运维。可靠网格的标志是策略范围、实际流量路径和故障行为都可解释,而不是所有通信都多经过一层代理。
资料依据
- Istio Project:Architecture,https://istio.io/latest/docs/ops/deployment/architecture/
- NIST:Zero Trust Architecture,https://csrc.nist.gov/pubs/sp/800/207/final