Исправление ошибок повторного развертывания службы kubernetes с включенной поддержкой активности

У нас есть служба kubernetes, работающая на трех машинах. Клиенты как внутри, так и за пределами нашего кластера взаимодействуют с этой службой через http с включенной опцией поддержания активности. Во время развертывания службы у выходящих модулей есть проверка готовности, которая начинает завершаться ошибкой при запуске выключения и соответствующим образом удаляется из списка конечных точек службы, однако они по-прежнему получают трафик, и некоторые запросы завершаются сбоем, поскольку контейнер внезапно закрывается. Мы полагаем, что это связано с поддержкой активности, которая позволяет клиенту повторно использовать эти соединения, которые были установлены, когда хост был готов. Есть ли ряд шагов, которым нужно следовать, чтобы убедиться, что мы не сталкиваемся с этими проблемами? Мы хотели бы разрешить поддерживающие соединения, если это вообще возможно.


person jamesatha    schedule 20.03.2017    source источник


Ответы (2)


Проблема возникает, если проксирование/балансировка нагрузки происходит на уровне 4, а не на уровне 7. Для внутренних служб (служба Kubernetes типа ClusterIP), поскольку прокси-сервер Kube выполняет проксирование с использованием прокси уровня 4, клиенты будут поддерживать соединение даже после того, как стручок больше не готов служить. Точно так же для сервисов типа LoadBalancer, если в качестве типа серверной части задано значение TCP (что по умолчанию используется для AWS ELB), возникает та же проблема. Дополнительные сведения см. в этой проблеме.

Решение этой проблемы на данный момент таково:

  • Если вы используете облачный LoadBalancer, установите серверную часть на HTTP. Например, вы можете добавить аннотацию service.beta.kubernetes.io/aws-load-balancer-backend-protocol к службе kubernetes и установить для нее значение HTTP, чтобы ELB использовал HTTP-прокси вместо TCP.
  • Используйте прокси-контроллер/контроллер входящего трафика уровня 7 в кластере для маршрутизации трафика вместо его отправки через kube-proxy.
person Buchi    schedule 26.03.2017

Мы столкнулись с той же проблемой, поэтому просто интересно, нашли ли вы способ обойти эту проблему. Согласно этой ссылке должна быть возможность сделайте это, установив балансировщик нагрузки перед службой, который будет делать прямые запросы к модулям и самостоятельно обрабатывать соединения Keep-Alive.

Мы продолжим исследовать эту проблему и посмотрим, сможем ли мы найти способ развертывания с нулевым временем простоя с помощью поддерживающих соединений.

person Yoanis Gil    schedule 23.03.2017