API навигации | On‑Premise | 2GIS Documentation
On‑Premise
Личный кабинет

Установка API для работы с навигацией

Важное примечание:

Все пароли и ключи в этом разделе приведены в иллюстративных целях.

При реальной установке рекомендуется использовать более сложные и надёжные пароли.

  1. По возможности познакомьтесь с:

  2. Убедитесь, что выполнены необходимые предварительные шаги:

    1. Подготовка к установке
    2. Получение артефактов установки
    3. Установка сервиса лицензий
    4. Установка сервиса ключей
    5. (Опционально) Установка прокси для API пробок
  3. Соберите необходимые данные, заданные или полученные на предыдущих шагах:

    Объект Пример значения Как получить значение
    Endpoint зеркала реестра Docker docker.storage.example.local:5000 См. Получение артефактов установки
    Секрет Kubernetes для доступа к зеркалу реестра Docker onpremise-registry-creds См. Получение артефактов установки
    Домен S3-хранилища с артефактами установки artifacts.example.com См. Получение артефактов установки
    Название бакета с артефактами установки onpremise-artifacts См. Получение артефактов установки
    Идентификатор ключа для доступа к артефактам установки AKIAIOSFODNN7EXAMPLE См. Получение артефактов установки
    Секрет ключа для доступа к артефактам установки wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY См. Получение артефактов установки
    Путь к файлу манифеста manifests/1640661259.json См. Получение артефактов установки
    Endpoint сервиса лицензий https://license См. Установка сервиса лицензий
    API-endpoint сервиса ключей http://keys-api См. Установка сервиса ключей
    Endpoint прокси для API пробок http://traffic-proxy См. Установка прокси для API пробок
    Сервисные токены* DIRECTIONS_TOKEN
    TRUCK_DIRECTIONS_TOKEN
    PUBLIC_TRANSPORT_TOKEN
    DISTANCE_MATRIX_TOKEN
    ISOCHRONE_TOKEN
    MAP_MATCHING_TOKEN
    См. Установка сервиса ключей

    * В иллюстративных целях предполагается, что сервисные токены доступны для всех продуктов навигации.

  4. Определите, какие API вам необходимо установить:

    • Базовые API навигации: Directions API, Distance Matrix API, Truck Directions API, Map Matching API, Isochrone API и Public Transport API. Подробнее о сервисах см. в обзоре.
    • Distance Matrix Async API для расчёта матрицы расстояний для большого количества точек. Может быть установлен отдельно или в сочетании с другими API. Подробнее о сервисе см. на странице архитектуры.
    • Restrictions API для получения информации о перекрытиях дорог. Устанавливается в сочетании с другими API. Подробнее о сервисе см. на странице архитектуры.
  5. Убедитесь, что удовлетворены требования к ресурсам, приведенные в Helm-чартах:

    Сервис Для работы каких API необходим
    Navi-Castle Все
    Navi-Back Все
    Navi-Router Базовые API
    Navi-Front Базовые API
    Navi-Restrictions Restrictions API
    Distance Matrix Async API Distance Matrix Async API

    Подробнее о том, как проверить требования к ресурсам, смотрите в документе Системные требования.

    Примечание

    Содержание Helm-чартов, описанное в данном разделе, актуально для последней версии On-Premise (см. Релизы). Чтобы изучить параметры для более ранних версий, откройте нужный values.yaml в GitHub и введите номер нужной версии комплекса (например, 1.18.0) в переключателе тегов слева.

  6. Определите доменные имена для сервисов навигации.

    Пример:

    • Доменное имя для Navi-Front: navi-front.example.com
    • Доменное имя для Distance Matrix Async API: navi-async-matrix.example.com
    • Доменное имя для Restrictions API: navi-restrictions.example.com

Если вы планируете устанавливать базовые API навигации, настройте хранилище файлов для Navi-Castle. Определите путь, по которому будут находиться файлы с данными.

Пример: /opt/castle/data

Если вы планируете устанавливать Distance Matrix Async API, дополнительно настройте:

  1. PostgreSQL.

    1. Разместите кластер PostgreSQL с доменным именем navi-async-matrix-postgresql.storage.example.local в приватной сети. В этом руководстве предполагается, что кластер работает на стандартном порту 5432.

    2. Подключитесь к кластеру от имени суперпользователя (обычно это postgres).

    3. Создайте пользователя базы данных, который будет использоваться для сервиса. Установите пароль для него.

      create user dbuser_navi_async_matrix password 'wNgJamrIym8UAcdX';
      
    4. Создайте базу данных, принадлежащую этому пользователю.

      create database onpremise_navi_async_matrix owner dbuser_navi_async_matrix;
      
  2. S3-совместимое хранилище.

    1. Разместите S3-совместимое хранилище (например, Ceph) с доменным именем navi-async-matrix-s3.storage.example.local в приватной сети. В этом руководстве предполагается, что хранилище работает на стандартном порту 80.

    2. Создайте пользователя, который будет использоваться для сервиса. Запомните ключи доступа для этого пользователя.

      Пример:

      • Access key: TRVR4ESNMDDSIXLB3ISV
      • Secret key: 6gejRs5fyRGKIFjwkiBDaowadGLtmWs2XjEH18YK
    3. Определите название бакета (bucket), который будет использоваться для сервиса.

      Пример: navi-async-matrix-bucket

      Примечание

      По умолчанию Distance Matrix Async API удаляет все файлы старше 14 дней в бакете.

  3. Брокер сообщений Apache Kafka.

    1. Разместите Apache Kafka с доменным именем kafka.example.local в приватной сети. В этом руководстве предполагается, что кластер работает на стандартном порту 9092.

    2. Создайте пользователя, который будет использоваться для сервиса. Запомните реквизиты для этого пользователя.

      Пример:

      • Имя пользователя: kafka-async-matrix
      • Пароль: 1Y2u3gGvi6VjNHUt

Если вы планируете устанавливать Restrictions API, дополнительно настройте PostgreSQL:

  1. Разместите кластер PostgreSQL с доменным именем navi-restrictions-postgresql.storage.example.local в приватной сети. В этом руководстве предполагается, что кластер работает на стандартном порту 5432.

  2. Подключитесь к кластеру от имени суперпользователя (обычно это postgres).

  3. Создайте пользователя базы данных, который будет использоваться для сервиса. Установите пароль для него.

    create user dbuser_restrictions password 'jwbK65iFrCCcNrkg';
    
  4. Создайте базу данных, принадлежащую этому пользователю.

    create database onpremise_restrictions owner dbuser_restrictions;
    

Navi-Back использует файл правил, чтобы указать, какие типы запросов он может обрабатывать. Это позволяет инстансу Navi-Back запрашивать и хранить минимальный набор данных от Navi-Castle, достаточный для обработки указанных типов запросов.

Файл также используется Navi-Router для определения того, какой из нескольких инстансов Navi-Back может обработать запрос.

Создайте файл rules.yaml с необходимым вам набором правил. Скопируйте из примера ниже только те блоки, которые понадобятся для вашей установки:

rules:
    # режим свободной навигации без маршрута
    - name: free-roam
      queries: ['free_roam']
      routing: []
      # автомобильные маршруты
    - name: directions-car
      queries: ['routing']
      routing: ['driving']
      # пешеходные маршруты
    - name: directions-pedestrian
      queries: ['routing']
      routing: ['pedestrian']
      # велосипедные маршруты
    - name: directions-bicycle
      queries: ['routing']
      routing: ['bicycle']
      # маршруты такси
    - name: directions-taxi
      queries: ['routing']
      routing: ['taxi']
      # маршруты для экстренных служб
    - name: directions-emergency
      queries: ['routing']
      routing: ['emergency']
      # маршруты на общественном транспорте
    - name: public-transport
      queries: ['public_transport']
      routing: ['public_transport']
      # маршруты для грузовиков
    - name: directions-truck
      queries: ['routing']
      routing: ['truck']
      # достижимые области на автомобиле
    - name: isochrone-car
      queries: ['get_hull']
      routing: ['driving']
      # матрица расстояний
    - name: distance-matrix
      queries: ['get_dist_matrix']
      routing: ['driving']
      # Distance Matrix Async API
    - name: async
      queries: ['routing']
      routing: ['driving']

Установка Navi-Castle обязательна для работы любых API навигации.

  1. Создайте конфигурационный файл для Helm. Подробное описание доступных параметров см. здесь.

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

    values-castle.yaml
    dgctlDockerRegistry: docker.storage.example.local:5000
    imagePullSecrets: [onpremise-registry-creds]
    
    dgctlStorage:
        host: artifacts.example.com
        bucket: onpremise-artifacts
        accessKey: AKIAIOSFODNN7EXAMPLE
        secretKey: wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY
        manifest: manifests/latest.json
        secure: false
        region: ''
    
    resources:
        limits:
            cpu: 1000m
            memory: 512Mi
        requests:
            cpu: 500m
            memory: 128Mi
    
    persistentVolume:
        enabled: false
        accessModes: [ReadWriteOnce]
        storageClass: ceph-csi-rbd
        size: 5Gi
    
    castle:
        castleDataPath: /opt/castle/data/
    
    cron:
        enabled:
            import: true
        schedule:
            import: '*/10 * * * *'
        concurrencyPolicy: Forbid
        successfulJobsHistoryLimit: 3
    
    init:
        enabled:
            import: true
            restriction: false
            restrictionImport: false
    
    replicaCount: 1
    
    customCAs:
        bundle: ''
        # bundle: |
        #   -----BEGIN CERTIFICATE-----
        #   ...
        #   -----END CERTIFICATE-----
        certsPath: ''
    

    Где:

    • dgctlDockerRegistry: endpoint вашего реестра Docker, в котором находятся образы сервисов программного комплекса 2ГИС.

    • dgctlStorage: настройки хранилища артефактов установки.

      • Укажите общие настройки для доступа к хранилищу: endpoint, имя бакета, реквизиты для доступа.
      • manifest: укажите путь до файла с манифестом в формате manifests/latest.json. Этот файл содержит в себе описания фрагментов данных, которые требуются сервисам для работы. См. Жизненный цикл артефактов установки.
      • secure: использовать ли HTTPS для работы с S3-совместимым хранилищем. Значение по умолчанию: false.
      • region: регион S3-хранилища.
    • resources: настройки вычислительных ресурсов для сервиса. Чтобы узнать рекомендуемые значения ресурсов, см. Вычислительные ресурсы.

    • persistentVolume: настройки для Kubernetes Persistent Volume Claim (PVC), который используется для хранения данных сервиса.

      • enabled: флаг, определяющий, включен ли PVC. Если PVC выключен, то реплика сервиса может потерять свои данные.
      • accessModes: режим доступа к PVC. Доступные режимы такие же, как и для persistent volumes.
      • storageClass: класс хранилища для PVC.
      • size: размер хранилища.

      Важное примечание:

      Navi-Castle устанавливается с использованием StatefulSet. Это означает, что каждая реплика Navi-Castle получит своё выделенное хранилище Persistent Storage с указанными настройками.

      Например, если вы задали настройку size со значением 5Gi, то общий объем хранилища для трёх реплик будет равен 15Gi.

    • castle: настройки Navi-Castle.

      • castleDataPath: путь до директории с данными Navi-Castle.
    • cron: настройки cron-задач (Kubernetes Cron Job). Эти настройки одинаковы для всех реплик сервиса Navi-Castle. Такая cron-задача получает актуальные данные из хранилища артефактов установки и затем обновляет данные на реплике Navi-Castle.

      • enabled.import, enabled.restriction, enabled.restrictionImport: флаги, определяющие, включены ли задачи. Если обе задачи выключены, то ни одна из реплик Navi-Castle не будет получать обновления данных.
      • schedule.import, schedule.restriction, schedule.restrictionImport: расписания выполнения задач в cron-формате.
      • concurrencyPolicy: политика одновременного выполнения (concurrency policy) для задачи.
      • successfulJobsHistoryLimit: ограничение на размер истории выполненных задач.
    • init: настройки импорта данных при старте сервиса.

      • enabled.import: флаг, определяющий, включен ли импорт данных. Если флаг persistentVolume.enabled отключен, то старые данные будут утеряны при новом импорте.
      • enabled.restriction, enabled.restrictionImport: флаги, определяющие, включен ли Restrictions API или импорт данных о дорожных перекрытиях соответственно. Данные флаги не могут быть включены одновременно.
    • replicaCount: число реплик сервиса Navi-Castle. Обратите внимание, что каждая реплика получит своюё выделенную cron-задачу для получения актуальных данных из хранилища артефактов установки.

    • customCAs: настройки пользовательских сертификатов.

      • bundle: текстовое представление сертификата в формате X.509 PEM public-key.
      • certsPath: директория для монтирования сертификата внутри контейнера.
  2. Установите сервис с помощью Helm, используя подготовленный конфигурационный файл values-castle.yaml:

    helm upgrade --install --version=1.32.0 --atomic --values ./values-castle.yaml navi-castle 2gis-on-premise/navi-castle
    

    При первом запуске реплика Navi-Castle получит данные из хранилища артефактов установки. В дальнейшем, эти данные будут обновляться cron-задачей по расписанию.

  3. Проверьте работоспособность Navi-Castle по инструкции сейчас (рекомендуется) или в конце процедуры установки.

Установка Navi-Back обязательна для работы любых API навигации.

Для каждого типа навигации необходимо установить отдельную сущность Navi-Back. Выполните шаги ниже для каждого устанавливаемого типа навигации:

  1. Создайте конфигурационный файл для Helm. Подробное описание доступных параметров см. здесь. Присвойте файлу имя по схеме values-back-<service>.yaml (например, values-back-directions-car.yaml).

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

    values-back-SERVICE.yaml
    dgctlDockerRegistry: docker.storage.example.local:5000
    
    naviback:
        castleUrl: navi-castle.svc
        ecaUrl: traffic-proxy
        forecastHost: traffic-proxy
        appPort: 443
        app_rule: directions-car
        simpleNetwork:
            emergency: false
    
    replicaCount: 1
    
    resources:
        limits:
            cpu: 2000m
            memory: 16000Mi
        requests:
            cpu: 1000m
            memory: 1024Mi
    
    license:
        url: 'https://license'
    
    # Только если вы используете Distance Matrix Async API
    kafka:
        enabled: true
        groupId: navi-back
        properties:
            bootstrap.servers: kafka.example.local:9092
            security.protocol: SASL_PLAINTEXT
            sasl.mechanism: SCRAM-SHA-512
            sasl.username: kafka-async-matrix
            sasl.password: 1Y2u3gGvi6VjNHUt
        distanceMatrix:
            taskTopic: task_topic
            cancelTopic: cancel_topic
            statusTopic: status_topic
    
    # Только если вы используете Distance Matrix Async API
    s3:
        enabled: true
        host: navi-async-matrix-s3.storage.example.local:80
        bucket: navi-async-matrix-bucket
        accessKey: TRVR4ESNMDDSIXLB3ISV
        secretKey: 6gejRs5fyRGKIFjwkiBDaowadGLtmWs2XjEH18YK
    
    customCAs:
        bundle: ''
        # bundle: |
        #   -----BEGIN CERTIFICATE-----
        #   ...
        #   -----END CERTIFICATE-----
        certsPath: ''
    

    Где:

    • dgctlDockerRegistry: endpoint вашего реестра Docker, в котором находятся образы сервисов программного комплекса 2ГИС.

    • naviback: настройки сервиса Navi-Back.

      • castleUrl: URL сервиса Navi-Castle. Этот URL должен быть доступен из всех подов вашего кластера Kubernetes.

      • ecaUrl: доменное имя прокси для API пробок. Этот URL должен быть доступен из всех подов вашего кластера Kubernetes.

      • forecastHost: URL сервиса прогноза пробок. См. Traffic Proxy service. Этот URL должен быть доступен из всех подов вашего кластера Kubernetes.

      • appPort: HTTP-порт для сервиса Navi-Back.

      • app_rule: имя правила из файла rules.yaml для устанавливаемого типа навигации.

      • simpleNetwork.emergency: включить поддержку построения маршрутов для экстренных служб.

        Обратите внимание, что для построения таких маршрутов необходимо также добавить тип маршрутизации emergency в один из проектов в вашем файле правил.

    • replicaCount: число реплик сервиса Navi-Back.

    • resources: настройки вычислительных ресурсов для сервиса. Чтобы узнать рекомендуемые значения ресурсов, см. Вычислительные ресурсы.

    • license: настройки сервиса лицензий.

      • url: URL-адрес сервиса лицензий. Пример: https://license.
    • kafka: настройки доступа к брокеру Apache Kafka для взаимодействия с Distance Matrix Async API.

      • groupId: идентификатор группы, к которой принадлежит сервис.

      • properties: параметры для доступа к серверу Kafka:

        Примечание

        В этом примере конфигурационного файла описан способ подключения к серверу Kafka по логину и паролю. Вы также можете настроить аутентификацию по SSL или подключение без аутентификации: см. пояснения к блоку параметров kafka.properties на GitHub.

        • bootstrap.servers: URL сервера Kafka.
        • sasl.username: имя пользователя Kafka.
        • sasl.password: пароль для пользователя Kafka.
      • distanceMatrix: названия топиков для взаимодействия с сервисом.

        • taskTopic: название топика для получения новых задач.
        • cancelTopic: название топика для отмены или завершения задач.
        • statusTopic: название топика для получения информации о статусе задач.
    • s3: настройки доступа к S3-совместимому хранилищу для взаимодействия с Distance Matrix Async API.

      • host: endpoint S3-совместимого хранилища.
      • bucket: имя бакета для хранения данных запросов.
      • accessKey: идентификатор ключа (S3 access key).
      • secretKey: секретный ключ (S3 secret key).
    • customCAs: настройки пользовательских сертификатов.

      • bundle: текстовое представление сертификата в формате X.509 PEM public-key.
      • certsPath: директория для монтирования сертификата внутри контейнера.
  2. Установите сервис с помощью Helm, используя подготовленный конфигурационный файл values-back-<service>.yaml:

    helm upgrade --install --version=1.32.0 --atomic --values ./rules.yaml --values ./values-back-<service>.yaml navi-back-<service> 2gis-on-premise/navi-back
    

    Пример команды для установки Directions API для автомобильных маршрутов:

    helm upgrade --install --version=1.32.0 --atomic --values ./rules.yaml --values ./values-back-directions-car.yaml navi-back-directions-car 2gis-on-premise/navi-back
    
  3. Проверьте работоспособность Navi-Back по инструкции сейчас (рекомендуется) или в конце процедуры установки.

  4. Повторите шаги выше для следующего типа навигации.

Установка Navi-Router обязательна, если вы планируете использовать базовые API навигации.

  1. Создайте конфигурационный файл для Helm. Подробное описание доступных параметров см. здесь.

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

    values-router.yaml
    dgctlDockerRegistry: docker.storage.example.local:5000
    
    router:
        logLevel: Warning
        castleUrl: http://navi-castle.svc
    
    keys:
        enabled: true
        url: http://keys-api/service/v1/keys
        refreshIntervalSec: 30
        downloadTimeoutSec: 30
        apis:
            comboroutes-api: ''
            directions-api: ''
            distance-matrix-api: ''
            freeroam-api: ''
            isochrone-api: ''
            map-matching-api: ''
            pairs-directions-api: ''
            ppnot-api: ''
            public-transport-api: ''
            truck-directions-api: ''
            truck-distance-matrix-api: ''
    
    replicaCount: 2
    
    resources:
        limits:
            cpu: 2000m
            memory: 1024Mi
        requests:
            cpu: 500m
            memory: 128Mi
    

    Где:

    • dgctlDockerRegistry: endpoint вашего реестра Docker, в котором находятся образы сервисов программного комплекса 2ГИС.

    • router: настройки сервиса Navi-Router.

      • logLevel: уровень логирования, по умолчанию Warning. Доступные уровни: Verbose, Info, Warning, Error, Fatal.
      • castleUrl: URL сервиса Navi-Castle. Этот URL должен быть доступен из всех подов вашего кластера Kubernetes.
    • keys: настройки сервиса ключей. Если не задавать эти настройки, то проверка API-ключа для запроса будет пропущена.

      • enabled: включено ли использование сервиса ключей.
      • url: URL API-endpoint сервиса ключей. Этот URL должен быть доступен из всех подов вашего кластера Kubernetes.
      • refreshIntervalSec: интервал обновления ключей в секундах.
      • downloadTimeoutSec: таймаут загрузки ключей в секундах.
      • apis: сервисные токены для сохранения статистики использования (см. Сервис ключей).
    • replicaCount: число реплик сервиса Navi-Router.

    • resources: настройки вычислительных ресурсов для сервиса. Чтобы узнать рекомендуемые значения ресурсов, см. Вычислительные ресурсы.

  2. Установите сервис с помощью Helm, используя подготовленный конфигурационный файл values-router.yaml:

    helm upgrade --install --version=1.32.0 --atomic --values ./rules.yaml --values ./values-router.yaml navi-router 2gis-on-premise/navi-router
    
  3. Проверьте работоспособность Navi-Router по инструкции сейчас (рекомендуется) или в конце процедуры установки.

Установка Navi-Front обязательна, если вы планируете использовать базовые API навигации.

  1. Создайте конфигурационный файл для Helm. Подробное описание доступных параметров см. здесь.

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

    values-front.yaml
    dgctlDockerRegistry: docker.storage.example.local:5000
    
    replicaCount: 2
    
    resources:
        limits:
            cpu: 100m
            memory: 128Mi
        requests:
            cpu: 100m
            memory: 128Mi
    
    ingress:
        enabled: true
        className: nginx
        hosts:
            - host: navi-front.example.com
              paths:
                  - path: /
                    pathType: Prefix
        tls: []
        #- hosts:
        #  - navi-front.example.com
        #  secretName: secret.tls
    

    Где:

    • dgctlDockerRegistry: endpoint вашего реестра Docker, в котором находятся образы сервисов программного комплекса 2ГИС.

    • replicaCount: число реплик сервиса Navi-Front.

    • resources: настройки вычислительных ресурсов для сервиса. Чтобы узнать рекомендуемые значения ресурсов, см. Вычислительные ресурсы.

    • ingress: конфигурация ресурса Ingress. Адаптируйте приведенную конфигурацию для соответствия используемому вами Ingress. URL, указанный в параметре ingress.hosts.host, должен быть доступен извне вашего кластера Kubernetes, чтобы пользователи из приватного сегмента сети могли получить доступ к ресурсам по этому URL.

  2. Установите сервис с помощью Helm, используя подготовленный конфигурационный файл values-front.yaml:

    helm upgrade --install --version=1.32.0 --atomic --values ./values-front.yaml navi-front 2gis-on-premise/navi-front
    
  3. Проверьте работоспособность Navi-Back по инструкции сейчас (рекомендуется) или в конце процедуры установки.

  1. Создайте конфигурационный файл для Helm. Подробное описание доступных параметров см. здесь.

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

    values-navi-async-matrix.yaml
    dgctlDockerRegistry: docker.storage.example.local:5000
    
    dm:
        citiesUrl: http://navi-castle/cities.conf
    
    s3:
        host: http://navi-async-matrix-s3.storage.example.local:80
        bucket: navi-async-matrix-bucket
        accessKey: TRVR4ESNMDDSIXLB3ISV
        secretKey: 6gejRs5fyRGKIFjwkiBDaowadGLtmWs2XjEH18YK
    
    db:
        host: navi-async-matrix-postgresql.storage.example.local
        port: 5432
        name: onpremise_navi_async_matrix
        user: dbuser_navi_async_matrix
        password: wNgJamrIym8UAcdX
        schema: public
        tls:
            enabled: false
            rootCert: ''
            cert: ''
            key: ''
            mode: verify-full
    
    kafka:
        groupId: navi_async
        properties:
            bootstrap.servers: kafka.example.local:9092
            security.protocol: SASL_PLAINTEXT
            sasl.mechanism: SCRAM-SHA-512
            sasl.plain.username: kafka-async-matrix
        sensitiveProperties:
            sasl.plain.password: 1Y2u3gGvi6VjNHUt
        statusTopic: status_topic
        cancelTopic: cancel_topic
        archiveTopic: archive_topic
        taskTopicRules:
            - topic: task_topic
              default: true
    
    keys:
        url: http://keys-api/service/v1/keys
        token: DISTANCE_MATRIX_TOKEN
    
    ingress:
        enabled: true
        className: nginx
        hosts:
            - host: navi-async-matrix.example.com
              paths:
                  - path: /
                    pathType: Prefix
        tls: []
        #- hosts:
        #  - navi-async-matrix.example.com
        #  secretName: secret.tls
    
    customCAs:
        bundle: ''
        # bundle: |
        #   -----BEGIN CERTIFICATE-----
        #   ...
        #   -----END CERTIFICATE-----
        certsPath: ''
    

    Где:

    • dgctlDockerRegistry: endpoint вашего реестра Docker, в котором находятся образы сервисов программного комплекса 2ГИС.

    • dm.citiesUrl: URL информации о городах, предоставляемой сервисом Navi-Castle.

    • s3: настройки доступа к S3-совместимому хранилищу.

      • host: endpoint S3-совместимого хранилища.
      • bucket: имя бакета для хранения данных запросов. По умолчанию Distance Matrix Async API удаляет все файлы старше 14 дней в бакете.
      • accessKey: идентификатор ключа (S3 access key).
      • secretKey: секретный ключ (S3 secret key).
    • db: настройки доступа к серверу PostgreSQL.

      • host: имя хоста или IP-адрес сервера.

      • port: порт, на котором слушает сервер.

      • name: имя базы данных.

      • user и password: реквизиты для доступа к базе данных, указанной в параметре name. Пользователь должен быть либо владельцем этой базы данных, либо суперпользователем.

      • schema: используемая схема PostgreSQL. Значение по умолчанию - public.

      • tls: настройки mTLS-соединения с базой данных.

        • enabled: включено ли mTLS-соединение с сервером PostgreSQL.

        • rootCert: файл корневого сертификата.

        • cert: сертификат сервера PostgreSQL.

        • key: ключ сервера PostgreSQL.

        • mode: уровень защиты, один из следующих:

          • verify-full (рекомендуется): обеспечивается защита от прослушивания и атаки посредника.
          • verify-ca: обеспечивается защита от прослушивания, защита от атаки посредника зависит от политики центра сертификации.
          • require: обеспечивается защита от прослушивания.
          • prefer: возможна защита от прослушивания, если это поддерживает сервер.
          • allow: возможна защита от прослушивания, если этого требует сервер.
          • disable: защита не обеспечивается.
    • kafka: настройки доступа к брокеру Apache Kafka.

      • groupId: идентификатор группы, к которой принадлежит сервис.

      • properties: параметры для доступа к серверу Kafka:

        Примечание

        В этом примере конфигурационного файла описан способ подключения к серверу Kafka по логину и паролю. Вы также можете настроить аутентификацию по SSL или подключение без аутентификации: см. пояснения к блоку параметров kafka.properties на GitHub.

        • bootstrap.servers: URL сервера Kafka.
        • sasl.plain.username: имя пользователя Kafka.
      • sensitiveProperties.sasl.plain.password: пароль для пользователя Kafka.

      • statusTopic: название топика для получения информации о статусе задач.

      • cancelTopic: название топика для отмены задач или получения информации об их завершении.

      • topicRules: информация о топиках, в которые сервис будет направлять запросы. Задаётся как список, в каждом элементе которого должны присутствовать два параметра:

        • topic: название топика.

        • projects или default: параметры, определяющие, какие запросы направлять в этот топик.

          Distance Matrix Async API распределяет запросы по топикам в зависимости от проекта, к которому они относятся. Для всех топиков, кроме топика по умолчанию, должна быть указана настройка projects, содержащая список проектов (см. файл правил). Для топика по умолчанию должна быть указана настройка default: true. В топик по умолчанию будут направляться запросы, относящиеся к проектам, не упомянутым в projects для других топиков.

          В конфигурации должен быть задан один и только один топик с настройкой default: true.

    • keys: настройки сервиса ключей.

      • url: URL сервиса ключей. Этот URL должен быть доступен из всех подов вашего кластера Kubernetes.
      • token: сервисный токен (см. Установка сервиса ключей).
    • ingress: конфигурация ресурса Ingress. Адаптируйте приведенную конфигурацию для соответствия используемому вами Ingress. URL, указанный в параметре ingress.hosts.host, должен быть доступен извне вашего кластера Kubernetes, чтобы пользователи из приватного сегмента сети могли получить доступ к ресурсам по этому URL.

    • customCAs: настройки пользовательских сертификатов.

      • bundle: текстовое представление сертификата в формате X.509 PEM public-key.
      • certsPath: директория для монтирования сертификата внутри контейнера.
  2. Установите сервис с помощью Helm, используя подготовленный конфигурационный файл values-navi-async-matrix.yaml.

    helm upgrade --install --version=1.32.0 --atomic --values ./values-navi-async-matrix.yaml navi-async-matrix 2gis-on-premise/navi-async-matrix
    
  1. Создайте конфигурационный файл для установки Restrictions API с помощью Helm. Подробное описание доступных параметров см. здесь.

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

    values-restrictions.yaml
    dgctlDockerRegistry: docker.storage.example.local:5000
    imagePullSecrets: [onpremise-registry-creds]
    
    naviBackHost: 'navi-back-directions-car'
    naviCastleHost: 'navi-castle'
    
    postgres:
        host: navi-restrictions-postgresql.storage.example.local
        port: 5432
        name: onpremise_restrictions
        user: dbuser_restrictions
        password: jwbK65iFrCCcNrkg
    
    api:
        key: ''
    
        ingress:
            enabled: true
            className: nginx
            hosts:
                - host: navi-restrictions.example.com
                  paths:
                      - path: /
                        pathType: Prefix
            tls: []
            #- hosts:
            #  - navi-restrictions.example.com
            #  secretName: secret.tls
    
    cron:
        enabled: true
        schedule: '1 * * * *'
        concurrencyPolicy: Forbid
        successfulJobsHistoryLimit: 1
        projects:
            - moscow
        maxAttributesFetcherRps: 25
    
    customCAs:
        bundle: ''
        # bundle: |
        #   -----BEGIN CERTIFICATE-----
        #   ...
        #   -----END CERTIFICATE-----
        certsPath: ''
    

    Где:

    • dgctlDockerRegistry: endpoint вашего реестра Docker, в котором находятся образы сервисов программного комплекса 2ГИС.

    • naviBackHost: имя хоста любого установленного сервиса Navi-Back.

    • naviCastleHost: имя хоста Navi-Castle.

    • postgres: настройки доступа к серверу PostgreSQL.

      • host: имя хоста или IP-адрес сервера.
      • port: порт, на котором слушает сервер.
      • name: имя базы данных.
      • user and password: реквизиты для доступа к базе данных, указанной в параметре name. Пользователь должен быть либо владельцем этой базы данных, либо суперпользователем.
    • api: настройки API сервиса.

      • key: ключ для взаимодействия с сервисами навигации. Должен совпадать с настройкой restrictions.key сервиса Navi-Castle.
      • ingress: конфигурация ресурса Ingress. Адаптируйте приведенную конфигурацию для соответствия используемому вами Ingress. URL, указанный в параметре ingress.hosts.host, должен быть доступен извне вашего кластера Kubernetes, чтобы пользователи из приватного сегмента сети могли получить доступ к ресурсам по этому URL.
    • cron: настройки для получения информации от сервисов навигации.

      • projects: список проектов Navi-Back (см. Файл правил).
      • maxAttributesFetcherRps: максимальное количество запросов к edgeAttributesUrlTemplate в секунду.
    • customCAs: настройки пользовательских сертификатов.

      • bundle: текстовое представление сертификата в формате X.509 PEM public-key.
      • certsPath: директория для монтирования сертификата внутри контейнера.
  2. Установите сервис с помощью Helm, используя подготовленный конфигурационный файл values-restrictions.yaml:

    helm upgrade --install --version=1.32.0 --atomic --wait-for-jobs --values ./values-restrictions.yaml navi-restrictions 2gis-on-premise/navi-restrictions
    
  3. Отредактируйте настройки castle.restrictions и cron в конфигурационном файле Navi-Castle следующим образом:

    castle:
        restrictions:
            key: secret
            host: http://navi-restrictions.example.local
    
    cron:
        enabled:
            import: true
            restriction: true
        schedule:
            import: '*/10 * * * *'
            restriction: '*/10 * * * *'
        concurrencyPolicy: Forbid
        successfulJobsHistoryLimit: 3
    

    Где:

    • castle: настройки Navi-Castle.

      • restrictions.key: ключ для взаимодействия с сервисом Restrictions API. Любая строка.
      • restrictions.host: URL сервиса Restrictions API. Этот URL должен быть доступен из всех подов вашего кластера Kubernetes.
    • cron: настройки cron-задач (Kubernetes Cron Job). Эти настройки одинаковы для всех реплик сервиса Navi-Castle. Такая cron-задача получает актуальные данные из хранилища артефактов установки и затем обновляет данные на реплике Navi-Castle.

      • enabled.import, enabled.restriction: флаги, определяющие, включены ли задачи. Если обе задачи выключены, то ни одна из реплик Navi-Castle не будет получать обновления данных.
      • schedule.import, schedule.restriction: расписания выполнения задач в cron-формате.
  4. Обновите сервис Navi-Castle, используя отредактированный конфигурационный файл values-castle.yaml:

    helm upgrade --install --version=1.32.0 --atomic --values ./values-castle.yaml navi-castle 2gis-on-premise/navi-castle
    

Чтобы проверить работоспособность сервиса Navi-Castle:

  1. Пробросьте порт сервиса с помощью kubectl:

    kubectl port-forward navi-castle-0 7777:8080
    
  2. Отправьте GET-запрос на корневой endpoint (/) с использованием cURL или аналогичного инструмента:

    curl -Lv http://127.0.0.1:7777/
    

    Вы должны получить в ответ HTML-страницу со списком всех файлов и папок, подобную этой:

    <html>
        <head>
            <title>Index of /</title>
        </head>
        <body>
            <h1>Index of /</h1>
            <hr />
            <pre>
                <a href="../">../</a>
                <a href="lost%2Bfound/">lost+found/</a>          09-Mar-2022 13:33        -
                <a href="packages/">packages/</a>                09-Mar-2022 13:33        -
                <a href="index.json">index.json</a>              09-Mar-2022 13:33      634
                <a href="index.json.zip">index.json.zip</a>      09-Mar-2022 13:33      357
            </pre>
            <hr />
        </body>
    </html>
    

Чтобы проверить работоспособность инстанса Navi-Back:

  1. Пробросьте порт сервиса с помощью kubectl:

    kubectl port-forward service/navi-back-<service> 7777:8080
    

    Где navi-back-<service> — имя инстанса, который вы указывали на этапе установки Navi-Back (например, navi-back-directions-car).

  2. Создайте файл data.json с телом запроса к API навигации. Примеры запросов мы можете найти в документации сервисов навигации:

    • Directions API: маршруты для автомобилей, велосипедов, такси, экстренных служб и пешеходов.
    • Truck Directions API: маршруты для грузового транспорта.
    • Public Transport API: маршруты для общественного транспорта.
    • Isochrone API: достижимые области на автомобиле.
    • Distance Matrix API: матрицы расстояний.

    Проверку сервиса Distance Matrix Async API см. ниже.

    Пример ниже содержит тело запроса к Directions API для построения автомобильного маршрута (приведён пример для Москвы):

    data.json

    {
        "alternative": 1,
        "locale": "en",
        "point_a_name": "start",
        "point_b_name": "finish",
        "type": "jam",
        "points": [
            {
                "start": true,
                "type": "walking",
                "x": 37.616489,
                "y": 55.751225
            },
            {
                "start": false,
                "type": "walking",
                "x": 37.418451,
                "y": 55.68355
            }
        ]
    }
    
  3. Отправьте запрос с использованием cURL или аналогичного инструмента (пример для Directions API):

    curl -Lv http://127.0.0.1:7777/carrouting/6.0.0/global -d @data.json
    

    Вы должны получить ответ со следующей структурой (пример для Directions API):

    {
      "query": {..},
      "result": [{..}, {..}]
      "type": "result"
    }
    

    Примеры ответов для других сервисов навигации мы можете найти в их документации.

Для запроса к сервису понадобится API-ключ, сгенерированный в сервисе ключей. Подробнее см. в разделе Ключи и токены.

Чтобы проверить работоспособность сервиса Navi-Router:

  1. Пробросьте порт сервиса с помощью kubectl:

    kubectl port-forward navi-router-6864944c7-vrpns 7777:8080
    
  2. Создайте файл data.json с телом запроса к сервису навигации, идентичный файлу из раздела Проверка работоспособности Navi-Back.

  3. Отправьте запрос с использованием cURL или аналогичного инструмента (пример для Directions API):

    curl -Lv http://127.0.0.1:7777/carrouting/6.0.0/global?key=API_KEY -d @data.json
    

    Где API_KEY — API-ключ для доступа к сервисам навигации.

    Вы должны получить ответ, содержащий имя правила, например:

    directions-car
    

Для запроса к сервису понадобится API-ключ, сгенерированный в сервисе ключей. Подробнее см. в разделе Ключи и токены.

Чтобы проверить работоспособность сервиса Navi-Front:

  1. Создайте файл data.json с телом запроса к сервису навигации, идентичный файлу из раздела Проверка работоспособности Navi-Back.

  2. Отправьте запрос с использованием cURL или аналогичного инструмента (пример для Directions API):

    curl -Lv http://navi-front.example.com:7777/carrouting/6.0.0/global?key=API_KEY -d @data.json
    

    Где API_KEY — API-ключ для доступа к сервисам навигации.

    Вы должны получить ответ со следующей структурой:

    {
      "query": {..},
      "result": [{..}, {..}]
      "type": "result"
    }
    

Для запроса к сервису понадобится API-ключ, сгенерированный в сервисе ключей. Подробнее см. в разделе Ключи и токены.

Чтобы проверить работоспособность сервиса Distance Matrix Async API:

  1. Создайте файл data.json с телом запроса (приведён пример для Москвы):

    {
        "points": [
            {
                "lon": 37.573289,
                "lat": 55.699926
            },
            {
                "lon": 37.614402,
                "lat": 55.706847
            },
            {
                "lon": 37.552182,
                "lat": 55.675928
            },
            {
                "lon": 37.620315,
                "lat": 55.669625
            }
        ],
        "sources": [0, 1],
        "targets": [2, 3]
    }
    
  2. Отправьте запрос с использованием cURL или аналогичного инструмента:

    curl -Lv https://navi-async-matrix.example.com/create_task/get_dist_matrix?key=API_KEY --header 'Content-Type: application/json' -d @data.json
    

    Где API_KEY — API-ключ для доступа к сервисам навигации.

    Вы должны получить ответ со следующей структурой:

    {
        "task_id": "{TASK_ID}",
        "message": "success add task",
        "status ": "success"
    }
    
  3. Выполните запрос статуса задачи, подставив в URL параметр TASK_ID, полученный в ответе на предыдущем шаге.

    curl -Lv https://navi-async-matrix.example.com/result/get_dist_matrix/{TASK_ID}
    

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

    {
        "task_id": "{TASK_ID}",
        "status": "TASK_DONE",
        "code": 200,
        "message": "1670066296399691644\ncalc_time_ms=485\nattract_time=21\nbuild_time=58\npoints_count=4\nsource_count=2\ntarget_count=2",
        "result_link": "http://artifacts.example.com/navi-async-matrix/{TASK_ID}.response.json"
    }
    
  4. Скачайте результат вычислений по URL, полученному в поле result_link на предыдущем шаге. Убедитесь, что результат представляет собой валидный JSON-файл. Пример:

    {
        "generation_time": 94.0,
        "routes": [
        {
        "status": "OK",
        "source_id": 0,
        "target_id": 2,
        "distance": 7996,
        "duration": 728,
        "reliability": 1.0
        },
        ...
        ],
        "attract_time": 21.0,
        "build_matrix_time": 58.0
    }
    

Чтобы проверить работоспособность сервиса Restrictions API:

  1. Создайте файл data.json с телом запроса (приведён пример для Москвы):

    {
        "start_time": "2022-07-03T20:30:00.000Z",
        "end_time": "2029-08-28T23:59:00.000Z",
        "lat": 55.75291,
        "lon": 37.6113,
        "is_whole_road": false
    }
    
  2. Отправьте запрос с использованием cURL или аналогичного инструмента:

    curl -Lv http://navi-restrictions:7777/points/ --header 'Content-Type: application/json' -d @data.json
    

    Вы должны получить ответ со следующей структурой:

    [
        {
            "edge_geometry": "LINESTRING(37.610827 55.752269, 37.610958 55.752424, 37.611215 55.752690, 37.611287 55.752790, 37.611356
            55.752894, 37.611798 55.753816)",
            "restriction_id": "{RESTRICTION_ID}",
            "start_time": "2022-07-05T14:13:35.936000+00:00",
            "end_time": "2029-08-28T23:59:00+00:00",
            "is_2gis": false
        }
    ]
    
  3. Проверьте, что перекрытие появилось в системе:

    curl -Lv http://navi-restrictions:7777/restrictions/
    
  4. Удалите перекрытие:

    curl --request "DELETE" http://navi-restrictions:7777/restrictions/{RESTRICTION_ID}
    

    Где {RESTRICTION_ID} — значение поля restriction_id в ответе на запрос в шаге 2.

Что дальше?