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

mutlipart/form-data parsing error on Kubernetes

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

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

当 运行 在本地使用 Docker Compose 时,这个 运行s 成功了,但是当我 运行 它在我的 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 Service 或 Ingress 配置有关。

或者,您的 Pod 可能 运行 不正确。在这种情况下,您将不得不调查 Pod 日志和 K8s 事件日志。

您可以设置较长的服务器超时 当我们上传更大的 files/slower 网络连接时会发生这种情况

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