Установка API для работы с навигацией
Важное примечание:
Все пароли и ключи в этом разделе приведены в иллюстративных целях.
При реальной установке рекомендуется использовать более сложные и надёжные пароли.
1. Перед установкой
-
По возможности познакомьтесь с:
-
Убедитесь, что выполнены необходимые предварительные шаги:
-
Соберите необходимые данные, заданные или полученные на предыдущих шагах:
Объект Пример значения Как получить значение 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
См. Установка сервиса ключей * В иллюстративных целях предполагается, что сервисные токены доступны для всех продуктов навигации.
-
Определите, какие 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. Подробнее о сервисе см. на странице архитектуры.
-
Убедитесь, что удовлетворены требования к ресурсам, приведенные в 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) в переключателе тегов слева.
-
Определите доменные имена для сервисов навигации.
Пример:
- Доменное имя для Navi-Front:
navi-front.example.com
- Доменное имя для Distance Matrix Async API:
navi-async-matrix.example.com
- Доменное имя для Restrictions API:
navi-restrictions.example.com
- Доменное имя для Navi-Front:
2. Подготовьте инфраструктуру, необходимую для работы сервисов
Для установки базовых API навигации
Если вы планируете устанавливать базовые API навигации, настройте хранилище файлов для Navi-Castle. Определите путь, по которому будут находиться файлы с данными.
Пример: /opt/castle/data
Для установки Distance Matrix Async API
Если вы планируете устанавливать Distance Matrix Async API, дополнительно настройте:
-
PostgreSQL.
-
Разместите кластер PostgreSQL с доменным именем
navi-async-matrix-postgresql.storage.example.local
в приватной сети. В этом руководстве предполагается, что кластер работает на стандартном порту5432
. -
Подключитесь к кластеру от имени суперпользователя (обычно это
postgres
). -
Создайте пользователя базы данных, который будет использоваться для сервиса. Установите пароль для него.
create user dbuser_navi_async_matrix password 'wNgJamrIym8UAcdX';
-
Создайте базу данных, принадлежащую этому пользователю.
create database onpremise_navi_async_matrix owner dbuser_navi_async_matrix;
-
-
S3-совместимое хранилище.
-
Разместите S3-совместимое хранилище (например, Ceph) с доменным именем
navi-async-matrix-s3.storage.example.local
в приватной сети. В этом руководстве предполагается, что хранилище работает на стандартном порту80
. -
Создайте пользователя, который будет использоваться для сервиса. Запомните ключи доступа для этого пользователя.
Пример:
- Access key:
TRVR4ESNMDDSIXLB3ISV
- Secret key:
6gejRs5fyRGKIFjwkiBDaowadGLtmWs2XjEH18YK
- Access key:
-
Определите название бакета (bucket), который будет использоваться для сервиса.
Пример:
navi-async-matrix-bucket
Примечание
По умолчанию Distance Matrix Async API удаляет все файлы старше 14 дней в бакете.
-
-
Брокер сообщений Apache Kafka.
-
Разместите Apache Kafka с доменным именем
kafka.example.local
в приватной сети. В этом руководстве предполагается, что кластер работает на стандартном порту9092
. -
Создайте пользователя, который будет использоваться для сервиса. Запомните реквизиты для этого пользователя.
Пример:
- Имя пользователя:
kafka-async-matrix
- Пароль:
1Y2u3gGvi6VjNHUt
- Имя пользователя:
-
Для установки Restrictions API
Если вы планируете устанавливать Restrictions API, дополнительно настройте PostgreSQL:
-
Разместите кластер PostgreSQL с доменным именем
navi-restrictions-postgresql.storage.example.local
в приватной сети. В этом руководстве предполагается, что кластер работает на стандартном порту5432
. -
Подключитесь к кластеру от имени суперпользователя (обычно это
postgres
). -
Создайте пользователя базы данных, который будет использоваться для сервиса. Установите пароль для него.
create user dbuser_restrictions password 'jwbK65iFrCCcNrkg';
-
Создайте базу данных, принадлежащую этому пользователю.
create database onpremise_restrictions owner dbuser_restrictions;
3. Создайте файл правил
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']
4. Установите сервисы навигации
Установка сервиса Navi-Castle
Установка Navi-Castle обязательна для работы любых API навигации.
-
Создайте конфигурационный файл для 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
: директория для монтирования сертификата внутри контейнера.
-
-
Установите сервис с помощью 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-задачей по расписанию.
-
Проверьте работоспособность Navi-Castle по инструкции сейчас (рекомендуется) или в конце процедуры установки.
Установка сервиса Navi-Back
Установка Navi-Back обязательна для работы любых API навигации.
Для каждого типа навигации необходимо установить отдельную сущность Navi-Back. Выполните шаги ниже для каждого устанавливаемого типа навигации:
-
Создайте конфигурационный файл для 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
: директория для монтирования сертификата внутри контейнера.
-
-
Установите сервис с помощью 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
-
Проверьте работоспособность Navi-Back по инструкции сейчас (рекомендуется) или в конце процедуры установки.
-
Повторите шаги выше для следующего типа навигации.
Установка сервиса Navi-Router
Установка Navi-Router обязательна, если вы планируете использовать базовые API навигации.
-
Создайте конфигурационный файл для 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
: настройки вычислительных ресурсов для сервиса. Чтобы узнать рекомендуемые значения ресурсов, см. Вычислительные ресурсы.
-
-
Установите сервис с помощью 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
-
Проверьте работоспособность Navi-Router по инструкции сейчас (рекомендуется) или в конце процедуры установки.
Установка сервиса Navi-Front
Установка Navi-Front обязательна, если вы планируете использовать базовые API навигации.
-
Создайте конфигурационный файл для 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.
-
-
Установите сервис с помощью Helm, используя подготовленный конфигурационный файл
values-front.yaml
:helm upgrade --install --version=1.32.0 --atomic --values ./values-front.yaml navi-front 2gis-on-premise/navi-front
-
Проверьте работоспособность Navi-Back по инструкции сейчас (рекомендуется) или в конце процедуры установки.
Установка сервиса Distance Matrix Async API
-
Создайте конфигурационный файл для 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
: директория для монтирования сертификата внутри контейнера.
-
-
Установите сервис с помощью 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
Установка сервиса Restrictions API
-
Создайте конфигурационный файл для установки 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
andpassword
: реквизиты для доступа к базе данных, указанной в параметре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
: директория для монтирования сертификата внутри контейнера.
-
-
Установите сервис с помощью 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
-
Отредактируйте настройки
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-формате.
-
-
Обновите сервис Navi-Castle, используя отредактированный конфигурационный файл
values-castle.yaml
:helm upgrade --install --version=1.32.0 --atomic --values ./values-castle.yaml navi-castle 2gis-on-premise/navi-castle
5. Проверьте работоспособность установленных сервисов
Проверка сервиса Navi-Castle
Чтобы проверить работоспособность сервиса Navi-Castle:
-
Пробросьте порт сервиса с помощью
kubectl
:kubectl port-forward navi-castle-0 7777:8080
-
Отправьте 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
Чтобы проверить работоспособность инстанса Navi-Back:
-
Пробросьте порт сервиса с помощью
kubectl
:kubectl port-forward service/navi-back-<service> 7777:8080
Где
navi-back-<service>
— имя инстанса, который вы указывали на этапе установки Navi-Back (например,navi-back-directions-car
). -
Создайте файл
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 } ] }
-
Отправьте запрос с использованием 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" }
Примеры ответов для других сервисов навигации мы можете найти в их документации.
Проверка сервиса Navi-Router
Для запроса к сервису понадобится API-ключ, сгенерированный в сервисе ключей. Подробнее см. в разделе Ключи и токены.
Чтобы проверить работоспособность сервиса Navi-Router:
-
Пробросьте порт сервиса с помощью
kubectl
:kubectl port-forward navi-router-6864944c7-vrpns 7777:8080
-
Создайте файл
data.json
с телом запроса к сервису навигации, идентичный файлу из раздела Проверка работоспособности Navi-Back. -
Отправьте запрос с использованием 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
Проверка сервиса Navi-Front
Для запроса к сервису понадобится API-ключ, сгенерированный в сервисе ключей. Подробнее см. в разделе Ключи и токены.
Чтобы проверить работоспособность сервиса Navi-Front:
-
Создайте файл
data.json
с телом запроса к сервису навигации, идентичный файлу из раздела Проверка работоспособности Navi-Back. -
Отправьте запрос с использованием 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" }
Проверка сервиса Distance Matrix Async API
Для запроса к сервису понадобится API-ключ, сгенерированный в сервисе ключей. Подробнее см. в разделе Ключи и токены.
Чтобы проверить работоспособность сервиса Distance Matrix Async API:
-
Создайте файл
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] }
-
Отправьте запрос с использованием 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" }
-
Выполните запрос статуса задачи, подставив в 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" }
-
Скачайте результат вычислений по 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
Чтобы проверить работоспособность сервиса Restrictions API:
-
Создайте файл
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 }
-
Отправьте запрос с использованием 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 } ]
-
Проверьте, что перекрытие появилось в системе:
curl -Lv http://navi-restrictions:7777/restrictions/
-
Удалите перекрытие:
curl --request "DELETE" http://navi-restrictions:7777/restrictions/{RESTRICTION_ID}
Где
{RESTRICTION_ID}
— значение поляrestriction_id
в ответе на запрос в шаге 2.
Что дальше?
-
Узнайте, как обновить сервисы навигации:
-
Установите другие продукты программного комплекса 2ГИС: