跟我学EnvoyGateway:连接限制实践

简介

连接限制功能允许用户限制 Gateway 或 Listener 上同时活跃的 TCP 连接数。当达到连接限制时,Envoy 代理会立即关闭新连接。还可以配置连接拒绝的延迟时间。

用户可能希望限制连接数的原因包括:

  • 保护 CPU 和内存等资源。
  • 确保不同的 Listener 可以公平地共享全局资源。
  • 防范 DoS 等恶意攻击。

Envoy Gateway 引入了一种新的 CRD(自定义资源定义)—— Client Traffic Policy,允许用户描述期望的连接限制设置。该资源可以与 Gateway 关联,来实现流量的控制和限制。

值得注意的是,Envoy 的连接限制实现是分布式的,多个 Envoy 代理之间的计数器不会同步。

Client Traffic Policy 被附加到 Gateway 上时,连接限制的应用方式会根据 Listener 使用的协议有所不同:

  • HTTP:所有在 Gateway 中的 HTTP Listener 会共享一个连接计数器,并且使用该计数器定义的连接限制。
  • HTTPS/TLS:每个 HTTPS/TLS Listener 都会有一个独立的连接计数器,并且使用该计数器定义的连接限制。

前提条件

安装 Envoy Gateway

请按照快速入门任务中的步骤,安装 Envoy Gateway 和示例清单。完成这些步骤后,您应当能够使用 HTTP 查询示例后端。

验证 Gateway 状态:

kubectl get gateway/eg -o yaml

安装 hey 负载测试工具

hey CLI 工具将用于生成负载并测量响应时间。按照 Hey 项目的文档 中的安装说明进行安装。

测试并自定义连接限制设置

以下示例使用 hey 打开 10 个连接,并在每个连接上执行每秒 1 次请求,持续 10 秒。

hey -c 10 -q 1 -z 10s -host "www.example.com" http://${GATEWAY_HOST}/get

总结

Total:    10.0058 secs
Slowest:  0.0275 secs
Fastest:  0.0029 secs
Average:  0.0111 secs
Requests/sec:    9.9942

状态码分布

[200] 100 responses

此时没有设置连接限制,因此所有 100 个请求均成功。

接下来,我们设置连接限制为 5 个连接。

应用连接限制

以下是设置连接限制的 YAML 配置:

apiVersion: gateway.envoyproxy.io/v1alpha1
kind: ClientTrafficPolicy
metadata:
  name: connection-limit-ctp
  namespace: default
spec:
  targetRefs:
    - group: gateway.networking.k8s.io
      kind: Gateway
      name: eg
  connection:
    connectionLimit:
      value: 5    

通过以下命令应用配置:

kubectl apply -f connection-limit-policy.yaml

执行负载测试

再次执行负载测试:

hey -c 10 -q 1 -z 10s -host "www.example.com" http://${GATEWAY_HOST}/get

总结

Total:    11.0327 secs
Slowest:  0.0361 secs
Fastest:  0.0013 secs
Average:  0.0088 secs
Requests/sec:    9.0640

状态码分布

[200] 50 responses

错误分布

[50] Get "http://localhost:8888/get": EOF

通过新设置的连接限制,只有 5 个连接成功建立,因此仅有 50 个请求成功。

注意事项

  • 目标范围ClientTrafficPolicy 可以应用于 GatewayHTTPRoute
  • 限制优化:设置合理的连接限制值,避免影响正常业务流量。
  • 监控集成:结合 Prometheus 和 Grafana 等监控工具,实时跟踪和调整流量策略。

专业术语表

专业术语翻译
ClientTrafficPolicy客户端流量策略
ConnectionLimit连接限制
HTTPRouteHTTP 路由
Gateway网关
Listener监听器
Workload工作负载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值