Как отладить ошибку 502 в GCP LoadBalancer

У меня есть вход k8s с более чем 5 серверными службами. Вход порождает GoogleCloud LoadBalancer.

Трафик к каждой из служб направляется по правилу http path. Например. одно приложение на /foo, другое на /bar и т. д. Все они работают нормально. Затем я добавил новое приложение с серверной службой и правилом маршрутизации, точно так же, как и другие.

Но я постоянно получаю эту ошибку, когда нажимаю URL-адрес нового приложения:

Error: Server Error
The server encountered a temporary error and could not complete your request.
Please try again in 30 seconds.

Когда я открываю вход в консоль GCP, я вижу это предупреждение: введите здесь описание изображения

и нездоровый сервис — это сервис из моего недавно добавленного приложения.

Странно то, что приложение действительно получает трафик, когда я нажимаю URL. Я вижу это в журналах. Но я все равно получаю ошибку 502, а серверная служба отображается как неработоспособная.

Я не совсем уверен, как это отладить, чтобы понять, в чем проблема.


comment
URL-адрес проверки работоспособности вашей серверной службы возвращает ответ 200? Возможно, проверка работоспособности не удалась, потому что ваше приложение перенаправляет на страницу входа (ответ 302) в вашем тесте живости/готовности.   -  person dishant makwana    schedule 11.06.2021
comment
У меня нет конечной точки проверки работоспособности в этом приложении. Это просто сервер node.js, который обслуживает статические файлы. Настроено так, что попадание в любую конечную точку (также известную как *) будет либо перенаправлять в другое приложение (если нет доступного токена доступа), либо просто обслуживать статические файлы.   -  person Milkncookiez    schedule 11.06.2021
comment
Когда вы настраиваете входящий ресурс, GCP создает проверки работоспособности для всех серверных служб, которые являются частью балансировщика нагрузки. Путь по умолчанию — корневой URL-адрес '/'. Если вы хотите, чтобы URL-адрес проверки работоспособности был чем-то другим, вам нужно прикрепить датчик готовности к своим модулям.   -  person dishant makwana    schedule 11.06.2021
comment
Как прокомментировали другие, если серверная часть получает трафик И балансировщик нагрузки сообщает НЕРАБОТОСПОСОБНО, ваша проверка работоспособности не удалась. Как только вы решите эту проблему, опубликуйте ответ, показывающий проблему и решение для других.   -  person John Hanley    schedule 11.06.2021
comment
Я вижу во входных документах GCP, что путь по умолчанию это / корневой URL для проверки работоспособности. Но если у меня есть зонд readiness, вход перенаправит проверку работоспособности на путь зонда readiness. Я добавил зонд, но служба по-прежнему зависла в состоянии UNHEALTHY. И когда я открываю объект проверки работоспособности в консоли GCP, он по-прежнему имеет / в качестве пути.   -  person Milkncookiez    schedule 13.06.2021
comment
Я перезапустил вход, надеясь, что он обновит объект проверки работоспособности, обнаружив доступность зонда /readiness и конечной точки. Но это не так. Итак, мне пришлось вручную обновить path, к которому обращался объект проверки работоспособности серверной службы. Я предполагаю, что модуль с зондом readiness должен существовать до того, как будет настроен вход, иначе он не обновит объект проверки работоспособности автоматически.   -  person Milkncookiez    schedule 13.06.2021
comment
Существует сообщение с той же ошибкой . Но я не уверен, что проблема в вашем случае связана с ограничениями документации Объединение нескольких ресурсов Ingress в один балансировщик нагрузки Google Cloud не поддерживается.   -  person Pit    schedule 14.06.2021


Ответы (1)


Итак, проблема заключалась в том, что проверка работоспособности LB нажимала /, которая была несуществующей конечной точкой в ​​​​приложении (иначе она не возвращала OK 200).

Я добавил зонд readiness в развертывание k8s. Согласно документам GCP Ingress, при наличии readiness probe, вход подхватит его и будет использовать для проверки работоспособности LB.

Мне также пришлось вручную обновить путь, по которому сталкивался объект проверки работоспособности серверной службы. Я предполагаю, что модуль с проверкой готовности должен существовать до того, как будет настроен вход, иначе он не обновит объект проверки работоспособности автоматически.

person Milkncookiez    schedule 16.06.2021