向Kubernetes中的容器发布大于400 KB有效负载的POST失败

Ste*_*anH 13 docker kubernetes

我在AWS中使用EKS(Kubernetes),并且在将大约400千字节的有效负载发布到该Kubernetes容器中运行的任何Web服务器时遇到问题。我遇到了某种限制,但不是大小限制,似乎很多时候都可以达到约400 KB,但有时却可以(使用Python请求进行测试)

requests.exceptions.ChunkedEncodingError: ("Connection broken: ConnectionResetError(104, 'Connection reset by peer')", ConnectionResetError(104, 'Connection reset by peer'))
Run Code Online (Sandbox Code Playgroud)

我用不同的容器(Alpine上的python Web服务器,CentOS上的Tomcat服务器,nginx等)进行了测试。

我将大小增加到400 Kbytes以上,得到的结果越一致:通过对等方重置连接。

有任何想法吗?

Ste*_*anH 6

感谢您的回答和评论,帮助我更加了解问题的根源。我确实将AWS集群从1.11升级到1.12,并且在Kubernetes中从服务访问服务时清除了该错误。但是,当使用公共dns从Kubernetes集群外部访问时,错误仍然存​​在,因此是负载均衡器。因此,在进行了更多测试之后,我发现现在问题出在Kubernetes的ALB或ALB控制器上:https ://kubernetes-sigs.github.io/aws-alb-ingress-controller/ 所以我切换回Kubernetes生成较老的ELB的服务,此问题已解决。ELB并不理想,但是暂时来说这是一个很好的解决方法,直到ALB控制器被修复或我有按下右键来修复它为止。


BMi*_*tch 0

连接被对等重置,即使是在集群内的服务之间,听起来可能是conntrack 的已知问题。该修复涉及运行以下命令:

echo 1 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_be_liberal
Run Code Online (Sandbox Code Playgroud)

您可以使用以下 DaemonSet 自动执行此操作:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: startup-script
  labels:
    app: startup-script
spec:
  template:
    metadata:
      labels:
        app: startup-script
    spec:
      hostPID: true
      containers:
      - name: startup-script
        image: gcr.io/google-containers/startup-script:v1
        imagePullPolicy: IfNotPresent
        securityContext:
          privileged: true
        env:
        - name: STARTUP_SCRIPT
          value: |
            #! /bin/bash
            echo 1 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_be_liberal
            echo done
Run Code Online (Sandbox Code Playgroud)