ошибка синтаксического анализа данных в Kubernetes

#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 вызовом функции. Я рассмотрю потенциальные проблемы со шлюзом или входом