API навигации | On-Premise | 2GIS Documentation
On-Premise

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

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

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

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

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

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

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

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

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

  4. Убедитесь, что удовлетворены требования к ресурсам, приведенные в Helm-чартах:

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

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

    Пример:

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

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

Настройте кластер PostgreSQL для использования в качестве хранилища:

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

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

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

    create database onpremise_navi_async_matrix owner dbuser_navi_async_matrix;
    

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

Настройте кластер PostgreSQL для использования в качестве хранилища:

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

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

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

    create database onpremise_restrictions owner dbuser_restrictions;
    

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

Настройте S3-совместимое хранилище:

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

    Пример:

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

    Пример: naviback-bucket

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

Настройте S3-совместимое хранилище:

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

    Пример:

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

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

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

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

Пример:

  • Имя пользователя: kafka-navi-back
  • Пароль: Ea6fNe5Bbx56Y1s0

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

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

Пример:

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

Сервис Navi-Castle хранит некоторые данные в виде файлов. Определите путь, по которому будут находиться эти файлы.

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

  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/1640661259.json
    
    resources:
        limits:
            cpu: 1000m
            memory: 512Mi
        requests:
            cpu: 500m
            memory: 128Mi
    
    ingress:
        enabled: true
        className: nginx
        hosts:
            - host: navi-castle.example.com
              paths:
                  - path: /
                    pathType: Prefix
        tls: []
        #  hosts:
        #    navi-castle.example.com
        #  secretName: secret.tls
    
    persistentVolume:
        enabled: false
        accessModes: [ReadWriteOnce]
        storageClass: ceph-csi-rbd
        size: 5Gi
    
    castle:
        castleDataPath: /opt/castle/data/
    
        # Только если вы используете Restrictions API
        restrictions:
            key: secret
            host: http://navi-restrictions.example.com
    
    cron:
        enabled:
            import: true
            restriction: true
        schedule:
            import: '*/10 * * * *'
            restriction: '*/10 * * * *'
        concurrencyPolicy: Forbid
        successfulJobsHistoryLimit: 3
    
    replicaCount: 1
    

    Где:

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

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

      • Укажите общие настройки для доступа к хранилищу: endpoint, имя бакета, реквизиты для доступа.
      • manifest: укажите путь до файла с манифестом в формате manifests/1640661259.json. Этот файл содержит в себе описания фрагментов данных, которые требуются сервисам для работы. См. Жизненный цикл артефактов установки.
    • resources: настройки вычислительных ресурсов для сервиса. Для получения актуальной информации о рекомендуемых значениях настроек в этой секции см. таблицу с минимальными системными требованиями.

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

    • 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.
      • 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-формате.
      • concurrencyPolicy: политика одновременного выполнения (concurrency policy) для задания.
      • successfulJobsHistoryLimit: ограничение на размер истории выполненных заданий.
    • replicaCount: число реплик сервиса Navi-Castle. Обратите внимание, что под каждой реплики получит своё выделенное cron-задание для получения актуальных данных из хранилища артефактов установки.

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

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

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

  1. Создайте файл правил rules.conf с требуемым набором правил.

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

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

    values-back.yaml
    dgctlDockerRegistry: docker.storage.example.local:5000
    
    affinity: {}
    
    hpa:
        enabled: false
        minReplicas: 1
        maxReplicas: 100
        scaleDownStabilizationWindowSeconds: ''
        scaleUpStabilizationWindowSeconds: ''
        targetCPUUtilizationPercentage: 80
        targetMemoryUtilizationPercentage: ''
    
    naviback:
        castleHost: navi-castle
        ecaHost: traffic-proxy
        forecastHost: traffic-proxy
        appPort: 443
        simpleNetwork:
            emergency: false
    
    replicaCount: 1
    
    resources:
        limits:
            cpu: 2000m
            memory: 16000Mi
        requests:
            cpu: 1000m
            memory: 1024Mi
    
    ingress:
        enabled: true
        className: nginx
        hosts:
            - host: navi-back.example.com
              paths:
                  - path: /
                    pathType: Prefix
        tls: []
        #- hosts:
        #  - navi-back.example.com
        #  secretName: secret.tls
    
    # Только если вы используете Distance Matrix Async API
    kafka:
        enabled: true
        server: navi-back-kafka.storage.example.local
        port: 9092
        groupId: group_id
        user: kafka-navi-back
        password: Ea6fNe5Bbx56Y1s0
        distanceMatrix:
            taskTopic: request_topic
            cancelTopic: cancel_topic
    
    # Только если вы используете Distance Matrix Async API
    s3:
        enabled: true
        host: navi-back-s3.storage.example.local:80
        bucket: naviback-bucket
        accessKey: HZJQSA1JMOMLXALINTVY
        secretKey: I2dAfvW0RRbjKj6ESn4gq5mwRJQ5ZCRSEqTWUWAf
    

    Где:

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

    • affinity: настройки node affinity.

    • hpa: настройки автомасштабирования (Horizontal Pod Autoscaling).

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

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

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

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

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

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

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

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

    • resources: настройки вычислительных ресурсов для сервиса. Для получения актуальной информации о рекомендуемых значениях настроек в этой секции см. таблицу с минимальными системными требованиями.

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

    • kafka: настройки доступа к брокеру Apache Kafka для взаимодействия с Distance Matrix Async API.

      • server: имя хоста или IP-адрес брокера Kafka.

      • port: порт брокера Kafka.

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

      • user и password: реквизиты для доступа к серверу Kafka.

      • distanceMatrix: названия топиков для взаимодействия с сервисом.

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

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

    helm upgrade --install --version=1.14.0 --atomic --values ./values-back.yaml navi-back 2gis-on-premise/navi-back
    
  1. Создайте файл правил rules.conf с требуемым набором правил.

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

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

    values-router.yaml
    dgctlDockerRegistry: docker.storage.example.local:5000
    
    router:
        logLevel: Warning
        castleHost: http://navi-castle
        keyManagementService:
            enabled: true
            host: http://keys-api/service/v1/keys
            refreshIntervalSec: 30
            downloadTimeoutSec: 30
            apis:
                # directions: "DIRECTIONS_TOKEN"
                # distance-matrix: "DISTANCE_MATRIX_TOKEN"
                # pairs-directions: "PAIRS_DIRECTIONS_TOKEN"
                # truck-directions: "TRUCK_DIRECTIONS_TOKEN"
                # public-transport: "PUBLIC_TRANSPORT_TOKEN"
                # isochrone: "ISOCHRONE_TOKEN"
                # map-matching : "MAP_MATCHING_TOKEN"
                # ppnot: "PPNOT_TOKEN"
                # combo-routes: "COMBO_ROUTES_TOKEN"
                # free-roam: "FREE_ROAM_TOKEN"
    
    replicaCount: 2
    
    resources:
        limits:
            cpu: 2000m
            memory: 1024Mi
        requests:
            cpu: 500m
            memory": 128Mi
    
    ingress:
        enabled: true
        className: nginx
        hosts:
            - host: navi-router.example.com
              paths:
                  - path: /
                    pathType: Prefix
        tls: []
        #- hosts:
        #  - navi-router.example.com
        #  secretName: secret.tls
    

    Где:

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

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

      • logLevel: уровень логирования, по умолчанию Warning. Доступные уровни: Verbose, Info, Warning, Error, Fatal.

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

      • keyManagementService: настройки сервиса ключей. Если не задавать эти настройки, то проверка API-ключа для запроса будет пропущена.

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

    • resources: настройки вычислительных ресурсов для сервиса. Для получения актуальной информации о рекомендуемых значениях настроек в этой секции см. таблицу с минимальными системными требованиями.

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

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

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

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

    values-front.yaml
    dgctlDockerRegistry: docker.storage.example.local:5000
    
    affinity: {}
    
    hpa:
        enabled: true
        minReplicas: 2
        maxReplicas: 6
        targetCPUUtilizationPercentage: 90
    
    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ГИС.

    • affinity: настройки node affinity.

    • hpa: настройки автомасштабирования (Horizontal Pod Autoscaling).

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

    • resources: настройки вычислительных ресурсов для сервиса. Для получения актуальной информации о рекомендуемых значениях настроек в этой секции см. таблицу с минимальными системными требованиями.

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

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

    helm upgrade --install --version=1.14.0 --atomic --values ./values-front.yaml navi-front 2gis-on-premise/navi-front
    
  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:
        bootstrap: navi-async-matrix-kafka.storage.example.local:9092
        groupId: group_id
        user: kafka-async-matrix
        password: 1Y2u3gGvi6VjNHUt
        consumerCancelTopic: cancel_topic
        topicRules:
            - topic: request_topic
              default: true
            - topic: moscow_request_topic
              projects:
                  - moscow
    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
    

    Где:

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

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

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

      • host: endpoint S3-совместимого хранилища.
      • bucket: имя бакета для хранения данных запросов.
      • 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.

      • bootstrap: URL брокера Kafka.

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

      • user и password: реквизиты для доступа к серверу Kafka.

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

      • 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.

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

    helm upgrade --install --version=1.14.0 --atomic --values ./values-navi-async-matrix.yaml navi-async-matrix 2gis-on-premise/navi-async-matrix
    
  1. Добавьте следующие настройки в конфигурационный файл Navi-Castle:

    castle:
        restrictions:
            key: secret
            host: http://navi-restrictions.example.com
    
    cron:
        enabled:
            import: true
            restriction: true
        schedule:
            import: '11 * * * *'
            restriction: '*/5 * * * *'
    

    Где:

    • restrictions.key: ключ для взаимодействия с сервисом Restrictions API. Любая строка.

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

    • cron.schedule: интервал обновления информации о перекрытиях дорог в формате cron.

  2. Добавьте следующие расположения в настройки NGINX сервиса Navi-Front:

    locationsBlock: |
      location /attract {
        proxy_pass http://navi-back.example.local;
      }
    
      location /edge {
        proxy_pass http://navi-back.example.local;
      }
    
  3. Создайте конфигурационный файл для Helm. Подробное описание доступных параметров см. здесь.

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

    values-restrictions.yaml
    dgctlDockerRegistry: docker.storage.example.local:5000
    
    db:
        host: navi-restrictions-postgresql.storage.example.local
        port: 5432
        name: onpremise_restrictions
        user: dbuser_restrictions
        password: jwbK65iFrCCcNrkg
    
    api:
        attractor_url: 'http://navi-back.example.com/attract'
        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:
        edges_url_template: 'http://navi-castle.example.com/restrictions_json/{project}/{date_str}_{hour}.json'
        edge_attributes_url_template: 'http://navi-back.example.com/edge?edge_id={edge_id}&offset=200&routing=carrouting'
        projects:
            - moscow
    
    api_key: secret
    

    Где:

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

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

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

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

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

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

      • edges_url_template: URL сервиса Navi-Castle. Этот URL должен быть доступен из всех подов вашего кластера Kubernetes.
      • edge_attributes_url_template: URL сервиса Navi-Back. Этот URL должен быть доступен из всех подов вашего кластера Kubernetes.
      • projects: список проектов Navi-Back (см. Файл правил).
    • api_key: ключ для взаимодействия с сервисами навигации. Должен совпадать с настройкой restrictions.key сервиса Navi-Castle.

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

helm upgrade --install --version=1.14.0 --atomic --wait-for-jobs --values ./values-restrictions.yaml navi-restrictions 2gis-on-premise/navi-restrictions

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

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

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

    curl -Lv http://navi-castle.example.com: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 navi-back-6864944c7-vrpns 7777:8080
    
  2. Создайте следующий файл с телом запроса к 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 или аналогичного инструмента:

    curl -Lv http://navi-back.example.com:7777/carrouting/6.0.0/global -d @data.json
    

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

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

    См. документацию сервисов навигации для получения примеров запросов и ответов.

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

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

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

  3. Отправьте запрос с использованием cURL или аналогичного инструмента:

    curl -Lv http://navi-router.example.com:7777/carrouting/6.0.0/global -d @data.json
    

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

    moscow_cr
    

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

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

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

  3. Отправьте запрос с использованием cURL или аналогичного инструмента:

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

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

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

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

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

    kubectl port-forward navi-async-matrix-6864944c7-vrpns 7777:8080
    
  2. Создайте следующий файл с телом запроса (приведён пример для Москвы):

    {
        "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]
    }
    
  3. Отправьте запрос с использованием cURL или аналогичного инструмента:

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

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

    {
        "task_id": "{TASK_ID}",
        "status ": "TASK_CREATED"
    }
    
  4. Выполните запрос статуса задачи, подставив в 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": "start_time_ms=16516816106601123 calc_time_ms=14419 attract_time=4 build_time=28 points_count=3 source_count=1 target_count=2",
        "result_link": "http://navi-async-matrix-s3.storage.example.local:80/dm/{TASK_ID}.response.json"
    }
    
  5. Скачайте результат вычислений по URL, полученному в поле result_link на предыдущем шаге. Убедитесь, что результат представляет собой валидный JSON-файл.

Чтобы проверить, что сервис работает, отправьте GET-запрос на endpoint /healthcheck.

Что дальше?