Настройка получения событий по произвольному порту
Некоторые точки входа, такие как Syslog, позволяют получать события только по портам из определенного диапазона, например, 30000—32767. Однако, если нет возможности передавать события из внешней системы на указанные порты, вы можете настроить систему на получение событий по портам вне этого диапазона.
Вы можете настроить получение событий по произвольному порту одним из следующих способов:
Настройка отдельного порта в Kubernetes и PostgreSQL
Настройка отдельного порта в Kubernetes и PostgreSQL для получения событий по произвольному порту состоит из следующих этапов:
Редактирование манифеста kube-apiserver
Выполните нижеприведенные действия на узлах кластера, в котором будет размещен коллектор, принимающий события по произвольному порту:
-
Если коллектор будет размещен в центральном кластере — на всех master-узлах центрального кластера.
-
Если коллектор будет размещен в кластере сателлита — на всех узлах кластера сателлита.
Действия в кластере зависят от используемой в нем платформы оркестрации:
-
Kubernetes
-
K0s
-
Подключитесь к терминалу master-узла кластера.
-
Откройте для редактирования файл
/etc/kubernetes/manifests/kube-apiserver.yaml. -
Добавьте или отредактируйте параметр
service-node-port-rangeв секцииspec.containers.command, в качестве значения указав диапазон портов, содержащий порт, по которому будут поступать события.Формат параметра:
spec: containers: - command: - --service-node-port-range=<start_port>-<end_port>Здесь:
-
<start_port>— номер начального порта диапазона. -
<end_port>— номер конечного порта диапазона.
Пример значения параметраservice-node-port-rangeдля порта514spec: containers: - command: - --service-node-port-range=514-32767 -
-
Подключитесь к терминалу узла кластера.
-
Откройте для редактирования файл
/etc/k0s/k0s.yaml.Путь к файлу /etc/k0s/k0s.yamlприведен по умолчанию и в зависимости от особенностей инсталляции может отличаться. -
Добавьте или отредактируйте параметр
service-node-port-rangeв секцииspec.api.extraArgs, в качестве значения указав диапазон портов, содержащий порт, по которому будут поступать события.Формат параметра:
spec: api: extraArgs: service-node-port-range: "<start_port>-<end_port>"Здесь:
-
<start_port>— номер начального порта диапазона. -
<end_port>— номер конечного порта диапазона.
Пример значения параметраservice-node-port-rangeдля порта514spec: api: extraArgs: service-node-port-range: "514-32767" -
Изменение параметров точки входа в PostgreSQL
Измените в PostgreSQL диапазон портов, допустимый для необходимой вам точки входа. Для этого:
-
Откройте консольный клиент PostgreSQL:
-
PostgreSQL в кластере Kubernetes
-
Вынесенная PostgreSQL
-
Подключитесь к терминалу master-узла кластера.
-
Откройте терминал контейнера PostgreSQL, выполнив следующую команду:
kubectl -n <namespace> exec postgresql-0 -it -- bashЗдесь:
-
<namespace>— название пространства имен, в котором установлена система.Вы можете получить название пространства имен, в котором установлена система, с помощью утилиты evoctl.
-
-
В терминале контейнера откройте консольный клиент PostgreSQL:
psql -U postgres
-
Подключитесь к терминалу сервера или кластера PostgreSQL.
-
В терминале откройте консольный клиент PostgreSQL:
psql -U postgres
-
-
Подключитесь к базе данных
collector:\c collector -
Получите текущую конфигурацию точки входа, выполнив следующий запрос:
SELECT config_schema FROM entry_point_type WHERE name = '<entry_point_type_name>';Здесь:
-
<entry_point_type_name>— название типа точки входа, например:SocketилиSyslog.
-
Чтобы получить список типов точек входа, доступных в системе, вы можете выполнить следующий запрос:
SELECT name FROM entry_point_type; -
Пример конфигурации точки входа Syslog в PostgreSQL доступен по ссылке.
-
-
Скопируйте результат запроса без названия столбца и разделителей.
Пример конфигурации точки входа Syslog без разделителей доступен по ссылке. -
В поле
nodePortконфигурации, полученной в результате запроса, измените допустимый диапазон портов на тот, который вы указали в манифесте kube-apiserver.Пример для порта514"nodePort": {"type": "number", "order": 2, "options": {"type": "integer", "label": "Порт узла кластера", "rules": {"max": {"value": 32767, "message": "Введено недопустимое значение. Пожалуйста, следуйте инструкции в подсказке"}, "min": {"value": 514, "message": "Введено недопустимое значение. Пожалуйста, следуйте инструкции в подсказке"}, "required": "Необходимо заполнить"}, "active": [{"name": "hasDifferentNodePort", "value": true}], "helpText": "Порт используется для узла кластера Kubernetes. Введите порт в диапазоне от 514 до 32767. Должен быть уникален.", "placeholder": "Введите порт узла кластера"}} -
Обновите конфигурацию точки входа, выполнив следующий запрос:
UPDATE entry_point_type SET config_schema = $json${ <new_config_schema> }$json$::json WHERE name = '<entry_point_type_name>';Здесь:
-
<entry_point_type_name>— название типа точки входа, например:SocketилиSyslog. -
<new_config_schema>— конфигурация точки входа, обновленная на предыдущем шаге.
Пример запроса на обновление конфигурации точки входа Syslog доступен по ссылке. -
Добавление точки входа на конвейер
Чтобы запустить сбор событий через точку входа по произвольному порту, выполните следующие действия:
-
Добавьте на конвейер точку входа со следующими свойствами:
-
Тип точки входа: в соответствии с типом внешней системы.
-
Порт точки входа: порт из диапазона
30000—32767. Значение должно быть уникальным в рамках кластера. -
Отдельный порт для узла кластера: переключатель установлен в активное положение.
-
Порт узла кластера: порт, по которому будут поступать события. Порт должен находиться в диапазоне, заданном в Kubernetes и PostgreSQL.
-
-
Установите конфигурацию конвейера и убедитесь, что события поступают в систему.
Если после выполнения вышеперечисленных шагов события не поступают в систему, обратитесь в службу поддержки по адресу support@rvision.ru.
Проксирование трафика через Ingress-контроллер
|
Данный способ проксирования следует использовать, только если:
В ином случае рекомендуется выполнять настройку указанным выше способом. |
Вы можете настроить проксирование трафика через Ingress-контроллер. В таком случае информация о событиях будет перенаправляться из порта, на который она поступает, на порт, используемый в конвейере обработки событий.
Чтобы настроить проксирование трафика TCP и UDP с данными о событиях, выполните следующие действия:
-
Подключитесь к терминалу master-узла кластера.
-
Создайте ConfigMap
tcp-services, выполнив следующую команду:kubectl apply -f - <<EOF apiVersion: v1 kind: ConfigMap metadata: name: tcp-services namespace: <namespace> data: <tcp_port>: "<namespace>/wl-<collector_id>-collector-main:<entry_point_port>" EOFЗдесь:
-
<namespace>— название пространства имен, в котором установлена система.Вы можете получить название пространства имен, в котором установлена система, с помощью утилиты evoctl. -
<tcp_port>— порт, с которого перенаправляется TCP-трафик. -
<collector_id>— идентификатор коллектора, в котором находится точка входа.Идентификатор можно посмотреть в поле ID на вкладке Информация в карточке коллектора. -
<entry_point_port>— порт точки входа, на который необходимо перенаправить TCP-трафик.
-
-
Создайте ConfigMap
udp-services, выполнив следующую команду:kubectl apply -f - <<EOF apiVersion: v1 kind: ConfigMap metadata: name: udp-services namespace: <namespace> data: <udp_port>: "<namespace>/wl-<collector_id>-collector-main:<entry_point_port>" EOFЗдесь:
-
<namespace>— название пространства имен, в котором установлена система. -
<udp_port>— порт, с которого перенаправляется UDP-трафик. -
<collector_id>— идентификатор коллектора, в котором находится точка входа.Идентификатор можно посмотреть в поле ID на вкладке Информация в карточке коллектора. -
<entry_point_port>— порт точки входа, на который необходимо перенаправить UDP-трафик.
-
-
Добавьте созданные объекты ConfigMap в список аргументов запуска контроллера ingress-nginx, выполнив следующие команды:
kubectl -n ingress-nginx patch daemonsets.apps ingress-nginx-controller --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--tcp-services-configmap=<namespace>/tcp-services"}]' kubectl -n ingress-nginx patch daemonsets.apps ingress-nginx-controller --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--udp-services-configmap=<namespace>/udp-services"}]'Здесь:
-
<namespace>— название пространства имен, в котором установлена система.
Команды выше актуальны, если контроллер ingress-nginx был развернут вместе с установкой системы в виде DaemonSet-контроллера.
Если развертывание контроллера ingress-nginx производилось иным способом, необходимо изменить Deployment
ingress-nginx-controller:kubectl -n ingress-nginx patch deployment ingress-nginx-controller --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--tcp-services-configmap=<namespace>/tcp-services"}]' kubectl -n ingress-nginx patch deployment ingress-nginx-controller --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--udp-services-configmap=<namespace>/udp-services"}]'Здесь:
-
<namespace>— название пространства имен, в котором установлена система.
-
-
Откройте для прослушивания порты, на которые поступают события из внешней системы. Способ открытия зависит от режима работы контроллера ingress-nginx в кластере:
-
Режим LoadBalancer
-
Режим hostPort
В кластере развернуты поды MetalLB и сервис
ingress-nginx-controller. Для открытия портов выполните команды:kubectl -n ingress-nginx patch service ingress-nginx-controller --type='json' -p='[{"op": "add", "path": "/spec/ports/-", "value": {"name": "syslog-tcp", "protocol": "TCP", "port": <tcp_port>}}]' kubectl -n ingress-nginx patch service ingress-nginx-controller --type='json' -p='[{"op": "add", "path": "/spec/ports/-", "value": {"name": "syslog-udp", "protocol": "UDP", "port": <udp_port>}}]'В кластере отсутствуют поды MetalLB и сервис
ingress-nginx-controller. Для открытия портов выполните команды:kubectl -n ingress-nginx patch daemonsets.apps ingress-nginx-controller --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/ports/-", "value": {"containerPort": <tcp_port>, "hostPort": <tcp_port>, "name": "syslog-tcp", "protocol": "TCP"}}]' kubectl -n ingress-nginx patch daemonsets.apps ingress-nginx-controller --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/ports/-", "value": {"containerPort": <udp_port>, "hostPort": <udp_port>, "name": "syslog-udp", "protocol": "UDP"}}]'Режим hostPort характерен для системы, работающей в кластере с одним master-узлом или в кластере, где для контроллера ingress-nginx выделен отдельный worker-узел. Здесь:
-
<tcp_port>— порт, с которого перенаправляется TCP-трафик. -
<udp_port>— порт, с которого перенаправляется UDP-трафик.
-
-
Дождитесь, пока поды контроллера ingress-nginx перезапустятся и перейдут в статус
Running.Чтобы проверить статус подов контроллера ingress-nginx, вы можете выполнить следующую команду:
kubectl -n ingress-nginx get pods -l app.kubernetes.io/instance=ingress-nginx -
Чтобы убедиться, что правило проксирования было добавлено корректно, выполните команду:
kubectl exec -n ingress-nginx daemonsets/ingress-nginx-controller -- nginx -T | sed -n '/^stream {/, $p' | sed -n '1,/^}/p'В выводе команды найдите блоки TCP Services и UDP Services и убедитесь, что в них прописаны порты, которые вы указали в пунктах выше.
-
Добавьте на конвейер точку входа со следующими свойствами:
-
Тип точки входа: в соответствии с типом внешней системы.
-
Протокол: TCP или UDP.
-
Порт точки входа: порт, указанный в значении ключа порта для ConfigMap
tcp-servicesилиudp-services, в соответствии с выбранным вами протоколом.
-
-
Установите конфигурацию конвейера и убедитесь, что события поступают в систему.
Если после выполнения вышеперечисленных шагов события не поступают в систему, обратитесь в службу поддержки по адресу support@rvision.ru.
Была ли полезна эта страница?