1

我的 kubernetes 集群(1.18.20,calico 3.14.2)遇到了相当奇怪的行为:当我尝试通过 curlNodePort服务将 2 兆字节的 JSON 文件上传到 pod 时,传输被Recv failure: Connection reset by peer. 流量捕获显示客户端和服务器都收到来自网络的 RST 数据包,但没有发送它们。相同大小的二进制文件上传成功,但无论Content-Type指定如何,JSON 都会被拒绝。pod 之间的文件传输(使用类似的命令和相同的文件)顺利进行。通过入口上传(也使用 配置NodePort)也失败了。接收到的片段大小始终相同,约为 850K。

我已经使用nc -l 80*而不是具有相同结果的实际服务。

显然,kube-proxy不喜欢大的 JSON 文件。

是否可以从外部客户端向 pod 发送大的 JSON 文件,或者这样的限制是硬编码的?

UPD1

新集群(1.22.0,calico 3.20.0)的行为相同。

UPD2

系统不会拒绝所有大的 JSON 有效负载,但只会拒绝百分之几的用户上传。Payload 由客户端应用程序特制:多卷 Zip 存档的第一部分采用 base64 编码并封装为 JSON 文件 ('{ "data": "..." }')。导致连接中断的片段大小约为 640K。

中的过滤过程看起来像错误kube-proxy

4

2 回答 2

1

不幸的是,问题的根源在于 IDS/IPS 配置错误。

kube-proxy 无关

于 2021-11-12T07:26:38.647 回答
0

您是否尝试过使用conntrack来解决您的连接问题?它只是通过以下命令安装:

apt-get install conntrack #[ debian/ubuntu ]
yum install conntrack #[ centos/redhat ] 

您可以对最大尺寸进行任何试验,但您可以从以下指标开始检查是否发生了某些事情:

sysctl -w net.netfilter.nf_conntrack_buckets=300
sysctl -w net.netfilter.nf_conntrack_max=1200

请在此处找到更详细的指南

于 2021-11-11T10:52:38.197 回答