Envoy Gateway Operator

理解 Envoy Gateway

术语

  • Envoy Gateway 是一个用于管理 Envoy Proxy 的开源项目,可作为独立或基于 Kubernetes 的应用网关。
  • Gateway API 是 Kubernetes 官方的一组自定义资源,用于声明路由规则和流量管理策略。Envoy GatewayGateway API 规范的一个实现。
  • Gatewaygatewayapi/gateway 是 Gateway API 规范定义的 CR。
  • envoy-gateway instance 指在 Kubernetes 集群中运行的 Envoy Gateway 实例及其所有相关资源。
  • envoy-gateway-operator 是基于 helm-operator 封装的 Envoy Gateway,使用 EnvoyGatewayCtl 简化 envoy-gateway instance 的部署和管理。
  • EnvoyProxyEnvoy Gateway 规范定义的 CR,由 envoy-gateway instance 用于管理 envoy-proxy instance
  • envoy-proxy instance 是处理入站流量的运行中的部署。

架构

  1. 安装 envoy-gateway-operator 后,它会监控 EnvoyGatewayCtl 并部署一个 envoy-gateway instance 及一个默认的 GatewayClass。

  2. 当你创建一个引用该 GatewayClass 并指定 EnvoyProxy 配置的 Gateway 时,envoy-gateway instance 会部署一个 envoy-proxy instance 来处理入站流量。

  3. 然后可以创建 HTTP、TCP 或 UDP Route 资源并附加到该 Gateway,以定义流量路由策略。

  4. 若需更细粒度配置,可以创建 ClientTrafficPolicyBackendTrafficPolicy 资源并附加到路由,实现高级流量管理功能。

相关自定义资源

Envoy Gatewayenvoy-gateway-operator 引入了额外的自定义资源,结合 Gateway API 的自定义资源,全面控制网关部署和路由策略配置的各个方面。

Gateway API 相关自定义资源

自定义资源描述
GatewayClassenvoy-gateway instance 知道它管理哪些 GatewayClass,从而知道应控制哪些 Gateway。
Gateway定义三个核心组件:
1. GatewayClass 引用 - 通过 .spec.gatewayClassName 引用控制该 Gateway 的 GatewayClass
2. 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

Envoy Gateway 相关自定义资源

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

推荐的部署模式中,每个 Gateway 通过 .spec.infrastructure.parametersRef 引用其专属的 EnvoyProxy 资源。

这种一对一映射允许用户通过修改对应的 EnvoyProxy 资源来控制 Gateway 的部署配置(副本数、资源、调度等)。

Operator 相关自定义资源

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

建议每个集群通过 EnvoyGatewayCtl 部署单个 envoy-gateway instance,这对于典型用例已足够。

不过,EnvoyGatewayCtl 资源允许在同一集群内部署多个 envoy-gateway instance,以支持更灵活的控制和隔离,适用于不同的部署模式等高级场景。

通过 Envoy Gateway Operator 安装 Envoy Gateway

前提条件

请确保您已阅读 理解 Envoy Gateway 文档后再继续操作。

概述

envoy-gateway-operator 用于简化 envoy-gateway instance 部署的高级管理。

其运行架构如下:

envoy-gateway-operator 持续监控 EnvoyGatewayCtl,并自动创建对应的 envoy-gateway instance 部署、服务等资源。

安装

步骤 1:安装 Envoy Gateway Operator

  1. 进入 管理员 -> Marketplace -> OperatorHub
  2. Networking 分类下找到 Alauda build of Envoy Gateway,点击 安装

步骤 2:创建默认 EnvoyGatewayCtl

  1. 进入 管理员 -> Marketplace -> OperatorHub

  2. Networking 分类下找到 Alauda build of Envoy Gateway,点击打开

  3. 切换到 所有实例 标签页

  4. 点击 创建,在弹出的对话框中找到 EnvoyGatewayCtl 实例类型部分,点击 创建

  5. 创建 EnvoyGatewayCtl 页面显示以下配置选项:

    字段默认值描述YAML 路径
    Namecpaas-defaultEnvoy Gateway 实例名称.metadata.name
    Namespaceenvoy-gateway-operatorEnvoy Gateway 实例所在命名空间,每个命名空间只能有一个 envoygatewayctl.metadata.namespace
    Replica1Envoy Gateway 部署的副本数.spec.controller.replicaCount
    Deploy Ns ModeControllerNamespace决定网关部署安装在网关命名空间还是控制器命名空间,详情请参阅部署模式spec.config.envoyGateway.provider.kubernetes.deploy.type
    Resources1C1GEnvoy Gateway 部署的资源请求和限制.spec.controller.resources

    建议:典型部署使用默认值,点击 创建 继续。

通过 YAML 配置

您也可以通过 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:
    resources:
      limits:
        cpu: '1'
        memory: 1024Mi
      requests:
        cpu: 100m
        memory: 256Mi

每个 EnvoyGatewayCtl 会创建一个名为 $NS-$NAMEGatewayClass,例如 envoy-gateway-operator-cpaas-default

通过 EnvoyGatewayCtl 进行高级配置

EnvoyGatewayCtl 本质上是基于 helm-operator 封装的 envoy-gateway Helm Chart。其 spec 对应 envoy-gateway chart 的 values,允许您在一个源中配置 Envoy Gateway 的各种全局级功能。

有关可用配置选项的详细信息,请参阅 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:
    resources:
      limits:
        cpu: '1'
        memory: 1024Mi
      requests:
        cpu: 100m
        memory: 256Mi