3. 资源配额模型基础:Kubernetes ResourceQuota 与 LimitRange 原理、网关场景下的特殊配额需求(连接数、QPS、内存)

在云原生网关场景中,资源配额模型是保障集群稳定性与多租户隔离的核心机制。Kubernetes 原生提供了 ResourceQuota 和 LimitRange 两种资源管控原语,而网关特有的连接数、QPS、内存等配额需求则需要在此基础上进行扩展与适配。本节将深入剖析这两类原语的原理,并明确网关场景下的特殊配额模型。

3.1 Kubernetes ResourceQuota 原理

ResourceQuota 是命名空间级别的资源配额控制器,用于限制命名空间中所有 Pod 或容器的资源使用总量。它通过准入控制(Admission Control)在资源创建或更新时进行校验,防止单个租户过度占用集群资源。

资源类型 作用范围 示例配置
计算资源 CPU、内存(requests/limits) requests.cpu: "4", limits.memory: "8Gi"
存储资源 PVC 数量、存储总量 persistentvolumeclaims: "10", requests.storage: "100Gi"
对象数量 Pod、Service、ConfigMap 等 pods: "50", services: "10"
扩展资源 GPU、FPGA 等自定义资源 requests.nvidia.com/gpu: "4"
关键行为: ResourceQuota 是“硬限制”,一旦命名空间内资源总量达到配额上限,后续创建请求将被拒绝,并返回 403 Forbidden。它不提供弹性超卖能力,适用于生产环境严格管控。

3.2 LimitRange 原理

LimitRange 是命名空间级别的默认资源约束策略,用于为未显式设置资源 requests/limits 的 Pod 或容器注入默认值,并限制单个 Pod/容器的资源上下界。它与 ResourceQuota 配合使用,形成“个体约束 + 总量限制”的双层管控。

  • 默认值注入: 若 Pod 未设置 resources.requests,LimitRange 自动填充默认值。
  • 边界限制: 强制单个容器的 CPU 或内存不能超过 max,不能低于 min。
  • 比例约束: 可设置 maxLimitRequestRatio,限制 limit/request 比值,防止过度超卖。
apiVersion: v1
kind: LimitRange
metadata:
  name: gateway-limit-range
  namespace: envoy-gateway
spec:
  limits:
  - max:
      cpu: "4"
      memory: "8Gi"
    min:
      cpu: "100m"
      memory: "128Mi"
    default:
      cpu: "500m"
      memory: "512Mi"
    defaultRequest:
      cpu: "200m"
      memory: "256Mi"
    type: Container
最佳实践: 在网关命名空间中,建议为 Envoy 代理 Pod 设置 maxLimitRequestRatio: 2,避免 limit 远大于 request 导致节点资源碎片化。

3.3 网关场景下的特殊配额需求

Kubernetes 原生 ResourceQuota 仅覆盖计算、存储和对象数量,无法直接管控网关特有的业务级配额。Envoy Gateway 需要引入以下三类特殊配额模型:

配额维度 描述 管控粒度 典型阈值
连接数 网关同时维持的 TCP/HTTP 连接总数 每个 Envoy Worker 线程 5000 ~ 50000
QPS 每秒请求处理速率(吞吐量) 每个路由 / 每个租户 1000 ~ 100000
内存 Envoy 进程堆内存与连接池内存 每个 Pod / 每个连接 256Mi ~ 4Gi
注意: 连接数和 QPS 配额无法通过 Kubernetes 原生 ResourceQuota 实现,必须依赖 Envoy 的 本地限流(Local Rate Limiting) 或 全局限流(Global Rate Limiting) 扩展机制。Envoy Gateway 通过 RateLimitFilter 和 EnvoyProxy CRD 暴露这些配额配置。

3.4 网关配额模型架构图

下图展示了 Kubernetes 原生资源配额与网关特殊配额在 Envoy Gateway 中的分层关系:

网关资源配额模型分层架构 网关资源配额模型分层架构 Kubernetes 原生配额层 ResourceQuota(总量限制) + LimitRange(个体约束) 管控维度:CPU、内存、存储、对象数量 网关特殊配额层 连接数(Connections) | QPS(吞吐量) | 内存(Heap + Connection Pool) 实现机制:Envoy 本地限流 / 全局限流 / 连接管理 管控粒度:每个 Worker 线程 / 每个路由 / 每个租户 Envoy Gateway CRD 适配层 RateLimitFilter(限流策略) | EnvoyProxy(连接/内存配置) SecurityPolicy(认证与配额联动) | BackendTrafficPolicy(后端流量控制)

3.5 连接数与 QPS 配额实现对比

在 Envoy Gateway 中,连接数和 QPS 配额的实现路径不同,下表对比了两种典型场景的配置方式:

配额类型 Envoy 原生能力 Envoy Gateway CRD 示例配置片段
连接数 listener.connection_limit EnvoyProxy.spec.proxy.listener.connectionLimit connectionLimit: 10000
QPS HttpConnectionManager + 本地限流过滤器 RateLimitFilter + BackendTrafficPolicy requestsPerSecond: 5000
内存 --max-obj-name-len + 连接池限制 EnvoyProxy.spec.proxy.resources.limits.memory memory: "2Gi"
核心结论: 网关场景下的资源配额模型是“Kubernetes 原生 + 网关特殊”的双层结构。ResourceQuota 和 LimitRange 负责基础设施层面的资源兜底,而连接数、QPS、内存等业务级配额必须通过 Envoy Gateway 的 CRD 扩展机制实现。在后续章节中,我们将基于此模型设计发布包的完整性校验规则。