3. Gateway API 核心概念回顾:GatewayClass、Gateway、HTTPRoute、BackendRef 等资源模型
在深入网格延迟场景的观测标签体系之前,必须统一对 Gateway API 核心资源模型的理解。Gateway API 采用分层解耦的设计哲学,将基础设施、网关实例、路由规则与后端服务分离,为可观测性标签的注入提供了天然的挂载点。
3.1 四层资源模型概览
Gateway API 的核心资源模型由四个关键对象构成,它们共同定义了从集群入口到后端服务的完整流量路径:
| 资源对象 | 作用域 | 核心职责 | 观测标签挂载点 |
|---|---|---|---|
| GatewayClass | 集群 | 定义网关实现类型(如 Istio、Contour、NGINX) | 实现版本、控制器名称 |
| Gateway | 命名空间 | 实例化网关,绑定监听器与地址 | 网关名称、监听器端口、协议 |
| HTTPRoute | 命名空间 | 定义 HTTP 流量路由规则(匹配、转发、重试) | 路由名称、主机名、匹配路径 |
| BackendRef | 命名空间 | 引用后端 Service 或 自定义资源 | 后端名称、端口、权重 |
3.2 资源关系与流量流向
下图展示了 Gateway API 四层资源之间的引用关系与流量流向。理解这一拓扑是后续配置观测标签的基础。
3.3 核心资源详解
3.3.1 GatewayClass:基础设施抽象
GatewayClass 是集群级别的资源,类似于 StorageClass 对存储的抽象。它定义了网关的控制器实现和参数引用。在网格延迟场景中,GatewayClass 的标签可用于区分不同网格控制面的版本。
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: istio
annotations:
# 观测标签:标识控制器版本
mesh.observability.io/controller-version: "1.20.0"
spec:
controllerName: istio.io/gateway-controller
parametersRef:
group: istio.io
kind: IstioGatewayConfig
name: default
3.3.2 Gateway:流量入口实例
Gateway 资源实例化一个具体的网关,绑定监听器(Listener)并分配地址。每个监听器可以关联多个 HTTPRoute。在延迟观测中,Gateway 的 listeners 字段直接决定了入口延迟的采集维度。
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: prod-gateway
namespace: mesh-ingress
labels:
# 观测标签:网关环境与用途
mesh.observability.io/env: "production"
mesh.observability.io/gateway-role: "ingress"
spec:
gatewayClassName: istio
listeners:
- name: http
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: Selector
selector:
matchLabels:
mesh.observability.io/route-scope: "external"
3.3.3 HTTPRoute:路由规则引擎
HTTPRoute 是流量治理的核心,它定义了主机名匹配、路径匹配、过滤器(如重定向、重写)以及后端转发。在网格延迟场景中,HTTPRoute 的匹配规则直接对应观测标签中的 route_name、host 和 path 维度。
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: users-api-route
namespace: mesh-ingress
labels:
# 观测标签:路由所属服务与版本
mesh.observability.io/service: "users-api"
mesh.observability.io/route-version: "v2"
spec:
parentRefs:
- name: prod-gateway
sectionName: http
hostnames: ["api.example.com"]
rules:
- matches:
- path:
type: PathPrefix
value: /users
filters:
- type: RequestHeaderModifier
requestHeaderModifier:
add:
- name: X-Mesh-Route
value: "users-api-v2"
backendRefs:
- name: users-svc
port: 8080
weight: 100
3.3.4 BackendRef:后端服务引用
BackendRef 是路由规则的终点,它引用 Kubernetes Service 或其他自定义资源。BackendRef 支持权重分配和条件转发,是网格延迟场景中后端延迟分布观测的关键对象。
weight 字段在灰度发布和金丝雀部署中直接影响延迟百分位分布。观测标签体系需要将 backendRef.name 和 backendRef.weight 作为核心维度,以便区分不同版本后端的延迟表现。
3.4 资源模型与观测标签的映射关系
下表总结了四层资源模型与网格延迟观测标签之间的直接映射关系,这是后续章节配置标签采集规则的理论基础:
| 资源层 | K8s 元数据字段 | 映射的观测标签 | 延迟场景用途 |
|---|---|---|---|
| GatewayClass | metadata.name, spec.controllerName |
gateway_class, controller |
区分不同网格控制面的延迟基线 |
| Gateway | metadata.name, metadata.namespace, spec.listeners[].port |
gateway, gateway_namespace, listener_port |
按入口网关维度聚合延迟 |
| HTTPRoute | metadata.name, spec.hostnames[], spec.rules[].matches[].path |
route_name, host, path |
按路由规则维度分析延迟 |
| BackendRef | name, port, weight |
backend_name, backend_port, backend_weight |
按后端服务维度对比延迟 |
3.5 资源模型在网格延迟场景中的协作关系
为了更直观地展示四层资源在延迟观测中的协作方式,下图以一次完整的 HTTP 请求为例,标注了每一层资源贡献的观测标签: