Envoy Gateway 是一个用于管理 Envoy Proxy 的开源项目,可作为独立或基于 Kubernetes 的应用网关。Gateway API 是 Kubernetes 官方的一组自定义资源,用于声明路由规则和流量管理策略。Envoy Gateway 是 Gateway API 规范的一个实现。Gateway 或 gatewayapi/gateway 是 Gateway API 规范定义的 CR。envoy-gateway instance 指在 Kubernetes 集群中运行的 Envoy Gateway 实例及其所有相关资源。envoy-gateway-operator 是基于 helm-operator 封装的 Envoy Gateway,使用 EnvoyGatewayCtl 简化 envoy-gateway instance 的部署和管理。EnvoyProxy 是 Envoy Gateway 规范定义的 CR,由 envoy-gateway instance 用于管理 envoy-proxy instance。envoy-proxy instance 是处理入站流量的运行中的部署。安装 envoy-gateway-operator 后,它会监控 EnvoyGatewayCtl 并部署一个 envoy-gateway instance 及一个默认的 GatewayClass。
当你创建一个引用该 GatewayClass 并指定 EnvoyProxy 配置的 Gateway 时,envoy-gateway instance 会部署一个 envoy-proxy instance 来处理入站流量。
然后可以创建 HTTP、TCP 或 UDP Route 资源并附加到该 Gateway,以定义流量路由策略。
若需更细粒度配置,可以创建 ClientTrafficPolicy 或 BackendTrafficPolicy 资源并附加到路由,实现高级流量管理功能。
Envoy Gateway 和 envoy-gateway-operator 引入了额外的自定义资源,结合 Gateway API 的自定义资源,全面控制网关部署和路由策略配置的各个方面。
Gateway API 相关自定义资源| 自定义资源 | 描述 |
|---|---|
| GatewayClass | envoy-gateway instance 知道它管理哪些 GatewayClass,从而知道应控制哪些 Gateway。 |
| Gateway | 定义三个核心组件: 1. GatewayClass 引用 - 通过 .spec.gatewayClassName 引用控制该 Gateway 的 GatewayClass2. Listeners 配置 - 通过 .spec.listeners 指定用于流量处理的端口、主机名和 TLS 证书3. 基础设施参数 - 通过 .spec.infrastructure.parametersRef 引用 EnvoyProxy,配置部署细节如副本数、资源等 |
| HTTP/TCP/UDP Route | 定义四个核心组件: 1. 多组匹配规则 - 匹配入站流量的各种条件 2. 后端目标 - 每组匹配规则对应的目标服务 3. 流量策略 - 每条规则的配置,包括重试、超时、重定向等 4. Gateway listeners 关联 - 通过 .spec.parentRefs 将路由连接到特定的 Gateway 监听器 |
更多详情请参阅 Gateway API Concepts。
| 自定义资源 | 描述 |
|---|---|
| EnvoyProxy | 定义 envoy-proxy instance 的配置,如副本数、资源和调度约束等。 |
推荐的部署模式中,每个 Gateway 通过 .spec.infrastructure.parametersRef 引用其专属的 EnvoyProxy 资源。
这种一对一映射允许用户通过修改对应的 EnvoyProxy 资源来控制 Gateway 的部署配置(副本数、资源、调度等)。
| 自定义资源 | 描述 |
|---|---|
| EnvoyGatewayCtl | 控制特定 envoy-gateway instance 的部署。 |
建议每个集群通过 EnvoyGatewayCtl 部署单个 envoy-gateway instance,这对于典型用例已足够。
不过,EnvoyGatewayCtl 资源允许在同一集群内部署多个 envoy-gateway instance,以支持更灵活的控制和隔离,适用于不同的部署模式等高级场景。
请确保您已阅读 理解 Envoy Gateway 文档后再继续操作。
envoy-gateway-operator 用于简化 envoy-gateway instance 部署的高级管理。
其运行架构如下:
envoy-gateway-operator 持续监控 EnvoyGatewayCtl,并自动创建对应的 envoy-gateway instance 部署、服务等资源。
管理员 -> Marketplace -> OperatorHubNetworking 分类下找到 Alauda build of Envoy Gateway,点击 安装进入 管理员 -> Marketplace -> OperatorHub
在 Networking 分类下找到 Alauda build of Envoy Gateway,点击打开
切换到 所有实例 标签页
点击 创建,在弹出的对话框中找到 EnvoyGatewayCtl 实例类型部分,点击 创建
创建 EnvoyGatewayCtl 页面显示以下配置选项:
| 字段 | 默认值 | 描述 | YAML 路径 |
|---|---|---|---|
| Name | cpaas-default | Envoy Gateway 实例名称 | .metadata.name |
| Namespace | envoy-gateway-operator | Envoy Gateway 实例所在命名空间,每个命名空间只能有一个 envoygatewayctl | .metadata.namespace |
| Replica | 1 | Envoy Gateway 部署的副本数 | .spec.controller.replicaCount |
| Deploy Ns Mode | ControllerNamespace | 决定网关部署安装在网关命名空间还是控制器命名空间,详情请参阅部署模式 | spec.config.envoyGateway.provider.kubernetes.deploy.type |
| Resources | 1C1G | Envoy Gateway 部署的资源请求和限制 | .spec.controller.resources |
建议:典型部署使用默认值,点击 创建 继续。
您也可以通过 yaml 应用 EnvoyGatewayCtl。
默认配置:
每个 EnvoyGatewayCtl 会创建一个名为 $NS-$NAME 的 GatewayClass,例如 envoy-gateway-operator-cpaas-default。
EnvoyGatewayCtl 本质上是基于 helm-operator 封装的 envoy-gateway Helm Chart。其 spec 对应 envoy-gateway chart 的 values,允许您在一个源中配置 Envoy Gateway 的各种全局级功能。
有关可用配置选项的详细信息,请参阅 envoy-gateway-chart-values。
您应仅通过 EnvoyGatewayCtl 资源配置 envoy-gateway instance,不要直接修改渲染出的资源如 ConfigMaps、Deployments,因为这些更改可能在升级或调和过程中丢失。
例如,您可以在 EnvoyGatewayCtl spec 中配置后端路由: