(GCP): Ошибка сервера. Сервер обнаружил временную ошибку и не смог выполнить ваш запрос. Пожалуйста, попробуйте еще раз через 30 секунд
Я создал "Балансировщик нагрузки" в Google Cloud и подключил к нему 2 виртуальные машины. Когда я отправляю некоторые запросы к "Балансировщику нагрузки", иногда он передается виртуальным машинам, подключенным к балансировщику нагрузки, а иногда выдает следующую ошибку, даже если проверка работоспособности на 100% в порядке в это время.
Ошибка: ошибка сервера. Сервер обнаружил временную ошибку и не смог выполнить ваш запрос.
Повторите попытку через 30 секунд.
2 ответа
В моем случае проблема заключалась в том, что проверка работоспособности не возвращала 200. Вместо этого он возвращал 302 (Найдено) при вызове по умолчанию / и перенаправлял на другой URL-адрес с 200 (который игнорируется при проверке Loadbalancer) и считал этот узел «неработоспособным» и вместо этого перенаправлял входящий http/s запрос к сломанному узлу удалил его из ротации и вернул клиенту сообщение об ошибке 502.
Ошибка: Ошибка сервера Сервер обнаружил временную ошибку и не смог выполнить ваш запрос. Повторите попытку через 30 секунд.
Под моим LoadBalancer находился кластер GKE с модулем gke ingress->service-> и не были настроены явные проверки работоспособности/готовности, поэтому по умолчанию проверки работоспособности попадают в / с 302/Found/redirect.
После добавления этих зондов в манифест развертывания и указания их на конечную точку, которая возвращает OK/200 (/-/здорово, ///готово в моем случае, когда prometheus работает внутри модуля), проблема была исправлена.
К сожалению, gke ingress имел неинформативное сообщение НЕЗДОРОВО только в аннотациях, поэтому мне потребовалось некоторое время, чтобы понять, что вызывает эту проблему.
Этот ответ был создан для поддержки сообщества на основе ограниченной информации, предоставленной ОП, и комментариев, написанных выше.
Самое правильное решение, которое нужно принять, когда вы пытаетесь определить основную причину проблемы с балансировщиком нагрузки HTTP, — просмотреть записи журнала.
Согласно официальной документации Google . Записи журнала балансировки нагрузки HTTP(S) содержат информацию, полезную для мониторинга и отладки трафика HTTP(S).
Записи журнала содержат следующие типы информации:
- Общая информация , такая как серьезность, идентификатор проекта, номер проекта и отметка времени.
- Поля журнала HttpRequest . Однако,
HttpRequest.protocol
не заполняется для журналов HTTP(S) Load Balancing Cloud Logging.- Поле statusDetails внутри structPayload . Это поле содержит строку, объясняющую, почему балансировщик нагрузки вернул именно тот статус HTTP, который он сделал. В приведенных ниже таблицах содержатся дополнительные пояснения к этим строкам журнала. Поле statusDetails недоступно для региональных внешних балансировщиков нагрузки HTTP(S).
- Перенаправления (код состояния ответа HTTP 302 Found) , отправленные балансировщиком нагрузки, не регистрируются. Перенаправления, отправленные из серверных экземпляров, регистрируются.
Чтобы включить записи журнала в балансировщике нагрузки HTTP, следуйте этому руководству .
Сообщение «Ошибка: Ошибка сервера. Сервер обнаружил временную ошибку и не смог выполнить ваш запрос». Может быть вызвано несколькими причинами, в том числе:
- Нет правил брандмауэра, разрешающих проверки работоспособности.
- Программное обеспечение на серверной части не работает.
На этой странице вы можете найти подробное руководство по полному устранению неполадок, связанных с общими проблемами подключения.
Я нашел эти сообщения, связанные с балансировщиком нагрузки HTTP и ответом 502, вы можете найти полезную информацию в этих темах.