3. 核心资源模型总览

云原生网关的流量治理能力建立在五个核心资源模型之上:Gateway、VirtualService、DestinationRule、ServiceEntry 和 WorkloadEntry。这五个资源共同构成了从“入口监听”到“后端负载均衡”的完整控制链。理解它们之间的依赖关系和职责边界,是掌握网关测试验证的前提。

核心认知: 这五个资源并非孤立存在,而是通过 spec 字段中的引用关系串联成一条“流量管道”。测试验证的本质,就是验证这条管道在每个环节的配置正确性与行为一致性。

3.1 资源职责与关系矩阵

下表从职责、核心字段、依赖关系三个维度,对五个资源进行横向对比:

资源名称 核心职责 关键字段 依赖/被依赖
Gateway 定义入口监听端口、协议、证书 servers, selector 被 VirtualService 绑定
VirtualService 定义路由规则、流量分发策略 hosts, http, tcp, gateways 依赖 Gateway;引用 DestinationRule
DestinationRule 定义负载均衡、连接池、熔断策略 host, trafficPolicy, subsets 被 VirtualService 引用
ServiceEntry 将外部服务注册到网格内 hosts, ports, resolution 被 VirtualService/DestinationRule 引用
WorkloadEntry 手动注册单个工作负载实例 address, ports, labels 被 ServiceEntry 引用
测试关注点: 依赖关系是测试用例设计的核心线索。例如,修改 Gateway 的端口监听后,必须验证绑定的 VirtualService 是否仍能正确匹配;修改 DestinationRule 的 subsets 后,必须验证 VirtualService 中的路由权重是否仍指向有效的子集。

3.2 资源协作流程:从入口到后端

下图展示了五个资源在一条完整请求链路中的协作顺序:

资源协作流程:从入口到后端 Gateway 监听端口/协议/TLS VirtualService 路由匹配/权重分发 DestinationRule 负载均衡/熔断/子集 ServiceEntry 外部服务注册 WorkloadEntry 手动实例注册 流程说明 1. 请求到达 Gateway 监听的端口,Gateway 完成 TLS 终止(如有)。 2. VirtualService 根据 hosts、path、header 等规则匹配,决定流量去向。 3. VirtualService 引用 DestinationRule,获取负载均衡策略和子集定义。 4. 若目标为外部服务,VirtualService 或 DestinationRule 引用 ServiceEntry。 5. ServiceEntry 可引用 WorkloadEntry 手动指定后端实例地址。
常见误区: 很多初学者认为 VirtualService 直接指向 Service,实际上 VirtualService 通过 destination.host 引用的是 DestinationRule 或 ServiceEntry 中定义的 host,而非 Kubernetes Service 名称。这一间接引用关系是测试配置正确性的关键检查点。

3.3 资源模型分层架构

从架构分层角度看,五个资源可以归入三个逻辑层:

  • 接入层(Gateway):负责协议适配、端口暴露、证书管理。它是网格的“大门”,所有外部流量必须经过此处。
  • 路由层(VirtualService):负责流量匹配、路由分发、重试、超时、故障注入。它是网格的“交通指挥中心”。
  • 策略层(DestinationRule + ServiceEntry + WorkloadEntry):负责后端策略定义与外部服务注册。DestinationRule 定义负载均衡与熔断策略;ServiceEntry 将外部服务纳入网格管理;WorkloadEntry 提供细粒度的实例级注册能力。

这种分层设计使得每一层的职责清晰、可独立测试。例如,测试 Gateway 时只需关注端口监听与 TLS 握手;测试 VirtualService 时只需关注路由匹配逻辑;测试 DestinationRule 时只需关注负载均衡算法与熔断阈值。

3.4 资源模型与测试验证的映射

下表将每个资源模型映射到对应的测试验证维度:

资源模型 测试验证维度 典型测试用例
Gateway 端口可达性、协议兼容性、TLS 证书有效性 使用 curl 验证 HTTPS 端口是否返回 200;使用 openssl 验证证书链
VirtualService 路由匹配准确性、权重分发比例、超时/重试行为 发送带特定 header 的请求,验证是否路由到预期子集;统计 100 次请求的分布
DestinationRule 负载均衡策略、熔断触发条件、连接池限制 注入故障观察熔断是否生效;验证轮询/随机/一致性哈希的分布
ServiceEntry 外部服务可达性、DNS 解析、TLS 发起 从网格内 Pod 访问外部服务,验证是否经过 Sidecar 代理
WorkloadEntry 实例注册有效性、标签匹配、健康检查 手动注册一个 WorkloadEntry,验证流量是否到达指定 IP 和端口
测试策略建议: 采用“自底向上”的测试顺序。先验证 WorkloadEntry 和 ServiceEntry 的连通性,再验证 DestinationRule 的策略生效,然后验证 VirtualService 的路由逻辑,最后验证 Gateway 的入口可达性。这样可以快速定位问题所在层。

3.5 资源模型之间的引用关系图

下图以更直观的方式展示五个资源之间的引用关系:

资源模型引用关系 Gateway VirtualService DestinationRule ServiceEntry WorkloadEntry gateways 字段 destination.host destination.host host 字段 workloadSelector 引用关系要点 • VirtualService 通过 gateways 字段引用 Gateway,通过 destination.host 引用 DestinationRule 或 ServiceEntry。 • DestinationRule 通过 host 字段引用 ServiceEntry,ServiceEntry 通过 workloadSelector 引用 WorkloadEntry。
测试验证技巧: 在测试环境中,可以使用 istioctl proxy-config 命令查看 Envoy 的实际配置,验证资源模型之间的引用是否已正确下发。例如,istioctl proxy-config route <pod-name> 可以查看 VirtualService 是否已转换为 Envoy 路由规则。

3.6 本章小结

五个核心资源模型构成了云原生网关的“控制面骨架”:

  • Gateway 定义入口,VirtualService 定义路由,DestinationRule 定义策略,ServiceEntry 和 WorkloadEntry 扩展后端范围。
  • 资源之间的引用关系决定了流量管道的连通性,任何一层的配置错误都会导致流量中断或行为异常。
  • 测试验证应覆盖每个资源的独立功能以及资源之间的交互边界,确保从入口到后端的整条链路配置正确。