Назад |
Перейти на главную страницу
Kubernetes (K8S): клиенты TCP ждут очень долгое время ожидания при подключении к службе, когда нет модулей, обслуживающих его запросы.
Моя проблема возникла при использовании Redis в Kubernetes, но похоже, что это проблема не с самим Redis, а с сетью / инфраструктурой. Мой сценарий:
- У меня есть служба Redis с одним Redis Pod, обслуживающим ее.
- Подключаю Redis Client к Сервису.
- Я удаляю Redis Pod.
- Клиентское соединение разорвано.
- Клиент Redis пытается повторно подключиться.
- В это время Redis Replica Ret вызывает новый Redis Pod, и служба Redis начинает отвечать на запросы / создавать новые соединения.
- Однако мой существующий клиент Redis зависает при подключении (первая попытка повторного подключения), и он остается таким, пока не получит тайм-аут (который примерно после 130 секунд).
- При второй попытке переподключения он немедленно подключается.
Кажется, что проблема не существует в моем dev env (локальные контейнеры докеров), потому что тайм-аут появляется через секунду или 2.
Кроме того, у клиента, который я использую, нет возможности настроить тайм-аут сокета.
- Является ли это правильным поведением службы - зависание соединения до истечения времени ожидания, когда нет модулей для обработки запросов? Если бы он немедленно ответил ошибкой, такой проблемы бы не было.
- Есть ли способ настроить этот тайм-аут на приемлемое значение где-нибудь (на уровне обслуживания, в какой-либо конфигурации сети и т. Д.)? Скажем, 5 секунд было бы нормально.
Сервис - это абстракция в Kubernetes, которая определяет логический набор подов и политику доступа к ним. Технически служба - это тип ресурса Kubernetes, который заставляет прокси-сервер быть настроенным для пересылки запросов к набору модулей.
В вашем случае ваш Redis Client подключается напрямую к Redis Pod с помощью некоторых правил брандмауэра, настроенных в Сервисе. Следовательно, если Сервис не был затронут, проблемы с подключением могут появиться только на стороне модуля или на стороне клиента. Итак, вам нужно искать для них параметры конфигурации.