gpt4 book ai didi

networking - Kubernetes nodeport 并发连接数限制

转载 作者:行者123 更新时间:2023-12-02 11:37:27 30 4
gpt4 key购买 nike

我正在使用 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 转发的并发连接数吗?

最佳答案

在访问 pod 未运行的 NodePort 时,性能总是会变差。本质上,您的数据包正在通过额外的跃点尝试(通过 iptables)到达其最终目的地。

我建议使用 source IP为您的NodePort服务。基本上,用这个修补你的服务:

$ kubectl patch svc <your-service> -p '{"spec":{"externalTrafficPolicy":"Local"}}'

然后让您的负载均衡器仅将流量转发到服务流量的 NodePort。

或者,如果您想考虑性能更好的东西,可以考虑使用代理模式 ipvs或类似 BPF/Cillium为您的叠加层。

关于networking - Kubernetes nodeport 并发连接数限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53789539/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com