2. 云原生网关基础:Kubernetes Ingress/Gateway API 架构,Envoy 作为数据面核心
在云原生生态中,网关是南北向与东西向流量的关键入口。Kubernetes 原生提供的 Ingress 资源模型在早期解决了七层路由的基本需求,但随着服务网格、精细化流量管理和多协议支持的演进,社区推出了功能更强大的 Gateway API。而 Envoy 作为高性能、可观测性极强的数据面代理,已成为这两类网关控制面的默认数据面实现。
2.1 Kubernetes Ingress 架构与局限
Ingress 是 Kubernetes 中用于管理外部访问集群内服务的 API 对象,典型工作负载为 HTTP/HTTPS 路由。其核心架构由 Ingress 资源与 Ingress Controller 组成。
| 组件 | 职责 | 典型实现 |
|---|---|---|
| Ingress 资源 | 声明式定义域名、路径与后端 Service 的映射规则 | YAML 清单(apiVersion: networking.k8s.io/v1) |
| Ingress Controller | 实时监听 Ingress 资源变化,将规则转换为数据面配置 | nginx-ingress, ingress-nginx, Contour, Istio |
| 数据面代理 | 执行实际的 TLS 终止、路由转发、负载均衡 | Nginx, Envoy, HAProxy |
- 仅原生支持 HTTP/HTTPS,对 TCP/UDP/gRPC 支持需通过 Annotation 扩展。
- 路由规则基于路径和主机名,缺乏后端权重、流量镜像、跨命名空间引用等高级语义。
- TLS 配置粒度粗,无法在单个 Ingress 中为不同路径绑定不同证书。
- 不同 Controller 对 Annotation 的解析不一致,导致可移植性差。
2.2 Gateway API:下一代流量管理标准
Gateway API 是 SIG-Network 推出的新一代 API 资源,旨在解决 Ingress 的扩展性、角色分离和跨实现兼容性问题。它引入三个核心角色:基础设施提供者、集群管理员和应用开发者,通过分层资源实现职责解耦。
| 资源类型 | 作用域 | 管理角色 | 核心字段 |
|---|---|---|---|
| GatewayClass | 集群 | 基础设施提供者 | controller, parametersRef |
| Gateway | 命名空间 | 集群管理员 | listeners(协议、端口、TLS)、addresses |
| HTTPRoute | 命名空间 | 应用开发者 | parentRefs, hostnames, rules(matches, filters, backendRefs) |
| TLSRoute | 命名空间 | 应用开发者 | parentRefs, rules(backendRefs, SNI) |
- 角色分离:GatewayClass 由平台团队定义,Gateway 由运维团队管理,Route 由应用团队声明,避免权限越界。
- 协议扩展:原生支持 HTTP、HTTPS、TLS、TCP、UDP、gRPC,通过 Route 类型区分。
- 跨命名空间路由:Route 可通过
parentRefs.namespace引用其他命名空间的 Gateway。 - 精细化 TLS:每个 Listener 可独立配置 TLS 证书、最低版本、密码套件,支持 SNI 多证书。
- 流量拆分与镜像:通过
matches和filters实现权重路由、请求头修改、流量镜像。
2.3 Envoy 作为数据面核心
Envoy 是 Lyft 开源的高性能七层代理,采用 C++ 编写,具备热重载、高级负载均衡、丰富的可观测性指标和强大的过滤器链机制。在云原生网关场景中,Envoy 通常作为 数据面,接收来自控制面(如 Istio、Contour、Emissary-ingress)下发的 xDS 协议配置。
Envoy 的核心架构组件包括:
- Listener:监听端口,接收入站连接,支持 TCP、UDP、Unix Domain Socket。
- Filter Chain:按顺序执行网络过滤器(如 TLS 终止、HTTP 解析、RBAC 鉴权)和 HTTP 过滤器(如路由、限流、日志)。
- Cluster:定义上游服务端点集合,支持主动/被动健康检查、熔断、负载均衡策略。
- Endpoint:实际的后端 Pod IP:Port,通过 EDS(Endpoint Discovery Service)动态发现。
2.4 控制面与数据面的交互:xDS 协议
Envoy 通过 xDS(Discovery Service) 协议族从控制面动态获取配置。xDS 是 Envoy 生态的核心通信契约,也是实现热重载、零停机配置更新的基础。
| xDS 类型 | 全称 | 配置内容 | 更新触发场景 |
|---|---|---|---|
| LDS | Listener Discovery Service | 监听端口、协议、过滤器链、TLS 上下文 | 新增/删除 Gateway Listener |
| RDS | Route Discovery Service | HTTP 路由规则、匹配条件、后端引用 | HTTPRoute 资源变更 |
| CDS | Cluster Discovery Service | 上游集群定义、负载均衡策略、熔断阈值 | 后端 Service 扩缩容、健康检查策略调整 |
| EDS | Endpoint Discovery Service | 具体的 Pod IP:Port 列表、权重、区域 | Pod 滚动更新、HPA 弹性伸缩 |
| SDS | Secret Discovery Service | TLS 证书、私钥、CA 证书 | 证书轮换、新增 SNI 域名 |
ssl.handshake.count、ssl.connection.error、ssl.session.reused 等。结合 SDS 的证书轮换事件,可以构建 TLS 延迟水位与异常事件的关联模型。
2.5 典型云原生网关实现对比
| 网关方案 | 控制面 | 数据面 | API 标准 | TLS 观测能力 |
|---|---|---|---|---|
| Istio Ingress Gateway | Pilot(Istiod) | Envoy | Gateway API + VirtualService | 强(Envoy Access Log + Wasm 扩展) |
| Contour | Contour Controller | Envoy | Gateway API + HTTPProxy CRD | 中(内置 Envoy 指标 + 自定义日志格式) |
| Emissary-ingress | Emissary Controller | Envoy | Ingress + Mapping CRD | 中(支持 Envoy 指标 + 可观测性插件) |
| nginx-ingress | Nginx Controller | Nginx | Ingress + Annotation | 弱(依赖 Lua 脚本或 Prometheus 插件) |
从 TLS 观测的视角看,Envoy 作为数据面 的方案(Istio、Contour、Emissary)天然具备更丰富的连接级和握手级指标,且支持通过 Wasm 过滤器或 Access Log 格式化输出 TLS 指纹、SNI、证书序列号等关键字段,为后续构建延迟水位模型提供了高质量的数据源。