在云原生时代,IT 环境往往是混合的,许多关键业务仍运行在虚拟机、物理服务器甚至第三方平台上。如何让这些非容器化服务也能享受到统一入口、安全策略和可观测性等现代化网关能力?Envoy Gateway 作为 Kubernetes Gateway API 的参考实现,通过其扩展机制(如 Backend CRD)提供了代理任意外部后端的能力。本文将详细介绍其配置方法,并重点探讨一个常被忽略的安全陷阱。
使用场景
以下场景特别适合引入 Envoy Gateway 来代理非容器流量:
- 统一南北向入口:将 VM 上的 Web 应用、数据库代理、旧版 API 等纳入同一域名体系。
- 安全加固:为缺乏认证能力的传统系统增加 JWT、Basic Auth、IP 白名单等防护层。
- 灰度与迁移:在微服务迁移过程中,通过流量切分逐步将请求从旧系统切换到新服务。
- 跨环境集成:将公有云 VM、私有 IDC 或合作伙伴接口统一暴露给前端用户。
例如,假设监控平台 Nightingale 运行在云主机上,但希望用户通过 http://n9e.jiaxzeng.com 访问,并具备限流和 TLS 终止能力——这正是 Envoy Gateway 可以解决的问题。
配置步骤
1. 开启 Backend API 特性
该特性默认处于关闭状态,需要手动开启。
# 获取原来的 eg 配置文件
$ k -n envoy-gateway-system get cm envoy-gateway-config -ojsonpath='{.data.envoy-gateway\.yaml}' > /tmp/eg-config.yaml
# 添加开启 backend 参数
$ cat <<-EOF | tee -a /tmp/eg-config.yaml > /dev/null
extensionApis:
enableBackend: true
EOF
# 更新 eg 配置文件
$ k -n envoy-gateway-system create cm envoy-gateway-config --dry-run=client -oyaml --from-file=envoy-gateway.yaml=/tmp/eg-config.yaml | k -n envoy-gateway-system replace -f -
configmap/envoy-gateway-config replaced
# 重启 eg 控制面服务
$ k -n envoy-gateway-system rollout restart deployment envoy-gateway
2. 创建 HTTPRoute 与 Backend 资源代理外部服务
以下 YAML 示例创建了一个 HTTPRoute,将主机名 n9e.jiaxzeng.com 的流量路由到一个名为 n9e 的 Backend,该 Backend 指向两个特定的外部 IP 和端口。
$ cat <<EOF | kubectl apply -f -
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: n9e-external
spec:
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: simple-gw
hostnames:
- "n9e.jiaxzeng.com"
rules:
- backendRefs:
- group: gateway.envoyproxy.io
kind: Backend
name: n9e
matches:
- path:
type: PathPrefix
value: /
---
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: Backend
metadata:
name: n9e
spec:
endpoints:
- ip:
address: 172.139.20.181
port: 17000
- ip:
address: 172.139.20.183
port: 17000
EOF
应用后,你将看到类似 httproute.gateway.networking.k8s.io/n9e-external created 和 backend.gateway.envoyproxy.io/n9e created 的输出。
3. 验证配置
配置生效后,访问指定的域名(如 http://n9e.jiaxzeng.com),应该能够成功访问到部署在外部服务器上的应用服务。

核心安全问题与防护策略
虽然上述方法能有效代理外部流量,极大地提升了架构灵活性,但若配置不当,可能引入严重的安全风险。Envoy Gateway 官方文档在 Backend Routing 一节中明确指出:类似 Kubernetes EndpointSlice,Backend API 可被滥用于将流量导向本应受限的目标。
这就好比你给网关开了一扇通往整个网络的后门,如果门锁不牢,后果不堪设想。因此,在享受便利的同时,必须筑起坚固的安全防线。
- 默认禁用,按需开启:
Backend API 在设计上默认关闭(enableBackend: false)。除非业务确实需要代理外部服务,否则不要启用它。这是最基本的安全原则。
- 实施严格的 RBAC:在 Kubernetes 集群中,必须通过 Role-Based Access Control 精细控制谁可以创建、修改或删除
Backend 资源。只授权给可信的管理员账号或 CI/CD 系统,避免普通开发者或潜在的攻击者随意配置后端端点。
- 谨慎使用
DynamicResolver:Backend 支持通过 DNS 动态解析端点。除非你明确需要正向代理等功能,并且已经部署了额外的审计与流量限制策略,否则应避免使用此功能,以防止被利用进行内部网络探测或攻击。
- 配合 NetworkPolicy:在 Kubernetes 网络层面,为 Envoy Proxy 的 Pod 配置严格的 NetworkPolicy,限制其出站流量只能访问特定的、业务必需的 IP 地址段(CIDR)。这样即使
Backend 配置错误或被盗用,攻击流量也无法到达非预期的内部目标。
- 启用传输层与认证安全:
- 使用
BackendTLSPolicy 为到后端的连接启用 TLS 加密,防止通信被窃听或篡改。
- 在 HTTPRoute 上配置 JWT、OAuth2 或 API Key 等认证策略,确保只有合法的请求才能被代理到后端服务。
- 建立监控与告警:对 Envoy 的访问日志进行集中收集和分析,建立告警规则,特别关注那些指向敏感私有 IP 段(如
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)或非常用端口的后端连接尝试。这有助于快速发现异常配置或入侵行为。
结语
Envoy Gateway 为混合云与遗留系统现代化提供了强大的流量治理能力,但“能力越大,责任越大”。代理非容器流量虽然便捷,却也相当于在内外网之间架起了一座桥梁。我们必须在灵活性与安全性之间找到平衡——最小权限、纵深防御、持续监控是保障这座桥梁安全通行的三大核心原则。在实际的运维工作中,任何便捷功能的开启都必须伴随着相应的安全评估与控制措施的落地。

|