在云原生架构中,API 网关承担着流量入口、安全控制和服务治理等关键职责。随着 Kubernetes Gateway API 标准的日益成熟,越来越多的项目选择采用这一标准化接口来统一管理南北向流量。Envoy Gateway (EG) 作为 CNCF 的沙箱项目,基于性能强大的 Envoy Proxy 构建,提供了一个轻量、可扩展且完全符合 Gateway API 规范的网关控制器实现。
本文将指导你从零开始,在Kubernetes集群中部署 Envoy Gateway,并通过一个简单的 HTTP 路由示例完成配置,帮助你快速掌握这一现代化的网关方案。

主流网关控制器特性对比
| 特性维度 |
Nginx Gateway Fabric (NGF) |
Envoy Gateway |
Kong |
| 核心架构 |
Nginx |
Envoy |
Nginx/OpenResty |
| 性能定位 |
性能相对较弱 |
性能优异,高并发下稳定 |
性能强劲,官方基准测试表现良好 |
| 配置更新 |
动态配置,无需 Reload |
动态配置,无需重载 |
支持动态配置,通过 Admin API 或 Kubernetes 资源 |
| 关键优势 |
Nginx生态自然演进,平滑迁移 |
Envoy原生高性能,现代API设计 |
插件生态极其丰富,企业级功能成熟 |
| 指标 (Metrics) |
输出 Prometheus 格式指标 |
利用 Envoy 原生统计,支持 Prometheus/OpenTelemetry,并提供 Gateway API 专用指标 |
提供内置的 Prometheus 指标支持或通过插件导出 |
提示:若团队熟悉 Nginx,建议使用 NGF;若熟悉 Envoy,可直接选用 EG;若需要丰富的插件生态,可以尝试 Kong。
安装 Envoy Gateway
1. 准备安装配置文件
创建 envoy-gateway-values.yml 配置文件,可自定义镜像地址等参数。
# envoy-gateway-values.yml
global:
images:
envoyGateway:
image: core.jiaxzeng.com/library/envoyproxy/gateway:v1.1.4
pullPolicy: IfNotPresent
ratelimit:
image: core.jiaxzeng.com/library/envoyproxy/ratelimit:49af5cca
pullPolicy: IfNotPresent
config:
envoyGateway:
gateway:
controllerName: gateway.envoyproxy.io/gatewayclass-controller
logging:
level:
default: info
2. 执行 Helm 安装命令
使用 Helm 在指定命名空间中安装 Envoy Gateway。
$ helm install envoy-gateway -f envoy-gateway-values.yml -n envoy-gateway-system --create-namespace envoy-gateway
NAME: envoy-gateway
LAST DEPLOYED: Thu Dec 4 11:05:13 2025
NAMESPACE: envoy-gateway-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
注意:envoy-gateway 的 Helm Chart 默认存放在 docker.io 仓库,国内环境下载可能需要配置网络。
验证部署与配置路由
1. 创建 GatewayClass 及 EnvoyProxy 配置
首先定义 Envoy 代理使用的镜像并创建 GatewayClass,这是使用 Gateway API 的入口。
cat <<'EOF' | kubectl apply -f -
---
# 配置envoy代理使用的镜像
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
name: global-proxy-config
namespace: envoy-gateway-system
spec:
provider:
type: Kubernetes
kubernetes:
envoyDeployment:
container:
image: core.jiaxzeng.com/library/envoyproxy/envoy:distroless-v1.31.3
---
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: envoy-proxy-gwc
spec:
# 填写 helm 安装 config.envoyGateway.gateway.controllerName 参数值
controllerName: gateway.envoyproxy.io/gatewayclass-controller
# 引用上述的 EnvoyProxy 配置
parametersRef:
group: gateway.envoyproxy.io
kind: EnvoyProxy
name: global-proxy-config
namespace: envoy-gateway-system
EOF
2. 创建 Gateway 资源
创建一个 Gateway 实例,定义监听 80 端口的 HTTP 监听器。
cat <<'EOF' | kubectl apply -f -
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: simple-gw
spec:
gatewayClassName: envoy-proxy-gwc
listeners:
- name: http
protocol: HTTP
port: 80
EOF
3. 配置 HTTP 路由规则
创建一个 HTTPRoute 资源,将特定域名的流量路由到后端服务。
cat <<'EOF' | kubectl apply -f -
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: simple
spec:
parentRefs:
- name: simple-gw
hostnames:
- "*.jiaxzeng.com"
rules:
- backendRefs:
- group: ""
kind: Service
name: simple
port: 80
weight: 1
matches:
- path:
type: PathPrefix
value: /
EOF
提示:假设名为 simple 的后端服务已部署在 default 命名空间下。
4. 获取访问地址
查看 Envoy Proxy Pod 的运行节点及其对应的 NodePort 端口。
# 确认 Pod 运行节点
$ k -n envoy-gateway-system get pod -owide -l gateway.envoyproxy.io/owning-gateway-name=simple-gw
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
envoy-default-simple-gw-d9e70e75-56689dbc76-4wmkf 2/2 Running 0 34s 10.244.217.161 k8s-node04 <none> <none>
# 确认 NodePort 端口
$ k -n envoy-gateway-system get svc -l gateway.envoyproxy.io/owning-gateway-name=simple-gw
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
envoy-default-simple-gw-d9e70e75 LoadBalancer 10.98.154.32 <pending> 80:31653/TCP 103s
5. 访问测试
通过 <节点IP>:31653 并使用匹配的 Host 头(如 Host: test.jiaxzeng.com)进行访问,即可看到后端服务的响应。

提示:HTTPRoute 的 hostnames 字段支持泛域名配置。
结语
Envoy Gateway 作为新一代 Kubernetes 网关控制器,凭借其对 Gateway API 的原生支持和 Envoy 强大的代理能力,正逐步成为云原生网关领域的重要选择。通过本文的实践,你可以快速搭建起一个符合现代架构要求的入口网关,为后续实施安全策略、集成可观测性工具和进行精细化的流量治理奠定基础。
随着 Gateway API 日趋稳定,建议运维和平台团队尽早评估并引入此类标准化方案,以提升整个基础设施的一致性和可维护性。