4. 服务网格基础回顾:Istio/Envoy 核心概念、流量管理、可观测性、安全

服务网格(Service Mesh)是云原生微服务架构中处理服务间通信的基础设施层。Istio 是目前最主流的服务网格实现,其数据平面由 Envoy 代理构成,控制平面负责策略下发与配置管理。本章回顾 Istio/Envoy 的核心概念、流量管理、可观测性与安全机制,为后续 Helm 与 CI/CD 集成奠定基础。

4.1 Istio 整体架构与核心组件

Istio 架构分为数据平面和控制平面两部分。数据平面由注入到每个 Pod 中的 Envoy 代理组成,拦截并处理所有进出容器的流量;控制平面负责统一管理代理配置、安全策略与遥测数据。

核心组件清单:
  • Envoy Proxy — 数据平面代理,处理 L4/L7 流量、负载均衡、熔断、重试、TLS 终止。
  • Pilot (istiod) — 流量管理组件,将 VirtualService/DestinationRule 转换为 Envoy 配置并下发。
  • Citadel (istiod) — 安全组件,管理证书签发、身份认证与 mTLS。
  • Galley (istiod) — 配置验证与分发组件(已合并至 istiod)。
  • Mixer (已弃用) — 旧版策略与遥测组件,功能已迁移至 Envoy 扩展。
Istio 架构总览 控制平面 (istiod) Pilot (流量管理) VirtualService → Envoy Citadel (安全) mTLS / 证书签发 Galley (配置验证) 配置校验与分发 数据平面 (Envoy Proxy) Pod A App Container Envoy Proxy sidecar 注入,拦截所有流量 Pod B App Container Envoy Proxy sidecar 注入,拦截所有流量 mTLS 加密 xDS 配置下发 证书分发 配置校验

4.2 Envoy 核心概念

Envoy 是 Istio 数据平面的基础组件,以 sidecar 模式与每个微服务实例一同运行。Envoy 使用 xDS API 从控制平面动态获取配置,支持热更新。

概念 说明 对应 xDS
Listener 监听端口,接收入站/出站流量 LDS (Listener Discovery Service)
Cluster 定义一组上游端点(服务实例) CDS (Cluster Discovery Service)
Route 将请求按规则匹配到指定 Cluster RDS (Route Discovery Service)
Endpoint 具体的 IP:Port 实例 EDS (Endpoint Discovery Service)
Filter L3/L4/L7 过滤器链,实现流量处理逻辑 内置于 Listener
关键理解:Envoy 的 xDS 机制使得服务网格可以动态调整路由、负载均衡策略、熔断阈值等,无需重启 Pod。这是实现灰度发布、流量镜像等高级场景的基础。

4.3 流量管理核心资源

Istio 通过 VirtualService 和 DestinationRule 两个 CRD 实现精细化的流量控制。VirtualService 定义路由规则,DestinationRule 定义目标子集与负载均衡策略。

4.3.1 VirtualService 示例

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: reviews-vs
spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
        end-user:
          exact: jason
    route:
    - destination:
        host: reviews
        subset: v2
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 80
    - destination:
        host: reviews
        subset: v3
      weight: 20

4.3.2 DestinationRule 示例

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: reviews-dr
spec:
  host: reviews
  trafficPolicy:
    loadBalancer:
      simple: ROUND_ROBIN
    connectionPool:
      tcp:
        maxConnections: 100
      http:
        http1MaxPendingRequests: 10
        maxRequestsPerConnection: 10
    outlierDetection:
      consecutive5xxErrors: 5
      interval: 30s
      baseEjectionTime: 60s
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3
流量管理能力矩阵:
  • 请求路由 — 按 header、URI、权重分发流量
  • 故障注入 — 注入延迟或中断,测试系统韧性
  • 流量镜像 — 将请求复制到影子服务,用于测试
  • 超时与重试 — 设置请求超时时间与重试次数
  • 熔断 — 基于异常检测自动隔离故障实例
  • 负载均衡 — 支持 ROUND_ROBIN、LEAST_REQUEST、RING_HASH 等
Istio 流量管理流程 Ingress Gateway VirtualService DestinationRule Subset v1 Subset v2 Subset v3 流量规则 header 匹配 权重分流 超时/重试 熔断 负载均衡 连接池 异常检测

4.4 可观测性:遥测与监控

Istio 内置了强大的可观测性能力,基于 Envoy 生成的遥测数据,提供指标(Metrics)、日志(Logs)、链路追踪(Tracing)三大支柱。

维度 数据来源 典型工具 关键指标
Metrics Envoy 标准指标 + Istio 自定义指标 Prometheus + Grafana 请求速率、延迟 P50/P95/P99、错误率
Logs Envoy 访问日志(Access Log) Loki / Elasticsearch 请求来源、目标、状态码、响应时间
Tracing Envoy 生成 span,传播 trace context Jaeger / Zipkin 调用链拓扑、服务依赖、耗时分布
生产建议:在 CI/CD 流水线中集成可观测性验证步骤,例如:部署后自动检查新版本的 P99 延迟是否超过基线,错误率是否低于阈值。这可以通过 Prometheus API 查询实现。

4.5 安全机制:mTLS 与授权策略

Istio 安全模型基于零信任原则,默认启用双向 TLS(mTLS)加密服务间通信,并通过 AuthorizationPolicy 实现细粒度访问控制。

4.5.1 双向 TLS (mTLS)

Istio 自动为每个 Envoy 代理签发 SPIFFE 格式的身份证书,服务间通信默认使用 mTLS 加密。可以通过 PeerAuthentication 资源控制 mTLS 模式:

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: default
  namespace: istio-system
spec:
  mtls:
    mode: STRICT  # STRICT | PERMISSIVE | DISABLE

4.5.2 授权策略 (AuthorizationPolicy)

基于 RBAC 模型,支持来源(principals)、命名空间、IP 块、JWT 等条件:

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: reviews-policy
  namespace: default
spec:
  selector:
    matchLabels:
      app: reviews
  action: ALLOW
  rules:
  - from:
    - source:
        principals: ["cluster.local/ns/default/sa/productpage"]
    to:
    - operation:
        methods: ["GET"]
        paths: ["/reviews/*"]
安全注意事项:
  • mTLS 仅加密传输层,不替代应用层认证(如 JWT)。
  • AuthorizationPolicy 默认拒绝所有流量(DENY-ALL),需显式配置 ALLOW 规则。
  • 在 CI/CD 中,安全策略应作为 Helm values 的一部分,随应用版本一起发布。
Istio 安全架构 SPIFFE 身份 证书自动签发与轮换 mTLS 加密 STRICT / PERMISSIVE AuthorizationPolicy ALLOW / DENY / CUSTOM 安全策略生效流程 1. Citadel 为每个 Envoy 签发 SPIFFE 证书 2. 服务间通信使用 mTLS 加密传输 3. Envoy 根据 AuthorizationPolicy 执行访问控制 4. 所有策略变更通过 istiod 动态下发

4.6 本章小结

服务网格为微服务提供了统一的流量管理、可观测性与安全基础设施。Istio 通过 Envoy 代理实现数据平面,控制平面负责配置下发与策略管理。掌握 VirtualService、DestinationRule、mTLS 与 AuthorizationPolicy 等核心资源,是后续在 Helm 中封装服务网格配置、在 CI/CD 流水线中实现灰度发布与安全策略自动化的前提。