【问题标题】:How can I have more than 64K connections per node in Kubernetes?如何在 Kubernetes 中每个节点拥有超过 64K 的连接?
【发布时间】:2022-02-05 04:22:43
【问题描述】:

我有一个 EKS Kubernetes 集群。高级设置是:

a) 有一个 EC2 实例,我们称它为“VM”或“Host”

b) 在VM中,有一个POD运行2个容器:Side Car HAProxy Container + MyApp Container

当外部请求到来时,在 HAProxy 容器内部,我可以看到源 IP 是“主机”IP。由于主机只有一个 IP,因此最多可以有 64K 连接到 HAProxy。

我很想知道如何解决这个问题,因为我希望每个主机能够建立大约 256K 的连接。

【问题讨论】:

  • 同时连接 64k?你确定瓶颈是连接数吗?即使一个连接的数据传输速度为 1 字节/秒,一个 EC2 实例总共必须处理 64MB/秒。并且...是一个实例可以称为high availability代理吗?
  • 275k requests per second 是针对整个服务的大规模 DDOS 攻击。而你打算由一个“主机”来处理这一切?
  • 这些连接通常非常安静并且发送的数据很少。这些不是每秒请求数。我的限制是 haproxy 端的单一源 IP(即主机的 IP),最大连接数限制为 64k
  • 我添加了关于64k 含义以及它如何工作以及理论上做什么的解释。但是,如果您的问题how to workaround this problem 的意思是how exactly configure EKS cluster,那么这将毫无用处,请忽略它

标签: kubernetes amazon-eks


【解决方案1】:

我不确定你是否理解64k 限制的原因,所以请尝试解释一下

起初这是一个很好的answer 64k 限制

假设HAProxy (192.168.100.100) 监听端口8080 和空闲端口Host (192.168.1.1) 是1,353~65,353,所以你有以下组合:

source 192.168.1.1:1353~65353 → destination 192.168.100.100:8080

即 64k 同时连接。我不知道 NAT 表多久更新一次,但更新后未使用的端口将被重用。所以同时很重要

如果您唯一的问题是每个 IP 的连接数限制,这里有几个解决方案:

  1. 运行多个HAProxyes。三个容器将限制增加到 64,000 X 3 = 192,000
  2. 监听HAProxy 上的多个端口(检查SO_REUSEPORT)。三个端口(@98​​7654333@、80818082)将最大连接数增加到 192,000

Host 接口 IP 就像 Docker 内部网络的网关,所以我不确定是否可以为 HostHAProxy 设置一对 IP。至少我没有找到有关它的信息。

【讨论】:

    【解决方案2】:

    事实证明,在 Kubernetes 中,我们可以配置我们希望客户端访问服务的方式,而我们的选择是 nodePort。当我们将其更改为 hostPort 时,可以在 haproxy 容器中看到源 IP,因此我所拥有的限制被删除。

    如果此选项失败,我的下一个选项是尝试其他响应中的建议,即让 haproxy 在多个端口中侦听。谢天谢地,这不是必需的。

    谢谢!

    【讨论】:

      猜你喜欢
      • 2011-11-23
      • 2015-06-09
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 2018-07-09
      相关资源
      最近更新 更多