Как разрешить только одно соединение на модуль с помощью входного контроллера nginx - PullRequest
2 голосов
/ 20 октября 2019

Мой кластер Kubernetes использует набор replicaSet для запуска N подобных модулей. Каждый модуль может обрабатывать только одно соединение веб-сокета из-за ограничений ресурсов. В моем Kubernetes используется входной контроллер nginx.

Есть ли способ заставить nginx отправлять только одно входящее соединение websocket на модуль и в случае отсутствия доступных модулей отклонять входящее соединение?

Ответы [ 2 ]

3 голосов
/ 21 октября 2019

Я не очень хорошо знаком с установкой входа Kubernetes Nginx, но, если предположить, что она предоставляет некоторые параметры конфигурации Nginx для настройки групп серверов, в функции server есть параметр под названием max_conns, который позволит вамограничить количество подключений к данному серверу. Предполагая, что во входном контроллере есть сопоставление, должна быть возможность установить max_conns=1 для каждого сервера, который создается и добавляется в конфигурацию Nginx под капотом.

http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

Редактировать: небольшое беглое исследование и похоже, что это действительно возможно. Похоже, вы можете указать это в ConfigMap как nginx.org/max-conns в соответствии с основным списком параметров здесь: https://github.com/nginxinc/kubernetes-ingress/blob/master/docs/configmap-and-annotations.md

0 голосов
/ 20 октября 2019

Вы можете использовать readinessProbe с относительно низким periodSecond и, очевидно, {success,failure}Threshold, установленным в 1, чтобы высвободить Pod или нет как можно быстрее.

По сути, вы можете настроить сценарий или простую конечную точку HTTP, которая возвращает ошибочный код состояния в случае установления соединения: поэтому конечная точка Pod будет удалена из списка конечных точек службы и не будет выбрана. Ingress Controller.

Просто имейте в виду, что это решение может зависеть от условий гонки, но оно самое простое: лучшим решением может быть использование Service Mesh, но при этом возникает дополнительная сложность.

...