Перейти к основному содержимому

Services

Ресурс Services представляет собой введенную нами абстракцию, используемую для описания приложений, работающих на узлах, а также портов, на которых они принимают соединения (в случае реализации серверной логики). Сервисы могут быть связаны с группами безопасности и использоваться в правилах, определяющих разрешение или ограничение доступа к конкретным сетевым ресурсам.

Более подробную документацию по API можно посмотреть здесь.
Более подробно по организации БД можно посмотреть здесь.

Входные параметры

  • services.services[] - Структура, содержащая список сервисов.
  • services.services[].name - Имя сервиса.
  • services.services[].sgNames - Массив/Список имен Security Group(s).
  • services.services[].protocols - Список используемых протоколов.
  • services.services[].protocols.tcp - Структура, содержащая список портов для протокола TCP.
  • services.services[].protocols.tcp.ports - Блок описывающий набор пар портов (source-destination).
  • services.services[].protocols.tcp.ports[].d - Набор открытых портов получателя
  • services.services[].protocols.tcp.ports[].s - Набор открытых портов отправителя.
  • services.services[].protocols.udp - Структура, содержащая список портов для протокола UDP.
  • services.services[].protocols.udp.ports - Блок описывающий набор пар портов (source-destination).
  • services.services[].protocols.udp.ports[].d - Набор открытых портов получателя
  • services.services[].protocols.udp.ports[].s - Набор открытых портов отправителя.
  • services.services[].protocols.icmpv4 - Объект, определяющий параметры настройки ICMP для сетей, использующих IPv4.
  • services.services[].protocols.icmpv4.types - Список, определяющий допустимые типы ICMP запросов для сетей, использующих IPv4.
  • services.services[].protocols.icmpv6 - Объект, определяющий параметры настройки ICMP для сетей, использующих IPv6.
  • services.services[].protocols.icmpv6.types - Список, определяющий допустимые типы ICMP запросов для сетей, использующих IPv6.
  • syncOp - Поле определяющее действие с данными из запроса.
названиеобязательностьтип данныхзначение по умолчанию
services[]даObject[]
services[].nameдаString
services[].sgNamesнетArray[]
services[].protocolsнетObjectnull
services[].protocols.tcpнетObjectnull
services[].protocols.tcp.portsдаArray
services[].protocols.tcp.ports[].dда/нетString
services[].protocols.tcp.ports[].sда/нетString
services[].protocols.udpнетObjectnull
services[].protocols.udp.portsдаObject[]
services[].protocols.udp.ports[].dда/нетString
services[].protocols.udp.ports[].sда/нетString
services[].protocols.icmpv4нетObjectnull
services[].protocols.icmpv4.typesнетArray[]
services[].protocols.icmpv6нетObjectnull
services[].protocols.icmpv6.typesнетArray[]
syncOpдаEnum("Delete", "Upsert", "FullSync")

Ограничения

  • services.services[].name:

    • Значение не может быть пустым.
    • Длина значения поля не должна превышать 256 символов.
    • Значение поля должно начинаться и заканчиваться символами без пробелов.
    • Значение должно быть уникальным в рамках типа ресурса.
  • services.services[].sgNames:

    • Длина значения элемента не должна превышать 256 символов.
    • Значение элемента должно начинаться и заканчиваться символами без пробелов.
    • Повторения значений в списке не допускаются.
    • Возможно привязать только к существующим Security Groups.
    • Сервис не может быть связан с Security Group, если в этой SG уже подключён другой сервис и диапазоны портов пересекаются.
  • services.services[].protocols.tcp.ports:

    • Source порты не должны пересекаться в разных пачках в рамках ресурса
    • Source || destination порт обязателен для заполнения
  • services.services[].protocols.tcp.ports[].d:

    • Значения портов должно находиться в интервале от 1 до 65535.
    • Если значение не будет указано то будет использоваться весь диапазон портов.
    • Значения портов прописываются по одному или интервально используя '-'.
    • Интервал прописывается от меньшего к большему (9090-1010)
    • Допускаются пересечения портов destination для ресурса.
  • services.services[].protocols.tcp[].s:

    • Значения портов должно находиться в интервале от 1 до 65535.
    • Если значение не будет указано то будет использоваться весь диапазон портов.
    • Значения портов прописываются по одному или интервально, используя '-'.
    • Не допускаются пересечения портов для ресурса.
    • Интервал прописывается от меньшего к большему (99-110)
  • services.services[].protocols.udp[].d:

    • Значения портов должно находиться в интервале от 1 до 65535.
    • Если значение не будет указано то будет использоваться весь диапазон портов.
    • Значения портов прописываются по одному или интервально используя '-'.
    • Интервал прописывается от меньшего к большему (9090-1010)
    • Допускаются пересечения портов destination для ресурса.
  • services.services[].protocols.udp[].s:

    • Значения портов должно находиться в интервале от 1 до 65535.
    • Если значение не будет указано то будет использоваться весь диапазон портов.
    • Значения портов прописываются по одному или интервально, используя '-'.
    • Не допускаются пересечения портов для ресурса.
    • Интервал прописывается от меньшего к большему (99-110)
  • services.services[].protocols.icmpv4.types[]:

    • Значения должны быть числами в диапазоне от 0 до 255.
    • Повторения значений в списке не допускаются.
    • Пустой массив разрешает все types
    • Принимает значения (число) в виде string || integer
  • services.services[].protocols.icmpv6.types[]:

    • Значения должны быть числами в диапазоне от 0 до 255.
    • Повторения значений в списке не допускаются.
    • Пустой массив разрешает все types
    • Принимает значения (число) в виде string || integer

Пример использования

curl '127.0.0.1:9006/v2/sync' \
--header 'Content-Type: application/json' \
--data '{
"services": {
"services": [
{
"name": "svc-0",
"protocols": {
"icmpv4": {
"types": [
63,
254,
3,
11,
22
]
},
"icmpv6": {
"types": [
250,
99,
9,
111,
222
]
},
"tcp": {
"ports": [
{
"d": "56000-56500, 56502",
"s": "58000-58300, 58309"
}
]
},
"udp": {
"ports": [
{
"d": "57000-57500, 57502",
"s": "59000-59300, 59309"
}
]
}
},
"sgNames": [
"sg-2",
"sg-3"
]
}'

Выходные параметры

названиетип данныхописание
-Objectв случае успеха возвращается пустое тело

Возможные ошибки API

Пользователь указал некорректные значения агрументов
  • HTTP code: 400
  • gRPC code: INVALID_ARGUMENT
  • gRPC number: 3
Не найден метод
  • HTTP code: 404
  • gRPC code: NOT_FOUND
  • gRPC number: 5
Ошибка в указанных данных
  • HTTP code: 500
  • gRPC code: INTERNAL
  • gRPC number: 13

Диаграмма последовательности