#go #kubernetes #multipart
#Вперед #kubernetes #составная часть
Вопрос:
Я вызываю функцию FormFile
в стандартной net/http
Request
структуре на моем сервере go следующим образом:
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
У меня есть том, подключенный к моему модулю для обработки любых записей на диск из-за переполнения буферов. Вот соответствующая конфигурация развертывания k8s:
spec:
containers:
volumeMounts:
- mountPath: /tmp
name: file-volume
securityContext:
fsGroup: 1000
runAsGroup: 1000
runAsUser: 1000
volumes:
- emptyDir: {}
name: file-volume
Кто-нибудь знает, что вызывает эту проблему и как ее исправить?
Комментарии:
1. установлен ли на вашем сервере тайм-аут чтения?
2. Установка длительного времени ожидания чтения вместо использования по умолчанию исправила это. Если вы отправите свой комментарий в качестве ответа, я выберу его как правильный ответ
Ответ №1:
вы можете установить длительное время ожидания сервера, это происходит, когда мы загружаем большие файлы / медленные сетевые подключения
s := amp;http.Server{
ReadTimeout: 150 * time.Second,
WriteTimeout: 150 * time.Second,
}
Ответ №2:
Тайм-аут чтения предполагает, что это не столько проблема с внутренними компонентами вашего модуля, например, с подключением тома, сколько проблема обнаружения службы. Похоже, клиент не может прочитать ваш модуль. Возможно, это как-то связано с вашей службой K8s или конфигурацией входа.
В качестве альтернативы, возможно, ваш модуль не работает должным образом. В этом случае вам придется исследовать журналы Pod и журнал событий K8s.
Комментарии:
1. Модуль ведет журнал, и любой маршрут регистрирует
fmt.Println
операторы, которые появляются передFormFile
вызовом функции. Я рассмотрю потенциальные проблемы со шлюзом или входом