Настройка получения событий по произвольному порту

Некоторые точки входа, такие как Syslog, позволяют получать события только по портам из определенного диапазона, например, 30000—​32767. Однако, если нет возможности передавать события из внешней системы на указанные порты, вы можете настроить систему на получение событий по портам вне этого диапазона.

Вы можете настроить получение событий по произвольному порту одним из следующих способов:

Настройка отдельного порта в Kubernetes и PostgreSQL

Настройка отдельного порта в Kubernetes и PostgreSQL для получения событий по произвольному порту состоит из следующих этапов:

Редактирование манифеста kube-apiserver

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

  • Если коллектор будет размещен в центральном кластере — на всех master-узлах центрального кластера.

  • Если коллектор будет размещен в кластере сателлита — на всех узлах кластера сателлита.

Действия в кластере зависят от используемой в нем платформы оркестрации:

  • Kubernetes

  • K0s

  1. Подключитесь к терминалу master-узла кластера.

  2. Откройте для редактирования файл /etc/kubernetes/manifests/kube-apiserver.yaml.

  3. Добавьте или отредактируйте параметр 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 для порта 514
    spec:
      containers:
        - command:
          - --service-node-port-range=514-32767
  1. Подключитесь к терминалу узла кластера.

  2. Откройте для редактирования файл /etc/k0s/k0s.yaml.

    Путь к файлу /etc/k0s/k0s.yaml приведен по умолчанию и в зависимости от особенностей инсталляции может отличаться.
  3. Добавьте или отредактируйте параметр 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 для порта 514
    spec:
      api:
        extraArgs:
          service-node-port-range: "514-32767"

Изменение параметров точки входа в PostgreSQL

Измените в PostgreSQL диапазон портов, допустимый для необходимой вам точки входа. Для этого:

  1. Откройте консольный клиент PostgreSQL:

    • PostgreSQL в кластере Kubernetes

    • Вынесенная PostgreSQL

    1. Подключитесь к терминалу master-узла кластера.

    2. Откройте терминал контейнера PostgreSQL, выполнив следующую команду:

      kubectl -n <namespace> exec postgresql-0 -it -- bash

      Здесь:

      • <namespace> — название пространства имен, в котором установлена система.

        Вы можете получить название пространства имен, в котором установлена система, с помощью утилиты evoctl.
    3. В терминале контейнера откройте консольный клиент PostgreSQL:

      psql -U postgres
    1. Подключитесь к терминалу сервера или кластера PostgreSQL.

    2. В терминале откройте консольный клиент PostgreSQL:

      psql -U postgres
  2. Подключитесь к базе данных collector:

    \c collector
  3. Получите текущую конфигурацию точки входа, выполнив следующий запрос:

    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 доступен по ссылке.

  4. Скопируйте результат запроса без названия столбца и разделителей.

    Пример конфигурации точки входа Syslog без разделителей доступен по ссылке.
  5. В поле 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": "Введите порт узла кластера"}}
  6. Обновите конфигурацию точки входа, выполнив следующий запрос:

    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 доступен по ссылке.

Добавление точки входа на конвейер

Чтобы запустить сбор событий через точку входа по произвольному порту, выполните следующие действия:

  1. Добавьте на конвейер точку входа со следующими свойствами:

    • Тип точки входа: в соответствии с типом внешней системы.

    • Порт точки входа: порт из диапазона 30000—​32767. Значение должно быть уникальным в рамках кластера.

    • Отдельный порт для узла кластера: переключатель установлен в активное положение.

    • Порт узла кластера: порт, по которому будут поступать события. Порт должен находиться в диапазоне, заданном в Kubernetes и PostgreSQL.

  2. Установите конфигурацию конвейера и убедитесь, что события поступают в систему.

    Если после выполнения вышеперечисленных шагов события не поступают в систему, обратитесь в службу поддержки по адресу support@rvision.ru.

Проксирование трафика через Ingress-контроллер

Данный способ проксирования следует использовать, только если:

  • в системе установлен контроллер ingress-nginx;

  • недоступно изменение диапазона портов NodePort относительно стандартного 30000—​32767.

В ином случае рекомендуется выполнять настройку указанным выше способом.

Вы можете настроить проксирование трафика через Ingress-контроллер. В таком случае информация о событиях будет перенаправляться из порта, на который она поступает, на порт, используемый в конвейере обработки событий.

Чтобы настроить проксирование трафика TCP и UDP с данными о событиях, выполните следующие действия:

  1. Подключитесь к терминалу master-узла кластера.

  2. Создайте 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-трафик.

  3. Создайте 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-трафик.

  4. Добавьте созданные объекты 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> — название пространства имен, в котором установлена система.

  5. Откройте для прослушивания порты, на которые поступают события из внешней системы. Способ открытия зависит от режима работы контроллера 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-трафик.

  6. Дождитесь, пока поды контроллера ingress-nginx перезапустятся и перейдут в статус Running.

    Чтобы проверить статус подов контроллера ingress-nginx, вы можете выполнить следующую команду:

    kubectl -n ingress-nginx get pods -l app.kubernetes.io/instance=ingress-nginx
  7. Чтобы убедиться, что правило проксирования было добавлено корректно, выполните команду:

    kubectl exec -n ingress-nginx daemonsets/ingress-nginx-controller -- nginx -T | sed -n '/^stream {/, $p' | sed -n '1,/^}/p'

    В выводе команды найдите блоки TCP Services и UDP Services и убедитесь, что в них прописаны порты, которые вы указали в пунктах выше.

  8. Добавьте на конвейер точку входа со следующими свойствами:

    • Тип точки входа: в соответствии с типом внешней системы.

    • Протокол: TCP или UDP.

    • Порт точки входа: порт, указанный в значении ключа порта для ConfigMap tcp-services или udp-services, в соответствии с выбранным вами протоколом.

  9. Установите конфигурацию конвейера и убедитесь, что события поступают в систему.

    Если после выполнения вышеперечисленных шагов события не поступают в систему, обратитесь в службу поддержки по адресу support@rvision.ru.

Была ли полезна эта страница?

Обратная связь