找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

426

积分

0

好友

62

主题
发表于 昨天 14:46 | 查看: 4| 回复: 0

云原生架构中,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 日趋稳定,建议运维和平台团队尽早评估并引入此类标准化方案,以提升整个基础设施的一致性和可维护性。




上一篇:Kubernetes安全最佳实践:生产环境容器全链路防护指南
下一篇:渗透测试实战:AWS、微信与地图AK/SK等常见密钥的利用工具解析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-6 23:54 , Processed in 0.068268 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表