2. Istio基础架构:控制平面与数据平面、Envoy代理原理、Pilot/Mixer/Citadel组件功能、Istio部署模式
2.1 控制平面与数据平面:服务网格的两层架构
Istio 采用经典的控制平面/数据平面分离架构,这是实现流量管理、安全策略与可观测性的基础。数据平面负责处理业务流量,控制平面负责下发配置与策略。
| 维度 | 数据平面 (Data Plane) | 控制平面 (Control Plane) |
|---|---|---|
| 组成 | Envoy 代理(Sidecar 或 Gateway) | Pilot、Mixer(已弃用,功能并入 Envoy)、Citadel(现为 istiod) |
| 职责 | 拦截并处理所有进出 Pod 的流量,执行路由、负载均衡、认证、鉴权、遥测 | 统一管理配置下发、服务发现、证书签发、策略分发 |
| 通信方式 | 通过 xDS 协议从控制平面拉取动态配置 | 通过 Kubernetes API Watch 机制监听资源变化,生成 Envoy 配置 |
| 故障影响 | 数据平面中断直接影响业务流量 | 控制平面短暂中断不影响已有连接,但新服务注册、策略变更会延迟 |
架构要点:控制平面不参与业务数据路径,只负责下发配置。即使控制平面短暂不可用,已建立的连接和已下发的路由规则仍能正常工作,这是服务网格高可用设计的关键。
2.2 Envoy代理原理:高性能数据平面核心
Envoy 是 Istio 数据平面的核心组件,以 Sidecar 模式注入到每个 Pod 中。它基于 C++ 开发,具备极高的吞吐能力和低延迟特性。
2.2.1 Envoy 核心工作机制
- L4/L7 代理:支持 TCP、HTTP/1.1、HTTP/2、gRPC 协议,可做透明代理或显式代理。
- 动态配置(xDS):通过 LDS(监听器发现)、RDS(路由发现)、CDS(集群发现)、EDS(端点发现)等 API 从控制平面拉取配置。
- 过滤器链(Filter Chain):每个监听器可串联多个过滤器,实现流量劫持、RBAC、限流、故障注入等功能。
- mTLS 终结:自动处理双向 TLS 握手、证书轮换,业务容器无需感知加密过程。
性能指标参考:Envoy 单核可处理 10 万+ HTTP 请求/秒(QPS),延迟增加通常在 1-3ms 以内,远低于业务代码自行实现安全通信的代价。
2.2.2 Envoy 流量劫持流程
- iptables 规则注入:Init 容器在 Pod 启动时设置 iptables 规则,将入站和出站流量重定向到 Envoy 的端口(默认 15001)。
- 入站拦截:发往 Pod IP 的请求被重定向到 Envoy 入站监听器,Envoy 根据过滤器链执行鉴权、路由后转发给业务容器。
- 出站拦截:业务容器发出的请求被重定向到 Envoy 出站监听器,Envoy 执行服务发现、负载均衡、mTLS 加密后发送到目标。
- 遥测数据上报:Envoy 在请求处理过程中生成访问日志、指标和链路追踪数据,通过 Mixer 或直接上报到后端。
2.3 Pilot / Mixer / Citadel 组件功能(istiod 统一时代)
在 Istio 1.5 之前,控制平面由 Pilot、Mixer、Citadel、Galley 四个独立组件构成。1.5 版本之后,这些组件合并为单一的 istiod 进程,但核心功能逻辑保持不变。
| 组件 | 合并前职责 | 合并后(istiod)对应功能 | 关键协议/接口 |
|---|---|---|---|
| Pilot | 服务发现、流量管理配置下发 | istiod 中的 Pilot 模块:监听 K8s Service/Endpoint,生成 Envoy 路由和集群配置 | xDS (LDS/RDS/CDS/EDS) |
| Mixer | 遥测收集、访问控制、配额管理 | 功能已内嵌到 Envoy 的 Wasm 扩展和 Telemetry API 中,不再需要独立组件 | Check/Report (已废弃) |
| Citadel | 证书签发、密钥管理、mTLS 身份认证 | istiod 中的 CA 模块:自动签发 SPIFFE 证书,支持证书轮换和 CSR API | SPIFFE / Kubernetes CSR |
| Galley | 配置验证、分发、格式转换 | istiod 中的配置验证 Webhook 和 Mesh Config 管理 | K8s Admission Webhook |
迁移注意:如果从 Istio 1.4 及更早版本升级,需要将 Mixer 策略迁移到 Envoy 原生扩展或 Wasm 插件。Mixer 的 Check API 在 1.8 版本中完全移除,不再支持。
2.3.1 Pilot 核心能力
- 服务注册表抽象:将 Kubernetes Service、Consul、Eureka 等不同注册中心统一为抽象服务模型。
- 配置转换:将 VirtualService、DestinationRule 等 CRD 转换为 Envoy 可识别的 xDS 配置。
- 端点发现:实时跟踪 Pod 的 Ready 状态,剔除不健康的端点,支持金丝雀发布和灰度路由。
2.3.2 Citadel 安全能力
- SPIFFE 身份:为每个工作负载签发符合 SPIFFE 标准的 X.509 证书,格式为
spiffe://cluster.local/ns/<namespace>/sa/<service-account>。 - 自动证书轮换:证书默认有效期 24 小时,Envoy 通过 SDS(Secret Discovery Service)自动拉取新证书,无需重启。
- mTLS 策略:支持 PERMISSIVE(兼容模式)和 STRICT(强制 mTLS)两种模式,逐步迁移。
2.4 Istio部署模式:生产环境选型指南
Istio 支持多种部署模式,不同模式适用于不同的集群规模和运维要求。
| 部署模式 | 适用场景 | 控制平面数量 | 跨集群通信 | 运维复杂度 |
|---|---|---|---|---|
| 单集群单控制平面 | 开发/测试环境、中小规模生产 | 1 | 不支持 | 低 |
| 多集群主-远程 | 多可用区容灾、跨地域部署 | 1 主 + N 远程 | 通过东西向网关 | 中 |
| 多集群多主 | 高可用、独立运维单元 | 每个集群 1 个 | 通过东西向网关 | 高 |
| 外部控制平面 | 数据平面与控制平面分离管理 | 1(外部集群) | 需网络互通 | 高 |
2.4.1 单集群部署(最常用)
在单个 Kubernetes 集群中部署一个 istiod 实例,管理该集群内所有 Envoy Sidecar。适用于大多数中小规模生产环境。
# 使用 istioctl 安装默认配置
istioctl install --set profile=default -y
# 验证控制平面 Pod
kubectl get pods -n istio-system
# 输出示例:
# istiod-5f8d6c9b7c-abcde 1/1 Running 0 2m
2.4.2 多集群主-远程模式
一个主集群运行控制平面,远程集群只运行数据平面。远程集群的 Envoy 通过东西向网关连接到主集群的 istiod 获取配置。
生产建议:主-远程模式适合跨地域部署,主集群部署在中心机房,远程集群部署在边缘节点。需要确保主集群与远程集群之间的网络延迟低于 50ms,否则配置下发可能超时。
2.4.3 多集群多主模式
每个集群都部署独立的 istiod,通过东西向网关暴露服务。服务发现通过 ServiceEntry 和 WorkloadEntry 实现跨集群路由。
# 在每个集群中安装 istiod,并配置东西向网关
istioctl install --set profile=default \
--set values.global.meshID=mesh1 \
--set values.global.multiCluster.clusterName=cluster-a
# 暴露服务到其他集群
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: cross-cluster-service
spec:
hosts:
- service-b.ns-b.svc.cluster.local
location: MESH_INTERNAL
ports:
- number: 8080
name: http
protocol: HTTP
resolution: DNS
endpoints:
- address: 10.0.1.5 # 远程集群 Pod IP
labels:
cluster: cluster-b
EOF
2.4.4 部署模式选择决策树
- 单集群且规模 < 500 节点 → 单集群默认部署,profile=default。
- 多可用区容灾,网络延迟 < 10ms → 多集群多主模式,每个可用区独立控制平面。
- 跨地域部署,网络延迟 10-50ms → 主-远程模式,中心化控制平面。
- 安全合规要求控制平面与数据平面隔离 → 外部控制平面模式,控制平面部署在独立集群。
多租户签名链路场景适配:在多租户环境中,推荐使用多集群多主模式,每个租户集群拥有独立的控制平面,实现租户间控制平面隔离。数据平面通过东西向网关进行跨集群签名链路通信,确保签名密钥和证书不跨租户边界。