欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

服务网格 Istio 与 Envoy 数据平面通信全流程

发表于:|最后更新:|分类:云原生与微服务|阅读:1284 次

服务网格(Service Mesh)的核心目标是将微服务治理中的非功能性需求(如熔断、限流、灰度发布、mTLS 加密、服务发现)从应用业务代码中彻底解耦,下沉至基础设施层。Istio 采用经典的控制平面(Istiod)与数据平面(Sidecar Envoy)分离架构。在一个启用了自动注入的 Kubernetes Pod 中,Envoy 容器与业务容器共享同一个 Network Namespace。整个流量劫持与处理链路如下:流量劫持(iptables PREROUTING):Pod 启动时,由 istio-init 初始容器执行 iptables 脚本,设置网络规则。所有进出该 Pod 的 TCP 流量被强制重定向(Redirect)到本地的 15006(入站)与 15001(出站)端口,业务容器对此毫秒无感知。Envoy 协议解析与治理:Envoy 在用户态监听上述端口。根据从 Istiod 动态同步过来的 xDS 配置(LDS 监听器发现、RDS 路由发现、CDS 集群发现、EDS 端点发现),执行加解密、超时重试、熔断器状态判定。mTLS 双向认证:跨节点的 Envoy 实例之间默认开启 mTLS 通信。双方借助 SPIFFE ID 验证对端身份,完成端到端的对称加密传输。数据平面的高性能依赖于 Envoy 的纯 C++ 异步事件模型与热重启机制,使得网格代理引入的平均 P99 延迟损耗降至微秒至数毫秒之内。