Envoy Gateway 1.5 实战指南:从部署到流量治理
【免费下载链接】gatewayManages Envoy Proxy as a Standalone or Kubernetes-based Application Gateway项目地址: https://gitcode.com/gh_mirrors/gate/gateway
Envoy Gateway 作为 Envoy Proxy 的官方管理平面,通过 Kubernetes Gateway API 提供了声明式配置能力,让流量管理变得前所未有的简单。本文基于最新 v1.5.0 版本,带你从零开始部署 Envoy Gateway,掌握 HTTP/TCP 路由、TLS 终止、流量分流等核心能力,30 分钟即可完成企业级网关的基础搭建。
读完本文你将获得:
- 3 种部署模式(Helm/Kustomize/独立模式)的实操步骤
- HTTP 路由、TCP 代理、TLS 加密的完整配置案例
- 基于权重的灰度发布与金丝雀部署实现方案
- 生产环境必备的监控与故障排查指南
一、Envoy Gateway 核心价值与架构解析
1.1 为什么选择 Envoy Gateway?
Envoy Gateway 解决了传统 API 网关的三大痛点:
- 配置复杂性:通过 Gateway API 实现声明式配置,替代 Envoy 原生的 xDS 复杂配置
- 多环境适配:无缝支持 Kubernetes 集群与独立部署模式
- 扩展灵活性:保留 Envoy Proxy 的全部扩展能力,同时提供简化的抽象层
1.2 核心架构与组件关系
Envoy Gateway 采用控制平面与数据平面分离的架构设计。控制平面负责管理 Gateway API 资源,生成 Envoy 配置;数据平面由 Envoy Proxy 实例组成,处理实际的网络流量。
关键组件说明:
- GatewayClass:集群级资源,定义网关类型与控制器
- Gateway:指定监听端口、协议等网络配置
- HTTPRoute/TCPRoute:定义流量路由规则
- EnvoyProxy:数据平面代理,由控制平面自动管理
1.3 资源管理体系
Envoy Gateway 通过分层资源实现灵活的流量管理:
配置 Envoy Proxy 功能:
EnvoyProxy:配置 Envoy Proxy 集群的全局设置EnvoyPatchPolicy:对 Gateway 应用自定义补丁,用于微调 Envoy 行为
配置 Gateway 基础:
GatewayClass:Gateway 的"模板"或"类"Gateway:必填资源,将 Envoy Proxy 实例绑定到 Kubernetes 集群
配置流量处理:
- 路由类型:
TLSRoute、TCPRoute、UDPRoute、GRPCRRoute、HTTPRoute - 流量处理策略:
ClientTrafficPolicy、SecurityPolicy、BackendTrafficPolicy等
二、3 种部署模式全攻略
2.1 Helm 快速部署(推荐生产环境)
# 创建命名空间 kubectl create namespace envoy-gateway-system # 安装最新版 Helm chart helm install eg oci://docker.io/envoyproxy/gateway-helm \ --version v0.0.0-latest \ -n envoy-gateway-system \ --set config.envoyGateway.logging.level.default=debug2.2 源码编译部署(开发测试场景)
# 克隆仓库 git clone https://gitcode.com/gh_mirrors/gate/gateway.git cd gateway # 编译并部署到 K8s 集群 make kube-deploy TAG=v1.5.0编译环境要求:
- Go 1.20+
- Docker/Podman
- Kubernetes 集群 1.24+(启用 Gateway API CRD)
2.3 独立模式部署(非 K8s 环境)
# quickstart.yaml apiVersion: gateway.networking.k8s.io/v1 kind: GatewayClass metadata: name: eg spec: controllerName: gateway.envoyproxy.io/gatewayclass-controller --- apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: eg spec: gatewayClassName: eg listeners: - name: http protocol: HTTP port: 8888 --- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: backend spec: parentRefs: - name: eg hostnames: ["www.example.com"] rules: - matches: - path: {type: PathPrefix, value: /} backendRefs: - group: "gateway.envoyproxy.io" kind: Backend name: backend --- apiVersion: gateway.envoyproxy.io/v1alpha1 kind: Backend metadata: name: backend spec: endpoints: - ip: {address: 127.0.0.1, port: 3000}启动命令:
envoy-gateway server --config-path quickstart.yaml三、核心功能实战
3.1 HTTP 路由配置
基础路由示例:
apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: example-route spec: parentRefs: [{name: example-gateway}] hostnames: ["example.com"] rules: - matches: - path: {type: PathPrefix, value: /login} backendRefs: - name: auth-svc port: 8080 - backendRefs: - name: default-svc port: 8080金丝雀发布配置:
apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: canary-route spec: parentRefs: [{name: example-gateway}] hostnames: ["bar.example.com"] rules: - matches: - headers: - name: env value: canary type: Exact backendRefs: - name: bar-canary-svc port: 8080 - backendRefs: - name: bar-svc port: 80803.2 TCP 流量代理
apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: tcp-gateway spec: gatewayClassName: eg listeners: - name: mysql protocol: TCP port: 3306 allowedRoutes: kinds: [{kind: TCPRoute}] --- apiVersion: gateway.networking.k8s.io/v1alpha2 kind: TCPRoute metadata: name: mysql-route spec: parentRefs: - name: tcp-gateway sectionName: mysql rules: - backendRefs: - name: mysql-service port: 33063.3 TLS 终止配置
1. 创建自签名证书(测试用):
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout tls.key -out tls.crt \ -subj "/CN=www.example.com" kubectl create secret tls example-cert --cert=tls.crt --key=tls.key2. 配置 TLS 终止网关:
apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: tls-gateway spec: gatewayClassName: eg listeners: - name: https protocol: TLS port: 443 tls: mode: Terminate certificateRefs: - name: example-cert kind: Secret四、监控与运维实践
4.1 集群监控仪表板
该仪表板提供 Envoy 集群的关键监控指标:
- 活跃服务器:显示当前在线的 Envoy 节点数量
- 平均运行时长:监控节点稳定性
- 内存使用:评估资源开销与内存泄漏风险
- 集群健康状态:快速识别故障集群
4.2 资源监控仪表板
该仪表板分为四个主要区域:
- Envoy Gateway:Gateway 级别的 CPU 和内存使用监控
- Envoy Proxy:不同 Proxy 实例的 CPU 和内存使用监控
关键指标包括:
- CPU 使用率:监控 Gateway 和 Proxy 进程的 CPU 占用
- 内存使用:监控进程的内存占用,反映资源开销
4.3 常见故障排查流程
Envoy Gateway 通过静态+动态配置协同工作:静态配置定义 Proxy 的基础行为,动态配置根据运行时状态调整 Proxy 的配置。
典型问题解决方案:
- 路由不生效:检查 GatewayClass 控制器名称是否正确
- 证书加载失败:确认 Secret 存在且包含正确字段
- 服务不可达:验证后端服务标签选择器与 Pod 标签匹配
五、总结与进阶学习
通过本文学习,你已掌握 Envoy Gateway 的核心部署与配置能力。作为云原生 API 网关的新星,Envoy Gateway 正在快速迭代,未来将支持更多高级功能如 WASM 扩展、gRPC 路由等。
进阶学习资源:
- 官方文档:深入理解 Gateway API 规范与扩展机制
- 示例库:探索 examples 目录下的高级用例
- 社区交流:参与 Envoy Gateway 社区讨论
下一步行动:
- 尝试配置高级流量策略(熔断、重试、超时控制)
- 集成外部认证服务(OAuth2/OIDC)
- 实现多集群流量管理
【免费下载链接】gatewayManages Envoy Proxy as a Standalone or Kubernetes-based Application Gateway项目地址: https://gitcode.com/gh_mirrors/gate/gateway
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考