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 扩展。
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 |
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 等
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 | 调用链拓扑、服务依赖、耗时分布 |
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 的一部分,随应用版本一起发布。
4.6 本章小结
服务网格为微服务提供了统一的流量管理、可观测性与安全基础设施。Istio 通过 Envoy 代理实现数据平面,控制平面负责配置下发与策略管理。掌握 VirtualService、DestinationRule、mTLS 与 AuthorizationPolicy 等核心资源,是后续在 Helm 中封装服务网格配置、在 CI/CD 流水线中实现灰度发布与安全策略自动化的前提。