Istio网关容量水位与OPA安全基线巡检 - 第2节

2.1 Gateway:入口流量的边界守卫

在 Istio 服务网格中,Gateway 负责管理网格边缘的南北向流量。它充当集群入口的负载均衡器,决定哪些外部流量可以进入网格,以及应该将流量转发给哪个内部服务。

Gateway 资源定义了一个逻辑端点,通常对应一个 Envoy 代理实例。它通过 selector 字段绑定到特定的工作负载(如 istio-ingressgateway Pod),并配置监听端口、协议和 TLS 证书。

Gateway 核心字段

字段 说明 示例值
servers.port 监听端口与协议(HTTP、HTTPS、GRPC、TCP) number: 443, protocol: HTTPS
servers.hosts 允许通过的域名列表,支持通配符 ["*.example.com", "api.example.com"]
servers.tls TLS 终止模式(SIMPLE/MUTUAL/PASSTHROUGH)及证书来源 mode: SIMPLE, credentialName: ingress-cert
selector 将 Gateway 绑定到特定 ingress gateway Pod 的标签 istio: ingressgateway
关键原则:Gateway 只负责“暴露端口和域名”,不负责“路由规则”。路由逻辑由 VirtualService 定义。

2.2 VirtualService:流量路由的指挥中心

VirtualService 是 Istio 流量管理的核心资源。它定义了一组流量路由规则,控制请求如何从 Gateway 或 Sidecar 到达目标服务。VirtualService 可以执行以下操作:

  • 根据请求的 URI、Header、Method 等条件进行匹配。
  • 将流量分发到服务的不同 子集(Subset),实现灰度发布、A/B 测试。
  • 设置 超时、重试、故障注入 等流量策略。
  • 改写请求的 Host、URI 或添加/删除 Header。

VirtualService 核心字段

字段 说明 典型配置
hosts 匹配的域名,与 Gateway 的 hosts 对应 ["api.example.com"]
gateways 关联的 Gateway 名称列表,mesh 表示网格内部 ["my-gateway"]
http.match HTTP 路由匹配条件(URI、Header、Method、QueryParams) uri.prefix: "/v1/"
http.route 匹配后的流量转发目标(destination + weight) destination.host: "svc.default.svc.cluster.local"

2.3 流量路由原理:从外部请求到 Pod

当外部请求到达 Istio 入口网关时,完整的流量路径遵循以下步骤:

  1. DNS 解析:客户端将域名(如 api.example.com)解析为 Ingress Gateway 的外部 IP 或负载均衡器地址。
  2. Gateway 接收:Envoy 代理(istio-ingressgateway)在指定端口(如 443)接收请求,根据 servers.hosts 判断是否允许该域名。
  3. VirtualService 匹配:Gateway 将请求转交给匹配的 VirtualService。VirtualService 根据 http.match 规则(URI、Header 等)选择对应的路由。
  4. DestinationRule 解析:路由目标指向一个 Service Host,Istio 结合 DestinationRule 确定可用的 Pod 子集(如 version: v1)和负载均衡策略。
  5. Envoy 转发:Envoy 根据服务发现信息,将请求转发到目标 Pod 的 Sidecar Proxy,最终到达应用容器。
运维要点:Gateway 和 VirtualService 是解耦的。一个 Gateway 可以关联多个 VirtualService,一个 VirtualService 也可以被多个 Gateway 引用。这种设计使得安全策略(Gateway)与路由策略(VirtualService)可以独立变更。
Istio 入口网关流量路由流程 Istio 入口网关流量路由流程 外部客户端 Ingress Gateway VirtualService DestinationRule 目标 Service Pod v1 (80%) | Pod v2 (20%) 路由决策关键点: 1. Gateway 按 hosts 过滤域名,只放行匹配的请求。 2. VirtualService 按 match 条件(URI/Header)选择路由,支持权重分发。 3. DestinationRule 定义子集(subset)和负载均衡策略,最终决定 Pod 目标。

2.4 典型配置示例:Gateway + VirtualService 联动

以下是一个完整的入口网关配置,展示如何将 api.example.com 的请求路由到 api-service 的 v1 版本:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: api-gateway
  namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
    - "api.example.com"
    tls:
      mode: SIMPLE
      credentialName: api-tls-cert
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: api-vs
  namespace: default
spec:
  hosts:
  - "api.example.com"
  gateways:
  - istio-system/api-gateway
  http:
  - match:
    - uri:
        prefix: "/v1/"
    route:
    - destination:
        host: api-service.default.svc.cluster.local
        subset: v1
        port:
          number: 8080
      weight: 100
  - match:
    - uri:
        prefix: "/v2/"
    route:
    - destination:
        host: api-service.default.svc.cluster.local
        subset: v2
        port:
          number: 8080
      weight: 100
常见陷阱:Gateway 和 VirtualService 的 hosts 字段必须匹配,否则请求会被 Gateway 拒绝。另外,VirtualService 中的 gateways 字段必须引用正确的 Gateway 名称(格式:namespace/gateway-name),否则路由规则不会生效。

2.5 Gateway 与 VirtualService 的职责边界

理解两者的职责分离,对于后续配置 OPA 安全策略至关重要:

维度 Gateway VirtualService
关注点 网络边界安全、TLS 终止、端口暴露 流量路由、灰度发布、请求改写
变更频率 低(证书更新、端口变更) 高(新功能上线、A/B 测试)
安全影响 直接决定哪些流量可以进入网格 决定流量如何分发,影响内部服务暴露面
OPA 审计重点 检查 hosts 白名单、TLS 配置合规性 检查路由目标是否越权、权重是否合理
Gateway 与 VirtualService 职责对比 Gateway 与 VirtualService 职责对比 Gateway • 端口监听 (443/80) • TLS 证书加载与终止 • 域名白名单过滤 • 协议校验 (HTTP/HTTPS/TCP) • 绑定到 ingressgateway Pod 职责:边界安全 + 协议终止 VirtualService • URI/Header/Method 匹配 • 权重路由与灰度发布 • 请求超时与重试策略 • 故障注入与镜像流量 • Host/URI 改写 职责:流量调度 + 策略执行 转发

2.6 本章小结

  • Gateway 是网格的“大门”,负责端口暴露、TLS 终止和域名过滤,不参与路由决策。
  • VirtualService 是“交通警察”,根据请求特征将流量路由到指定服务版本,支持丰富的流量治理策略。
  • 两者通过 hosts 和 gateways 字段建立关联,形成从外部请求到内部 Pod 的完整路由链。
  • 理解这一基础架构,是后续实现 OPA 安全基线巡检的前提——OPA 策略将分别审计 Gateway 的暴露面合规性和 VirtualService 的路由安全性。