问题描述
我在 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,}