1. 服务网格安全概述

1.1 零信任架构:从边界防御到身份信任

传统安全模型依赖边界防御——防火墙内的服务默认可信。但在微服务和多云环境下,边界已模糊。零信任架构(Zero Trust Architecture, ZTA)的核心原则是:永不信任,始终验证。

零信任三大核心原则:
  • 显式验证:所有请求必须基于身份、上下文和策略进行认证与授权。
  • 最小权限:仅授予完成工作所需的最小访问权限。
  • 假设受损:假设网络已被入侵,所有流量必须加密和认证。

服务网格是实现零信任的基础设施层最佳载体。它通过 Sidecar 代理拦截所有进出流量,将安全决策从应用代码下沉到平台层,实现透明、可观测、可审计的零信任执行。

零信任架构 vs 传统边界安全模型 传统边界安全模型 内部服务 A 内部服务 B 外部客户端 外部客户端 防火墙 零信任安全模型 微服务 A 微服务 B 外部请求 外部请求 策略引擎 零信任:每个请求都需经过身份验证和授权,无论来源是内部还是外部

1.2 mTLS 在服务网格中的角色

mTLS(双向传输层安全协议)是零信任架构的通信基石。与单向 TLS 不同,mTLS 要求客户端和服务端互相出示证书,实现双向身份认证。

维度 单向 TLS 双向 TLS (mTLS)
认证方向 客户端验证服务端 客户端与服务端互相验证
证书要求 仅服务端需要证书 双方都需要证书
身份粒度 域名/主机级别 服务/工作负载级别
网格适用性 仅加密,无身份绑定 加密 + 身份认证,适合零信任
mTLS 在服务网格中的关键价值:
  • 身份认证:每个工作负载拥有 SPIFFE 标准身份,通过 X.509 证书验证。
  • 传输加密:所有东西向流量自动加密,防止中间人攻击。
  • 策略执行:认证后的身份可用于细粒度访问控制(RBAC/ABAC)。
  • 可观测性:证书身份可关联到遥测数据,实现安全审计。
mTLS 在服务网格中的通信流程 客户端 Sidecar SPIFFE 身份: cluster.local/ns/default/sa/client 服务端 Sidecar SPIFFE 身份: cluster.local/ns/default/sa/server mTLS 握手过程 ① Client Hello + 客户端证书 ② Server Hello + 服务端证书 ③ 证书验证 + 密钥协商 ④ 加密通信建立 证书 & 密钥存储 (K8s Secret / SDS) 证书 & 密钥存储 (K8s Secret / SDS)

1.3 Istio 安全模型总览

Istio 的安全模型围绕身份、通信安全、策略执行三大支柱构建,提供从证书管理到访问控制的完整安全体系。

安全支柱 核心组件 关键能力
身份 istiod (CA)、SDS SPIFFE 身份颁发、X.509 证书签发、自动轮换
通信安全 Envoy Proxy、mTLS 自动 mTLS、PERMISSIVE/MODE 模式、证书验证
策略执行 AuthorizationPolicy 基于身份的 RBAC、条件访问控制、审计日志
关键设计原则:Istio 将安全决策从应用代码中解耦,通过 Sidecar 代理透明执行。这意味着应用开发者无需修改代码即可获得 mTLS 加密和身份认证能力,但运维人员必须正确管理证书生命周期和策略配置。
Istio 安全模型架构总览 控制平面 — istiod CA (证书颁发) 策略引擎 数据平面 — Envoy Sidecar 代理 mTLS 握手 & 加密 证书验证 & 身份提取 策略执行 & 审计 工作负载 — 应用容器 istiod 负责证书签发与策略下发,Envoy 负责执行 mTLS 和访问控制,应用无感知

1.4 核心安全组件:Citadel 与 SDS

Istio 的安全体系依赖两个关键组件:

  • Citadel (istiod CA):负责管理证书颁发机构(CA),为每个工作负载签发 SPIFFE 标准的 X.509 证书。支持自签名 CA、集成外部 CA(如 cert-manager、Vault)。
  • SDS (Secret Discovery Service):通过 Envoy 的 SDS API 动态分发证书和密钥,避免将私钥写入 Pod 文件系统,支持证书热更新。
SDS 相比传统挂载 Secret 的优势:
  • 动态更新:证书轮换无需重启 Pod,Envoy 自动加载新证书。
  • 安全增强:私钥不落盘,减少泄露风险。
  • 生命周期管理:支持证书过期前自动轮换,避免服务中断。