Наш балансировщик нагрузки GCP иногда возвращает 502 для некоторых запросов с «failed_to_connect_to_backend». Бывает периодически. При поиске в Google и переполнении стека я нашел эту ссылку: https://cloud.google.com/load-balancing/docs/https#timeouts_and_retries. Я также просмотрел несколько статей, касающихся тайм-аутов проверки активности на балансировщике нагрузки GCP.
Мои серверы в Kubernetes используют нехватку ресурсов ЦП, поэтому не похоже, что серверная часть слишком загружена.
Вот пример кода, который я использую для настройки Http Server:
server := &http.Server{
Addr: addr,
Handler: handler,
ReadHeaderTimeout: 20 * time.Second,
ReadTimeout: 1 * time.Minute,
WriteTimeout: 2 * time.Minute,
IdleTimeout: time.Duration(tcpKeepAliveTimeout) * time.Second,
}
if e := listenAndServe(server, 620); e != nil && e != http.ErrServerClosed {
return err
}
func listenAndServe(srv *http.Server, tcpKeepAliveTimeout int) error {
addr := srv.Addr
if addr == "" {
addr = ":http"
}
lc := net.ListenConfig{
KeepAlive: 620 * time.Second,
}
ln, err := lc.Listen(context.Background(), "tcp", addr)
if err != nil {
return err
}
defer ln.Close()
if err != nil {
return err
}
return srv.Serve(ln)
}
Я устанавливаю тайм-аут 620 секунд для TCP Keep-Alive (рекомендуется в документации Google), но это не так. t помочь, и я все еще получаю 502s. Что я делаю не так?