【发布时间】:2019-05-16 07:17:37
【问题描述】:
我正在使用 AWS EKS 运行 Kubernetes。我正在为 nodeport 服务执行一些负载测试,并在访问 pod 未运行的节点时看到 ~16k-20k 的并发连接限制。我想知道是否有某种方法可以增加并发连接数。
所以我正在运行一个 nodeport 服务,它只在节点 A 上安排了 1 个 pod。我正在运行的负载测试尝试连接尽可能多的并发 websocket 连接。 websocket 只是休眠并每 30 秒发送一次心跳以保持连接处于活动状态。
当我将负载测试器 (tsung) 指向节点 A 时,在 pod 被 OOMKilled 之前,我可以获得超过 65k 的并发 websocket,因此内存是限制因素,这很好。真正的问题是当我将负载测试器指向节点 B,并且 kube-proxy 的 iptables 将连接转发到节点 A 时,突然之间,在连接开始停止之前,我只能获得大约 16k-20k 的并发 websocket 连接。根据 netstat,他们陷入了SYN_SENT 状态。
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n
...
20087 ESTABLISHED
30969 SYN_SENT
我能想到的唯一要检查的是我的 conntrack 限制,它看起来没问题。这是我从节点 B 得到的。
net.netfilter.nf_conntrack_buckets = 16384
net.netfilter.nf_conntrack_max = 131072
net.nf_conntrack_max = 131072
这是端口范围。我不确定这是否重要(我不确定 DNAT 和 SNAT 是否用完端口),但范围似乎远高于 16k。
net.ipv4.ip_local_port_range = 32768 60999
节点 A 和节点 B 的文件描述符限制和内核 TCP 设置相同,所以我认为排除了它们。
还有什么可以限制通过 iptables/netfilter 转发的并发连接数吗?
【问题讨论】:
标签: networking websocket kubernetes iptables netfilter