У нас есть HTTP Балансировщик нагрузки, созданный приложением kubernetes, который указывает на бэкэнд, образованный множеством модулей, запускающих nginx и Ruby on Rails.
Взглянув на журналы балансировки нагрузки, мы обнаружили все большее число запросов с кодом ответа 0
и statusDetails
= client_disconnected_before_any_response
.
Мы пытаемся понять, почему это происходит, но мы не нашли ничего подходящего. В журналах доступа или ошибок nginx ничего нет.
Это происходит для нескольких запросов, от GET до POST.
Мы также подозреваем, что иногда, несмотря на то, что запрос регистрируется с этой ошибкой, запросы фактически передаются на бэкэнд. Например, мы видим ошибки PG :: UniqueViolation, из-за того, что идентификационные запросы для регистрации дважды отправляются на сервер в нашей конечной точке регистрации.
Любая помощь будет оценена по достоинству. Спасибо!
ОБНОВЛЕНИЕ 1
В качестве запрошенного здесь находится файл yaml для входного ресурса:
ОБНОВЛЕНИЕ 2
Я создал метку Stackdriver на основе журнала, чтобы подсчитать количество запросов, которые представляют это поведение. Вот диаграмма:
Большие пики приблизительно соответствуют отметке времени для этих событий кубернетов:
Полная ошибка: Readiness probe failed: Get http://10.48.1.28:80/health_check: net/http: request canceled (Client.Timeout exceeded while awaiting headers)"
Так что иногда кажется, что готовность зондов для стручков позади бэкэнда терпит неудачу, но не всегда.
Вот определение готовностиProbe
readinessProbe:
failureThreshold: 3
httpGet:
httpHeaders:
- name: X-Forwarded-Proto
value: https
- name: Host
value: [redacted]
path: /health_check
port: 80
scheme: HTTP
initialDelaySeconds: 1
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 5