Envoy Gateway Operator

Overview

本文档概述了 envoy-gateway-operator 在 ACP 中的工作原理,解释了 Envoy Gateway 相关的主要自定义资源和运行时实例之间的关系,包括 EnvoyGatewayCtlGatewayClassGatewayEnvoyProxyenvoy-gateway instanceenvoy-proxy instance

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

在 ACP 4.3 中,envoy-gateway-operator 封装了上游 envoy-gateway Helm Chart 版本 1.7.0

由于该 Operator 由平台维护,它也会随平台自动升级,帮助减少手动维护 Envoy Gateway 安装的运维负担。

本文档还介绍了如何创建 EnvoyGatewayCtl,这是通过平台部署和管理 Envoy Gateway 的入口。

在理解本文档中的基本概念并创建 EnvoyGatewayCtl 后,请按照 Next Step 中列出的文档顺序继续进行 GatewayRoutePolicy 的配置。

Architecture

下图展示了 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,以定义流量的匹配和转发规则。还可以附加如 ClientTrafficPolicyBackendTrafficPolicy 等流量策略,实现更高级的行为。

相关自定义资源

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

Operator 相关自定义资源

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

建议在典型用例中,每个集群通过 EnvoyGatewayCtl 部署单个 envoy-gateway instance

对于高级场景,EnvoyGatewayCtl 也允许在同一集群内部署多个 envoy-gateway instance,以实现更强的控制和隔离,例如不同的部署模式

Gateway API 相关自定义资源

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

自定义资源描述
GatewayClass指示 envoy-gateway instance 应管理哪些 Gateway 资源。
Gateway定义三个核心组件:
1. GatewayClass 引用 - 通过 .spec.gatewayClassName 引用控制该 Gateway 的 GatewayClass
2. 监听器配置 - 通过 .spec.listeners 指定用于流量处理的端口、主机名和 TLS 证书
3. 基础设施参数 - 通过 .spec.infrastructure.parametersRef 引用 EnvoyProxy,配置副本数、资源等部署细节
Route 资源包括 HTTPRouteTCPRouteUDPRouteGRPCRouteTLSRoute。这些资源定义四个核心组件:
1. 多组匹配规则 - 匹配入站流量的各种条件
2. 后端目标 - 每组匹配规则对应的目标服务
3. 流量策略 - 每条规则的配置,包括重试、超时、重定向等
4. 网关监听器关联 - 通过 .spec.parentRefs 连接路由到特定的 Gateway 监听器
Policies策略资源为 GatewayRoute 资源扩展了高级功能。Envoy Gateway 当前提供 SecurityPolicyBackendTLSPolicyClientTrafficPolicyBackendTrafficPolicy

有关这些标准 Gateway API 资源的更多详细信息,请参阅 Gateway API ConceptsConfigure 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

前提条件

请确保在继续之前已阅读“Overview”和“Architecture”部分。

安装

步骤 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 路径
    Namecpaas-defaultEnvoy Gateway 实例名称.metadata.name
    Namespaceenvoy-gateway-operatorEnvoy Gateway 实例所在命名空间。每个命名空间只能有一个 EnvoyGatewayCtl.metadata.namespace
    Replica1Envoy Gateway 部署的副本数.spec.deployment.replicas
    Deploy Ns ModeControllerNamespace决定网关部署是在网关命名空间还是控制器命名空间安装。详情请参见部署模式.spec.config.envoyGateway.provider.kubernetes.deploy.type
    Resources1C1GEnvoy 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 的值。当您需要修改 EnvoyGatewayCtl 时,请参考上游 Chart 的值文档了解可用的配置选项。

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

DANGER

您应仅通过 EnvoyGatewayCtl 资源配置 envoy-gateway instance。请勿直接修改渲染后的资源(如 ConfigMaps、Deployments),因为这些更改可能在升级或调和过程中丢失。

示例:启用后端路由

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

apiVersion: envoy-gateway.alauda.io/v1
kind: EnvoyGatewayCtl
metadata:
  name: cpaas-default
  namespace: envoy-gateway-operator
spec:
  config:
    envoyGateway:
      extensionApis:
        enableBackend: true # 在 EnvoyGatewayCtl 中启用后端路由,而非 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 准备就绪后,请按顺序继续完成以下任务: