Alauda Container Platform Gateway API Controller

概述

使用 envoy-gateway-operator 通过平台管理的资源部署和管理 Envoy Gateway。主要的自定义资源和运行时实例包括 EnvoyGatewayCtl、GatewayClass、Gateway、EnvoyProxy、envoy-gateway instance 和 envoy-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。

有关各 ACP 版本安装的 Gateway API CRD 版本,请参阅Gateway API CRD 版本。

由于 Operator 由平台维护,因此也会随平台一同自动升级,从而减少手动维护 Envoy Gateway 安装的运维开销。

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

了解这些概念并创建 EnvoyGatewayCtl 后,请按照下一步中列出的顺序,继续配置 Gateway、Route 和 Policy。

架构

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

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

    每个 EnvoyGatewayCtl 的命名空间和名称组合都必须唯一,因此相应的 GatewayClass 名称也唯一。创建 Gateway 时,您需要选择适当的 GatewayClass,以确定由哪个 envoy-gateway instance 对其进行管理。

  2. 创建引用此 GatewayClass 的 Gateway 后,envoy-gateway instance 将拥有该 Gateway。如果 Gateway 通过 .spec.infrastructure.parametersRef 引用了 EnvoyProxy,则会使用该 EnvoyProxy 控制底层 envoy-proxy instance 的部署方式。

  3. 然后,envoy-gateway instance 会预配并管理相应的 envoy-proxy instance,后者作为数据平面,为该 Gateway 处理传入流量。

  4. 您可以创建 HTTPRoute、TCPRoute、UDPRoute、GRPCRoute 或 TLSRoute 资源,并将其关联到 Gateway,以定义流量的匹配方式以及转发到后端 Services 的方式。您还可以关联 ClientTrafficPolicy 或 BackendTrafficPolicy 等流量策略,以实现更高级的行为。

相关自定义资源

以下自定义资源涉及 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. Listeners 配置 - 通过 .spec.listeners 指定用于处理流量的端口、主机名和 TLS 证书
3. 基础设施参数 - 通过 .spec.infrastructure.parametersRef 引用 EnvoyProxy,配置副本、资源等部署细节
Route 资源包括 HTTPRoute、TCPRoute、UDPRoute、GRPCRoute 和 TLSRoute。这些资源定义四个基本组件:
1. 多个匹配规则集 - 用于匹配传入流量的各种条件
2. 后端目标 - 每个匹配规则集对应的目标服务
3. 流量策略 - 每条规则的配置,包括重试、超时、重定向等
4. Gateway listeners 关联 - 通过 .spec.parentRefs 定义,将路由连接到特定的 Gateway listeners
PoliciesPolicy 资源为 Gateway 和 Route 资源扩展了高级功能。Envoy Gateway 当前提供 SecurityPolicy、BackendTLSPolicy、ClientTrafficPolicy 和 BackendTrafficPolicy。

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

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

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

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

如需限制命名空间中 EnvoyProxy 资源声明的 CPU 和内存请求总量,请参阅配置 EnvoyProxy 资源配额。

在推荐的部署模式中,每个 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 Container Platform Gateway API Controller,然后点击 Install

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

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

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

  2. 在 Networking 类别下找到 Alauda Container Platform Gateway API Controller,然后点击它打开详情页。

  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确定 Gateway 部署安装在 Gateway 命名空间还是 controller 命名空间中。详情请参阅部署模式.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 # 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 就绪后,请按顺序继续执行以下任务:

商标声明

Envoy® 是 The Linux Foundation 的注册商标。

Alauda 是独立供应商。本产品与 The Linux Foundation 无关联,也未获得其认可或赞助。所有商标均为其各自所有者的财产,在此仅用于识别目的。