2. 虚拟服务基础配置:hosts字段详解、gateways字段详解、http路由规则基础结构
虚拟服务(VirtualService)是 Istio 流量治理的核心资源,它定义了流量如何被路由到目标服务。本章聚焦于虚拟服务配置的三个基础要素:hosts、gateways 以及 http 路由规则的基础结构。理解这三者是后续实现自动化回滚策略与性能调优的基石。
2.1 hosts 字段详解
hosts 字段指定了流量匹配的目标地址,可以是 DNS 名称、IP 地址或通配符。它是虚拟服务的入口匹配条件,决定了哪些请求会被该虚拟服务处理。
| 配置项 | 说明 | 示例 |
|---|---|---|
| DNS 名称 | 匹配完整的域名,支持通配符 * |
reviews.bookinfo.svc.cluster.local |
| 通配符 | 匹配所有子域名或所有服务 | *.bookinfo.svc.cluster.local |
| IP 地址 | 匹配具体的 IP 或 CIDR 范围 | 10.0.0.1 或 10.0.0.0/24 |
| 短名称 | 在同一个命名空间下,可省略完整域名 | reviews |
最佳实践:在生产环境中,建议使用完整的 DNS 名称或明确的通配符,避免因命名空间隔离导致路由意外匹配。对于跨命名空间访问,必须使用
<service>.<namespace>.svc.cluster.local 格式。
2.2 gateways 字段详解
gateways 字段决定了虚拟服务的作用范围:是处理来自网格内部的流量(Sidecar 间通信),还是处理来自网格外部的流量(通过 Ingress Gateway),或者两者兼有。
- 不设置 gateways:默认值为
mesh,仅处理网格内部的 Sidecar 流量。 - 设置为
mesh:显式声明处理内部流量。 - 设置为具体的 Gateway 名称:处理通过该 Gateway 进入的外部流量。
- 同时设置
mesh和 Gateway 名称:同时处理内部和外部流量。
关键区别:当虚拟服务同时绑定
mesh 和外部 Gateway 时,hosts 字段中的域名必须与 Gateway 的 servers.hosts 配置匹配,否则外部流量无法进入。
2.3 http 路由规则基础结构
http 路由规则是虚拟服务的核心,它定义了如何根据请求属性(路径、方法、头部等)将流量分发到不同的目标子集。一个完整的 http 路由规则包含以下关键部分:
- match:匹配条件,支持 URI、Scheme、Method、Authority、Headers、Port、SourceLabels、Gateways 等。
- route:目标路由,指定流量发往的
destination.host、subset和weight。 - redirect / rewrite:请求重定向或 URI 重写。
- timeout / retries / fault:超时、重试和故障注入策略。
- mirror:流量镜像,用于灰度测试。
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: reviews-route
spec:
hosts:
- reviews.bookinfo.svc.cluster.local
gateways:
- mesh
- bookinfo-gateway
http:
- match:
- uri:
prefix: /reviews/v1
route:
- destination:
host: reviews.bookinfo.svc.cluster.local
subset: v1
weight: 100
- match:
- uri:
prefix: /reviews/v2
route:
- destination:
host: reviews.bookinfo.svc.cluster.local
subset: v2
weight: 100
- route:
- destination:
host: reviews.bookinfo.svc.cluster.local
subset: v1
weight: 50
- destination:
host: reviews.bookinfo.svc.cluster.local
subset: v2
weight: 50
注意:路由规则的匹配顺序是从上到下,一旦匹配成功则停止后续匹配。务必把精确匹配或高优先级规则放在前面,兜底规则放在最后。
2.4 虚拟服务路由流程示意图
下图展示了从请求进入、经过 hosts 匹配、gateways 过滤,到 http 路由规则分发至不同子集的完整流程:
2.5 路由规则匹配优先级与性能考量
在性能调优场景下,路由规则的匹配效率直接影响请求延迟。以下是匹配优先级和性能建议:
| 匹配类型 | 优先级 | 性能影响 | 优化建议 |
|---|---|---|---|
| 精确匹配(exact) | 最高 | 低(哈希查找) | 优先使用,减少正则开销 |
| 前缀匹配(prefix) | 中 | 中(字符串比较) | 避免过长的前缀,控制规则数量 |
| 正则匹配(regex) | 最低 | 高(正则引擎回溯) | 仅在必要时使用,避免复杂正则 |
性能调优要点:在自动化回滚场景中,建议将回滚目标版本的匹配规则放在
http 列表的最前面,利用精确匹配减少匹配时间。同时,避免在单个虚拟服务中定义超过 20 条路由规则,以降低 Envoy 配置更新的计算开销。