Kubernetes 上的 mutlipart/form-data 解析错误

问题描述

我在 go 服务器中的标准 FormFile net/http 结构上调用函数 Request,如下所示:

    multiFile,header,err := req.FormFile("file")
    if err != nil {
        log.Printf("reader error: %s",err)
        // response error handling
        return
    }

使用 Docker Compose 在本地运行时,这运行成功,但是当我在 Kubernetes 集群上运行它时,我从 pod 日志中收到以下错误

reader error: multipart: NextPart: read tcp [host]:[port]->[differentHost]:[differentPort]: I/O timeout

我在 pod 上安装了一个卷,用于处理任何写入磁盘的溢出缓冲区。这是相关的 k8s 部署配置:

    spec:
      containers:
          volumeMounts:
            - mountPath: /tmp
              name: file-volume
      securityContext:
        fsGroup: 1000
        runAsGroup: 1000
        runAsUser: 1000
      volumes:
        - emptyDir: {}
          name: file-volume

有谁知道是什么导致了这个问题以及如何解决

解决方法

读取超时表明这不是 Pod 内部的问题,例如卷挂载,但服务发现问题。客户端似乎无法读取您的 Pod。可能与您的 K8s 服务或 Ingress 配置有关。

或者,您的 Pod 可能无法正常运行。在这种情况下,您必须调查 Pod 日志和 K8s 事件日志。

,

您可以设置较长的服务器超时时间,当我们上传较大的文件/较慢的网络连接时会发生这种情况

s := &http.Server{
    ReadTimeout:  150 * time.Second,WriteTimeout: 150 * time.Second,}