Envoy Gateway Operator

概述

使用 envoy-gateway-operator 通过平台托管资源来部署和管理 Envoy Gateway。主要的自定义资源和运行时实例包括 EnvoyGatewayCtlGatewayClassGatewayEnvoyProxyenvoy-gateway instanceenvoy-proxy instance

envoy-gateway-operator 会将上游 envoy-gateway Helm Chart 打包为一个 Operator,因此你可以通过 EnvoyGatewayCtl 自定义资源以声明式方式部署和管理 envoy-gateway instance,而无需直接管理该 Chart 或其渲染后的资源。

在 ACP 4.3 中,envoy-gateway-operator 打包的上游 envoy-gateway Helm Chart 版本为 1.7.0

由于该 Operator 由平台维护,因此也会随着平台一起自动升级,这有助于减少手动维护 Envoy Gateway 安装所带来的运维开销。

创建 EnvoyGatewayCtl 作为通过平台部署和管理 Envoy Gateway 的入口点。

在理解这些概念并创建 EnvoyGatewayCtl 之后,请按照 下一步 中列出的顺序继续进行 GatewayRoutePolicy 配置。

架构

以下工作流展示了 envoy-gateway-operatorEnvoyGatewayCtlGatewayClassGatewayEnvoyProxy 如何协同工作,以部署和管理 Envoy Gateway 及其数据平面。

  1. 安装 envoy-gateway-operator 并创建 EnvoyGatewayCtl 后,operator 会部署一个 envoy-gateway instance 并创建对应的 GatewayClassGatewayClass 名称遵循 <namespace>-<name> 模式。推荐的默认示例是在 envoy-gateway-operator 命名空间中使用 cpaas-default,这也是 Create EnvoyGatewayCtl 页面预填充的默认配置。在这种情况下,生成的 GatewayClassenvoy-gateway-operator-cpaas-default

    每个 EnvoyGatewayCtl 都必须具有唯一的命名空间和名称组合,因此对应的 GatewayClass 名称也是唯一的。创建 Gateway 时,你需要选择合适的 GatewayClass,以确定由哪个 envoy-gateway instance 来管理它。

  2. 当你创建一个引用此 GatewayClassGateway 时,envoy-gateway instance 会接管该 Gateway。如果该 Gateway 通过 .spec.infrastructure.parametersRef 引用了一个 EnvoyProxy,则会使用该 EnvoyProxy 来控制底层 envoy-proxy instance 的部署方式。

  3. 随后,envoy-gateway instance 会调度并管理相应的 envoy-proxy instance,该实例作为数据平面,为该 Gateway 处理进入流量。

  4. 你可以创建 HTTPRouteTCPRouteUDPRouteGRPCRouteTLSRoute 资源并将它们附加到 Gateway,以定义流量如何匹配并转发到后端 Services。你还可以附加诸如 ClientTrafficPolicyBackendTrafficPolicy 等流量策略,以实现更高级的行为。

相关自定义资源

以下自定义资源参与 Envoy Gateway 的部署以及流量行为的配置。

与 Operator 相关的自定义资源

自定义资源描述
EnvoyGatewayCtl控制某个特定 envoy-gateway instance 的部署。

对于典型使用场景,我们建议每个集群通过 EnvoyGatewayCtl 部署一个 envoy-gateway instance

对于高级场景,EnvoyGatewayCtl 还允许你在同一集群中部署多个 envoy-gateway instance 资源,以获得更强的控制力和隔离性,例如不同的 deployment mode

Gateway API 相关的自定义资源

这些资源描述了 gateway 的路由语义,包括流量如何进入 gateway、请求如何匹配并转发到后端,以及在流量处理过程中应用哪些策略。

自定义资源描述
GatewayClass指示某个 envoy-gateway instance 应管理哪些 Gateway 资源。
Gateway定义三个核心组件:
1. GatewayClass 引用 - 通过 .spec.gatewayClassName 引用控制此 Gateway 的 GatewayClass
2. Listeners 配置 - 通过 .spec.listeners 指定用于处理流量的端口、主机名和 TLS 证书
3. 基础设施参数 - 通过引用 EnvoyProxy.spec.infrastructure.parametersRef)来配置副本数、资源等部署细节
Route resources包括 HTTPRouteTCPRouteUDPRouteGRPCRouteTLSRoute。这些资源定义了四个核心组件:
1. 多个匹配规则集 - 用于匹配进入流量的各种条件
2. 后端目标 - 每个匹配规则集对应的目标 Services
3. 流量策略 - 按规则配置重试、超时、重定向等
4. Gateway listeners 绑定 - 通过 .spec.parentRefs 将 route 连接到特定的 Gateway listener
PoliciesPolicy 资源为 GatewayRoute 资源扩展了高级能力。Envoy Gateway 当前提供 SecurityPolicyBackendTLSPolicyClientTrafficPolicyBackendTrafficPolicy

有关这些标准 Gateway API 资源的更多详细信息,请参阅 Gateway API 概念配置 GatewayAPI Policy

Envoy Gateway 部署相关的自定义资源

这些资源控制 Envoy Gateway 及其数据平面的部署方式。请使用以下自定义资源进行部署相关配置。

自定义资源描述
EnvoyProxy定义 envoy-proxy instance 的配置,例如副本数、资源以及调度约束

在推荐的部署模式中,每个 Gateway 都通过 .spec.infrastructure.parametersRef 引用其各自专用的 EnvoyProxy。当你在 Web Console 中使用由 EnvoyGatewayCtl 创建的 GatewayClass 创建 Gateway 时,控制台会自动创建一个同名、同命名空间的配套 EnvoyProxy 资源。这种一对一映射让你可以通过更新对应的 EnvoyProxy 资源来控制 Gateway 的部署配置,例如副本数、资源和调度。

通过 Envoy Gateway Operator 安装 Envoy Gateway

前提条件

在继续之前,请先阅读上文的概念和架构。

安装

步骤 1:安装 Envoy Gateway Operator

  1. 导航到 Administrator -> Marketplace -> OperatorHub
  2. Networking 类别下找到 Alauda build of Envoy Gateway,然后点击 Install

步骤 2:使用推荐默认值创建 EnvoyGatewayCtl

以下默认值与本工作流中推荐的示例一致。

  1. 导航到 Administrator -> Marketplace -> OperatorHub

  2. Networking 类别下找到 Alauda build of Envoy Gateway,然后点击它以打开详情页面。

  3. 导航到 All Instances 选项卡

  4. 点击 Create,然后在显示的对话框中,找到 EnvoyGatewayCtl 实例类型部分并点击 Create

  5. Create EnvoyGatewayCtl 页面会显示以下配置选项:

    字段默认值描述YAML Path
    名称cpaas-defaultEnvoy Gateway 实例名称.metadata.name
    命名空间envoy-gateway-operatorEnvoy Gateway 实例的命名空间。每个命名空间只能有一个 EnvoyGatewayCtl.metadata.namespace
    从节点1Envoy Gateway 部署的从节点数量.spec.deployment.replicas
    部署 Namespace 模式ControllerNamespace确定 gateway 部署是安装在 gateway 命名空间还是 controller 命名空间中。详细信息请参见 deployment mode.spec.config.envoyGateway.provider.kubernetes.deploy.type
    资源1C1GEnvoy Gateway 部署的资源请求和限制.spec.deployment.resources

    建议:对于典型部署,请使用默认值。点击 Create 继续。

通过 YAML 进行配置

作为 Web Console 的替代方式,你可以通过应用 YAML 来创建 EnvoyGatewayCtl

默认配置:

apiVersion: envoy-gateway.alauda.io/v1
kind: EnvoyGatewayCtl
metadata:
  name: cpaas-default
  namespace: envoy-gateway-operator
spec:
  config:
    envoyGateway:
      provider:
        kubernetes:
          deploy:
            type: ControllerNamespace
        type: Kubernetes
  deployment:
    replicas: 1
    resources:
      limits:
        cpu: '1'
        memory: 1024Mi
      requests:
        cpu: 100m
        memory: 256Mi

通过 EnvoyGatewayCtl 进行高级配置

EnvoyGatewayCtl 是用于配置 envoy-gateway instance 的自定义资源。其 spec 会直接映射到上游 envoy-gateway Helm Chart 的 values。当你需要修改 EnvoyGatewayCtl 时,请参考上游 Chart values 文档中的可用配置选项。

有关可用配置选项的详细信息,请参阅 envoy-gateway-chart-values

DANGER

你应仅通过 EnvoyGatewayCtl 资源来配置 envoy-gateway instance。不要直接修改诸如 ConfigMaps、Deployments 等渲染后的资源,因为这些更改可能会在升级或 reconciliation 期间丢失。

示例:启用后端路由

以下示例展示了如何在 EnvoyGatewayCtl 的 spec 中启用后端路由:

apiVersion: envoy-gateway.alauda.io/v1
kind: EnvoyGatewayCtl
metadata:
  name: cpaas-default
  namespace: envoy-gateway-operator
spec:
  config:
    envoyGateway:
      extensionApis:
        enableBackend: true # Enable backend routing in EnvoyGatewayCtl not the envoygateway configmap
      provider:
        kubernetes:
          deploy:
            type: ControllerNamespace
        type: Kubernetes
  deployment:
    replicas: 1
    resources:
      limits:
        cpu: '1'
        memory: 1024Mi
      requests:
        cpu: 100m
        memory: 256Mi

下一步

在 Envoy Gateway operator 和 EnvoyGatewayCtl 就绪后,请按以下顺序继续执行任务: