Развертывание среды выполнения¶
NEOMSA APIM состоит из слоя управления API и интеграционного слоя. Слой управления API включает несколько компонентов, которые вы можете использовать в своем развертывании. Интеграционный слой включает в себя либо среду выполнения Micro Integrator (для интеграции сервисов), либо среду выполнения Streaming Integrator (для требований потоковой передачи), либо обе среды выполнения.
Вы можете выбрать один из следующих шаблонов развертывания в зависимости от рабочей нагрузки на каждый компонент и ожидаемого трафика к каждому из компонентов и сред выполнения.
Стандартное развертывание High Availability (HA).
Это развертывание состоит из кластера APIM с двумя узлами среды выполнения APIM и двумя узлами каждой среды выполнения интеграции (Micro Integrator/Streaming Integrator). Вы можете использовать этот шаблон, если хотите получить низкий трафик для своего развертывания.
Примечание. Два узла каждого компонента используются для обеспечения минимальной высокой доступности во всех компонентах.
Кластер API-M
Кластер APIM состоит из двух узлов All-in-One APIM.
Интеграционные кластеры
Интеграционный кластер может быть кластером Micro Integrator или кластером Streaming Integrator или двумя кластерами каждого из них.
Стандартное развертывание HA с многопользовательской средой
Это развертывание состоит из двух узлов APIM и двух узлов каждой среды выполнения интеграции (Micro Integrator/Streaming Integrator) на каждого арендатора. Вы можете использовать этот шаблон, когда трафик от разных арендаторов в кластере APIM необходимо обрабатывать изолированно. Это развертывание также позволяет направлять трафик каждого арендатора в отдельный интеграционный кластер
Хотя узлы APIM способны работать с мультиарендностью in-jvm, узлы Micro Integrator/Streaming Integrator этого не делают. Поэтому для обработки трафика от разных арендаторов необходимо настроить разные кластеры интеграционных сред и соответствующим образом настроить маршрутизацию трафика.
Примечание. Базовое развертывание предполагает два узла каждой среды выполнения для обеспечения минимальной высокой доступности. Однако вы можете независимо масштабировать их в зависимости от ресурсных требований для каждого арендатора.
Кластер API-M
Кластер APIM состоит из двух узлов All-in-One APIM. Инструкции по настройке этого кластера см. по следующей ссылке.
Интеграционный кластер
Интеграционный кластер состоит из двух узлов среды выполнения интеграции для каждого из арендаторов в кластере APIM.
Простое масштабируемое развертывание
Этот шаблон позволяет масштабировать развертывание по требованию. Простой масштабируемый шаблон развертывания, показанный ниже, иллюстрирует развертывание, использующее минимум ресурсов. Однако эту настройку можно легко масштабировать.
Вам необходимо настроить три кластера из различных компонентов и сред выполнения, поскольку они имеют разные требования к масштабированию.
Примечание. Базовое развертывание предполагает два узла каждой среды выполнения для обеспечения минимальной высокой доступности. Однако вы можете независимо масштабировать их в зависимости от требований.
Кластер API-M
Уровень APIM данного развертывания состоит из двух кластеров компонентов APIM следующим образом:
| Кластер Control Plane | APIM control plane состоит из двух узлов профиля Control Pane APIM (Publisher, Devportal, Key Manager, Traffic Manager). Кластер из двух узлов является самым простым развертыванием для данного шаблона. При необходимости вы можете увеличить количество узлов. |
|---|---|
| Кластер шлюзов | Профиль шлюза APIM разворачивается как отдельный кластер, чтобы мы могли масштабировать его в соответствии с требованиями трафика. Самое простое развертывание для этой конфигурации состоит из кластера шлюза с двумя узлами. При необходимости вы можете увеличить количество узлов. |
Интеграционный кластер
Интеграционный кластер состоит из минимум двух узлов среды выполнения интеграции (Micro Integrator/Streaming Integrator).
Простое масштабируемое развертывание с разделением Traffic Manager
Этот шаблон позволяет масштабировать развертывание по требованию. Паттерн простого масштабируемого развертывания с разделением Traffic Manager, показанный ниже, иллюстрирует развертывание, использующее минимальные ресурсы. Однако эту конфигурацию можно легко масштабировать. Этот паттерн развертывания может использоваться только тогда, когда необходимо запускать узлы Traffic Manager отдельно из-за сложности развертывания.
Вам необходимо настроить три кластера из различных компонентов и сред выполнения, поскольку они имеют разные требования к масштабированию.
Примечание. Базовое развертывание предполагает два узла каждой среды выполнения для обеспечения минимальной высокой доступности. Однако вы можете независимо масштабировать их в зависимости от требований.
Кластер API-M
Уровень API-M данного развертывания состоит из двух кластеров компонентов API-M следующим образом:
| Кластер Control Plane | APIM control plane состоит из двух узлов профиля Control Pane API-M (Publisher, Devportal, Key Manager, Traffic Manager). Кластер из двух узлов является самым простым развертыванием для данного шаблона. При необходимости вы можете увеличить количество узлов. |
|---|---|
| Кластер шлюзов | Профиль шлюза API-M разворачивается как отдельный кластер, чтобы мы могли масштабировать его в соответствии с требованиями трафика. Самое простое развертывание для этой конфигурации состоит из кластера шлюза с двумя узлами. При необходимости вы можете увеличить количество узлов. |
| Кластер менеджера трафика | Профиль Traffic Manager API-M развернут как отдельный кластер, чтобы мы могли масштабировать его в соответствии с требованиями трафика. Самое простое развертывание для этой конфигурации состоит из кластера Traffic Manager с двумя узлами. При необходимости вы можете увеличить количество узлов. |
Интеграционный кластер
Интеграционный кластер состоит из минимум двух узлов среды выполнения интеграции (Micro Integrator/Streaming Integrator).
Развертывание среды выполнения APIM¶
Развертывание All-in-One¶
Развертывание «All-in-One» включает все компоненты API-M в одном экземпляре выполнения. Это легко настраивается и требует меньше ресурсов по сравнению с распределённым развертыванием. Хотя распределенное развертывание обеспечивает высокую производительность и высокий уровень масштабируемости, оно может быть слишком сложным, если вам нужно решение для управления API малого или среднего масштаба. Развертывание «All-in-One» идеально подходит, если вы хотите начать с малого и постепенно создать надёжную платформу для управления API.
Развертывание одного узла
В этой конфигурации API-трафик обрабатывается одним экземпляром NEOMSA APIM в режиме " All-in-One " (всё в одном).
| Плюсы | Минусы |
|---|---|
| Поддержка производства требуется только для одного узла API Manager | |
| Развертывание выполняется в течение нескольких часов. | |
| Может обрабатывать до 43 миллионов вызовов API в день (до 500 вызовов API в секунду) | |
| Минимальные требования к аппаратной/облачной инфраструктуре (только один узел). | |
| Подходит для всех, кто только начинает изучать API-управление. | Развертывание не обеспечивает высокую доступность. |
| Не дружественен к сети. Развертывание в демилитаризованной зоне (DMZ) потребует обратного прокси-сервера. |
Развертывание Active – Active
В этой конфигурации API-трафик обрабатывается двумя отдельными экземплярами NEOMSA APIM в режиме "all-in-one" (всё в одном).
| Плюсы | Минусы |
|---|---|
| Система обладает высокой доступностью. | |
| Производственная поддержка требуется для 2 узлов API Manager | |
| Может обрабатывать до 86 миллионов вызовов API в день (до 1000 вызовов API в секунду) | |
| Развертывание и запуск в течение нескольких часов. | Не дружественен к сети. Развертывание в DMZ потребует обратного прокси-сервера. |
Настройка одного узла APIM¶
На этой странице вы узнаете, как вручную настроить и развернуть NEOMSA API Manager в одном автономном экземпляре, без использования распределенных или HA- схем развертывания.
Следуйте инструкциям ниже, чтобы настроить и развернуть API-M используя один узел:
Создание SSL-сертификата¶
Информация. Все продукты NEOMSA по умолчанию поставляются с файлом keystore и файлом truststore, хранящимися в каталоге, хранящимися в каталоге <APIM-HOME>/repository/resources/security/. Хранилище ключей по умолчанию, которое поставляется с продуктом NEOMSA, wso2carbon.jks настроено с приватным ключом и самоподписанной парой открытого ключа для целей: шифрование конфиденциальной информации, взаимодействие по SSL и т.д.
В производственной среде рекомендуется настроить несколько различных хранилищ ключей с отдельными цепочками доверия для различных вариантов использования.
Настройка балансировщика нагрузки¶
Для доступа к порталам и шлюзу NEOMSA APIM в обоих экземплярах NEOMSA API-M вам необходимо подключить к системе балансировщик нагрузки. Вы можете использовать любой балансировщик нагрузки, доступный вашей системе.
Следуйте инструкциям в разделе Настройка прокси-сервера и балансировщика нагрузки, чтобы настроить балансировщик нагрузки/обратный прокси-сервер, который находится перед экземпляром APIM в демилитаризованной зоне (DMZ).
Настройка баз данных¶
NEOMSA APIM поставляется с базами данных H2 по умолчанию. Однако в производственной среде рекомендуется использовать стандартные реляционные базы данных RDBMS для NEOMSA_APIM_DB и NEOMSA_APIM_SHARED_DB.
Для получения информации смотрите раздел Подготовка БД.
Настройка URL-адресов шлюза для публикации API¶
Необходимо настроить URL-адреса среды, которые используются для раскрытия развернутых API в шлюзе. Добавьте имя хоста шлюза при настройке сред в файле <APIM-HOME>/repository/conf/deployment.toml.
Обновите эндпоинты с выбранным вами именем хоста для Gateway, как показано ниже. В данном случае используем gw.example.local в качестве имени хоста.
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://localhost:${mgt.transport.https.port}/services/"
username= "${admin.username}"
password= "${admin.password}"
ws_endpoint = "ws://[api-gateway-host]:9099"
wss_endpoint = "wss://[api-gateway-host]:8099"
http_endpoint = "http://[api-gateway-host]:${http.nio.port}"
https_endpoint = "https://[api-gateway-host]:${https.nio.port}"
Настройка URL-адреса портала разработчиков в Publisher¶
Обновите URL-адрес DevPortal с выбранным вами именем хоста, чтобы открыть порталы. Это необходимо для перенаправления ссылки "Просмотр в Dev Portal"в портале Publisher.
В этом случае давайте будем использовать api.example.local в качестве имени хоста:
Настройка аналитики APIM¶
API Manager Analytics поставляется через облачное решение API Manager Analytics. Вам необходимо настроить API Manager Gateway для публикации аналитических данных в облаке.
Настройка Production Hardening¶
В производственной среде перед развертыванием узла NEOMSA APIM убедитесь, что вы учли соответствующие факторы усиления защиты (например, изменение и шифрование паролей по умолчанию, настройку безопасности JVM и т. д.) и другие рекомендации по развертыванию производственной среды (например, параметры настройки, рекомендации по резервному копированию и восстановлению и т. д.).
Запуск сервера NEOMSA APIM¶
Если вы хотите развернуть NEOMSA APIM с использованием гибридного развертывания с одним узлом, где NEOMSA Identity Server используется в качестве диспетчера ключей, а все остальные компоненты NEOMSA APIM находятся в одном узле, настройте и запустите диспетчер ключей (например, настройте и запустите NEOMSA Identity Server в качестве диспетчера ключей) перед запуском сервера NEOMSA APIM.
ОС Linux/Mac
Настройка развертывания «Active-Active»¶
Здесь вы узнаете, как вручную настроить NEOMSA APIM с двумя активными узлами, каждый из которых содержит все компоненты APIM в одном экземпляре (экземпляр «all-in-one» (все в одном)).
Следуйте инструкциям ниже, чтобы настроить и развернуть APIM с использованием развертывания «active-active»:
Создание SSL-сертификата¶
Информация. Все продукты NEOMSA по умолчанию поставляются с файлом хранилища ключей (keystore) и файлом хранилища доверенных сертификатов (truststore), которые находятся в каталоге <APIM-HOME>/repository/resources/security/. Хранилище ключей по умолчанию, которое поставляется с продуктом NEOMSA, wso2carbon.jks настроено с закрытым ключом и самоподписанной парой открытых ключей для всех целей, таких как шифрование конфиденциальной информации, коммуникация по SSL и т.д.
В производственной среде рекомендуется настроить несколько различных хранилищ ключей с отдельными цепочками доверия для различных вариантов использования.
Примечание. ледует использовать одно и то же хранилище ключей и хранилище доверенных сертификатов для SSL в обоих экземплярах NEOMSA APIM .
Настройка балансировщика нагрузки¶
Для доступа к порталам и шлюзу NEOMSA APIM необходимо использовать балансировщик нагрузки. Вы можете использовать любой доступный балансировщик нагрузки.
Настройка баз данных¶
Базы данных NEOMSA_APIM_DB и NEOMSA_APIM_SHARED_DB должны быть общими для двух узлов APIM. Для этой цели рекомендуется использовать стандартные базы данных RDBMS.
Для получения информации смотрите раздел Подготовка БД.
Настройка второго узла Neomsa APIM¶
Создайте копию активного экземпляра, настроенного выше, и используйте эту копию в качестве второго активного экземпляра.
Информация. При создании копии узла вам также необходимо сделать копию SSL-сертификата, который вы создали для узла 1 на шаге 1 .
Настройка синхронизации артефактов¶
Чтобы включить синхронизацию для артефактов времени выполнения двух экземпляров NEOMSA APIM , рекомендуется иметь общую файловую систему. Настройте общую файловую систему в качестве механизма синхронизации контента Вы можете использовать общую файловую систему, такую как NFS (Network File System), или любую другую доступную файловую систем
Необходимо смонтировать следующие папки двух узлов в общую файловую систему, чтобы обеспечить общий доступ к ресурсам между всеми узлами.
-
<APIM-HOME>/repository/deployment/server/userstores- Если в супер арендаторе настроено вторичное хранилище пользователей, необходимо создать резервную копию этой папки.
-
<APIM-HOME>/repository/tenants- Если используется аренда и настроены какие-либо вторичные хранилища пользователей для арендаторов.
Настройка Publisher со шлюзом¶
Когда файловая система является общей , артефакты доступны для обоих узлов шлюза. Таким образом, один узел может публиковать артефакты API на своих собственных узлах. Следовательно, вы можете указать service_url как localhost в файле deployment.toml обоих узлов.
[[apim.gateway.environment]]
...
service_url = "https://localhost:${mgt.transport.https.port}/services/"
...
Настройка URL-адресов шлюза для раскрытия API¶
Вам необходимо настроить URL-адреса среды, которые используются для раскрытия развернутых API в шлюзах обоих узлов. Добавьте имя хоста шлюза при настройке сред в файле <APIM-HOME>/repository/conf/deployment.toml в обоих узлах APIM.
Обновите эндпоинты с выбранным вами именем хоста для шлюзов, как показано ниже. В этом случае используем gw.example.local в качестве имени хоста.
[[apim.gateway.environment]]
...
ws_endpoint = "ws://[api-gateway-host]:9099"
wss_endpoint = "wss://[api-gateway-host]:8099"
http_endpoint = "http://[api-gateway-host]:${http.nio.port}"
https_endpoint = "https://[api-gateway-host]:${https.nio.port}"
Настройка ограничения скорости¶
-
Настройте публикацию данных в разделе apim.throttling.url_group, который находится в блоке apim.throttling.url_group в файле <APIM-HOME>/repository/conf/deployment.toml обоих узлов.
- Необходимо обновить эти конфигурации, чтобы шлюз мог публиковать данные в менеджер трафика на своем узле и в менеджер трафика на другом узле, чтобы одно и то же событие отправлялось на оба сервера одновременно.
Компонент NEOMSA Complex Event Processor (NEOMSA CEP), входящий в состав Traffic Manager, действует как приемник данных и обрабатывает данные для принятия решений о регулировании.
Узел1
Формат
[apim.throttling]
event_duplicate_url = ["tcp://<node2-hostname>:<node2-port>"]
throttle_decision_endpoints = ["tcp://<node1-hostname>:<node1-port>"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://<node1-hostname>:<node1-port>"]
traffic_manager_auth_urls = ["ssl://<node1-hostname>:<node1-port>"]
type = "loadbalance"
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://<node2-hostname>:<node2-port>"]
traffic_manager_auth_urls = ["ssl://<node2-hostname>:<node2-port>"]
type = "loadbalance"
Пример
[apim.throttling]
event_duplicate_url = ["tcp://127.0.0.1:5673"]
throttle_decision_endpoints = ["tcp://localhost:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://127.0.0.1:9611"]
traffic_manager_auth_urls = ["ssl://127.0.0.1:9711"]
type = "loadbalance"
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://127.0.0.1:9612"]
traffic_manager_auth_urls = ["ssl://127.0.0.1:9712"]
type = "loadbalance"
Узел2
Формат
[apim.throttling]
event_duplicate_url = ["tcp://<node1-hostname>:<node1-port>"]
throttle_decision_endpoints = ["tcp://<node2-hostname>:<node2-port>"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://<node1-hostname>:<node1-port>"]
traffic_manager_auth_urls = ["ssl://<node1-hostname>:<node1-port>"]
type = "loadbalance"
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://<node2-hostname>:<node2-port>"]
traffic_manager_auth_urls = ["ssl://<node2-hostname>:<node2-port>"]
type = "loadbalance"
Пример
[apim.throttling]
event_duplicate_url = ["tcp://127.0.0.1:5672"]
throttle_decision_endpoints = ["tcp://localhost:5673"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://127.0.0.1:9611"]
traffic_manager_auth_urls = ["ssl://127.0.0.1:9711"]
type = "loadbalance"
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://127.0.0.1:9612"]
traffic_manager_auth_urls = ["ssl://127.0.0.1:9712"]
type = "loadbalance"
1. Сохраните изменения.
Примечание. Настройка ограничения скорости для кластера API Gateway неприменима, если у вас кластерная настройка.
Опционально включите аннулирование распределенного кэша¶
Добавьте следующий блок конфигурации в файл <APIM-HOME>/repository/conf/deployment.toml на обоих узлах.
Настройка аналитики APIM¶
API Manager Analytics поставляется через облачное решение API Manager Analytics. Вам необходимо настроить API Manager Gateway для` публикации аналитических данных в облаке.
Настройка Production Hardening¶
В производственной среде перед развертыванием узлов NEOMSA APIM убедитесь, что вы учли соответствующие факторы усиления безопасности (например, изменение и шифрование паролей по умолчанию, настройку безопасности JVM и т. д.) и другие рекомендации по развертыванию производственной среды (например, параметры настройки, рекомендации по резервному копированию и восстановлению и т. д.).
Запуск серверов NEOMSA APIM¶
Запустите серверы NEOMSA APIM с помощью стандартного скрипта запуска.
ОС Linux
Информация. Если вы хотите развернуть NEOMSA APIM с использованием гибридной схемы развертывания «active-active», где NEOMSA Identity Server используется в качестве диспетчера ключей в режиме высокой доступности, а все остальные компоненты NEOMSA APIM находятся в одном узле, настройте и запустите диспетчер ключей (например, настройте и запустите NEOMSA Identity Server в качестве диспетчера ключей) перед запуском серверов APIM.
Распределенное Развертывание¶
Как работает распределенное развертывание NEOMSA APIM. Согласно рекомендуемым шаблонам развертывания, распределенное развертывание включает узлы сервера APIM, которые по отдельности запускают профили APIM. Профиль APIM — это экземпляр сервера, который запускает только определенные компоненты сервера APIM.
Профили APIM
Ниже перечислены различные профили, доступные в NEOMSA APIM .
| Профиль | Описание |
|---|---|
| Профиль Gateway | Запускает только компоненты, связанные с API-шлюзом. Этот профиль запускает внутренние функции для обработки данных. |
| Профиль Control Plane | Запускает все компоненты APIM (Traffic Manager, Key Manager, Publisher, Developer Portal), за исключением Gateway. |
| Профиль Traffic Manager | Запускает только компонент Traffic Manager. |
| Профиль Key Manager | Запускает только компонент Key Manager. |
Базы данных, используемые профилями APIM
При запуске сервера APIM в качестве отдельных профилей базы данных используются, как показано ниже.
| База данных API-менеджера apimgtdb NEOMSA_APIM_DB |
Общая база данных shareddb NEOMSA_APIM_SHARED_DB |
|
|---|---|---|
| Профиль Control Plane | Используется | Используется |
| Профиль Gateway | Не используется | Используется (в режиме многопользовательской аренды/в режиме нескольких шлюзов при использовании Google Analytics) |
| Профиль Traffic Manager | Используется | Используется |
| Профиль Key Manager | Используется | Используется |
Конфигурация профиля шлюза - shared_db. Обратите внимание, что источник данных реестра не должен быть полностью удален из узла шлюза, хотя shared_db не требуется для определённых случаев использования. Во время инициализации сервера модули ядра пользователя и реестра полагаются на реестр и хранилище пользователей, указывающие на H2 shared db или H2-based carbon DB. Убедитесь, что по крайней мере конфигурации реестра и хранилища пользователей установлены надлежащим образом.
Компоненты APIM
Ниже перечислены пять компонентов сервера APIM. При запуске рекомендуемых профилей APIM используются компоненты (из списка ниже), необходимые для работы функций, связанных с каждым профилем.
| Компонент | Описание |
|---|---|
| Gateway | Отвечает за обеспечение безопасности, защиту, управление и масштабирование вызовов API. |
| Key Manager | Отвечает за все операции, связанные с безопасностью и ключами. |
| Traffic Manager | Отвечает за принятие решений по ограничению тарифов. |
| Publisher Portal | Позволяет поставщикам API легко публиковать свои API, обмениваться документацией, предоставлять ключи API и собирать отзывы о функциях, качестве и использовании API. |
| Developer Portal | Позволяет потребителям самостоятельно регистрироваться, открывать для себя функциональные возможности API, подписываться на API, оценивать их и взаимодействовать с издателями API. |
Понимание распределенного развертывания
В типичном распределенном развертывании все компоненты APIM (за исключением шлюза APIM) работают в Control Plane. Однако есть возможность отделить Traffic Manager от Control Plane.. С этим есть два варианта, по которым мы можем настроить распределённое развертывание для API-M:
Простое масштабируемое развертывание
Следующая диаграмма иллюстрирует, как профили Control Plane и Gateway взаимодействуют в настройке распределённого развертывания, а также соединения баз данных каждого узла Чтобы узнать, как настроить это развертывание, обратитесь к разделу по настройке распределённого развертывания APIM.
Простое масштабируемое развертывание с разделением Traffic Manager
На следующей схеме показано, как профили Control Plane, Traffic Manager и Gateway взаимодействуют в распределенной установке развертывания. Она также демонстрирует соединения баз данных каждого узла. Разделение компонента Traffic Manager от Control Plane может потребоваться, если в вашей среде присутствуют какие-либо сложности развертывания. Чтобы узнать, как настроить это развертывание, обратитесь к разделу по настройке распределённого развертывания APIM.
Простое масштабируемое развертывание с разделением менеджеров ключей.
На следующей схеме показано, как профили Control Plane, Key Manager и Gateway взаимодействуют в распределенной настройке развертывания. Она также показывает соединения с базой данных каждого узла. Разделение компонента менеджера ключей от контроллера может быть необходимо, если в вашей среде существуют сложности с развертыванием. Например, если имеется большое количество вызовов генерации токенов, может потребоваться масштабирование компонента Key Manager. В таких случаях отделение Key Manager от Control Plane обеспечивает независимое масштабирование. Чтобы узнать, как настроить это развертывание, см. раздел Настройка распределенного развертывания APIM.
Настройка распределённого развертывания APIM с Gateway и Control Plane¶
Сервер NEOMSA API-M может быть развернут как развертывание «all-in-one» или как распределенное развертывание. В распределенной конфигурации профили сервера APIM разворачиваются как отдельные узлы APIM
Ниже приведены узлы API-M, которые могут быть в распределенном развертывании по умолчанию.
Примечание. Для обеспечения высокой доступности вам потребуется минимум два узла, на которых будет запущен каждый профиль.
| Узел API-M (профиль) | Описание |
|---|---|
| Рабочий узел шлюза | Узлы APIM, на которых запущен профиль шлюза. |
| Узел Control Plane | Узлы APIM, на которых запущен профиль Control Plane. Control Plane включает компоненты Traffic Manager, Key Manager, Publisher и Developer Portal. |
Установка NEOMSA APIM¶
Для установки и настройки серверов API-M:
-
Загрузите API-менеджер NEOMSA.
-
Создайте копии дистрибутива API-M для отдельных профилей.
Настройка баз данных¶
Вы можете создать необходимые базы данных для развертывания APIM на отдельном сервере и указать базы данных с соответствующих узлов.
Для получения информации смотрите раздел Подготовка БД.
Настройка развертывания с учетом требований к безопасности¶
Перед развертыванием NEOMSA APIM убедитесь, что вы учли соответствующие факторы повышения безопасности (например, изменение и шифрование паролей по умолчанию, настройку безопасности JVM и т. д.).
Создание и импорт SSL-сертификатов¶
Создайте SSL-сертификат для каждого из узлов NEOMSA APIM и импортируйте их в хранилище ключей и хранилище доверенных сертификатов. Это гарантирует, что проблем с несоответствием имени хоста в сертификатах не возникнет.
Примечание. Для всех экземпляров API Manager для расшифровки ресурсов реестра следует использовать одно и то же первичное хранилище ключей.
Настройка аналитики APIM¶
API Manager Analytics поставляется через облачное решение API Manager Analytics. Вам необходимо настроить API Manager Gateway для публикации аналитических данных в облаке.
Настройка и запуск профилей¶
Настройка узлов APIM в развертывании.
Настройте узлы шлюза
Настройте шлюз для связи с плоскостью управления.
-
Откройте файл узла шлюза <APIM-HOME>/repository/conf/deployment.toml.
-
Добавьте следующие конфигурации в файл deployment.toml.
Подключение шлюза к компоненту Key Manager в Control Plane:
Control Plane с HA
[apim.key_manager]
service_url = "https://[control-plane-LB-host]/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
Single Control Plane
[apim.key_manager]
service_url = "https://[control-plane-host]:${mgt.transport.https.port}/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
Подключение шлюза к компоненту Traffic Manager в Control Plane:
Control Plane с HA
[apim.throttling]
service_url = "https://[control-plane-LB-host]/services/"
throttle_decision_endpoints = ["tcp://control-plane-1-host:5672", "tcp://control-plane-2-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://control-plane-1-host:9611"]
traffic_manager_auth_urls = ["ssl://control-plane-1-host:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://control-plane-2-host:9611"]
traffic_manager_auth_urls = ["ssl://control-plane-2-host:9711"]
Single Control Plane
[apim.throttling]
service_url = "https://control-plane-host:${mgt.transport.https.port}/services/"
throttle_decision_endpoints = ["tcp://control-plane-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://control-plane-host:9611"]
traffic_manager_auth_urls = ["ssl://control-plane-host:9711"]
Информация
В этом сценарии конфигурации ограничения скорости используются для настройки как управления трафиком, так и event hub шлюза.
Шлюз будет публиковать события, связанные с вызовом шлюза, в менеджер трафика, используя apim.throttling.url_group. Менеджеры трафика будут получать эти события, и решения по ограничению скорости будут публиковаться обратно в шлюз. Чтобы получать эти решения по ограничению скорости, шлюзу необходимо создать JMS-соединение с использованием throttle_decision_endpoints и слушать его
Включение TLS/SSL для шлюза для коммуникаций Traffic Manager JMS
При необходимости можно включить TLS/SSL для JMS-коммуникаций между узлами шлюза и менеджера трафика.
Для этой цели добавьте следующую конфигурацию в узел шлюза.
[apim.throttling.jms]
topic_connection_factory = "amqp://<![CDATA[<username>]]>:<![CDATA[<password>]]>@clientid/carbon?brokerlist='tcp://tm.example.local:8672?ssl='true'%26ssl_cert_alias='<certificate_alias_in_truststore>'%26trust_store='<path_to_trust_store>'%26trust_store_password='<truststore_password>'%26key_store='<path_to_key_store>'%26key_store_password='<keystore_password>''"
Также обновите узел Traffic Manager, чтобы включить следующую конфигурацию для обеспечения безопасных соединений брокера.
[broker.transport.amqp.ssl_connection]
enabled = true
port = 8672
ssl_enabled_protocols = "TLSv1,TLSv1.2"
ciphers = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
[broker.transport.amqp.ssl_connection.keystore]
location = "repository/resources/security/wso2carbon.jks"
password = "wso2carbon"
cert_type = "SunX509"
[broker.transport.amqp.ssl_connection.truststore]
location = "repository/resources/security/client-truststore.jks"
password = "wso2carbon"
cert_type = "SunX509"
То же самое соединение JMS будет использоваться для подписки на события, полученные из хаба событий (event hub). Шлюз будет подписываться на события, связанные с API, приложениями, подписками и операциями менеджера ключей. Параметр service_url указывает на внутренний API, который находится в хабе событий и используется для извлечения артефактов и информации из базы данных.
-
Добавьте следующую конфигурацию в файл deployment.toml для настройки среды шлюза. Измените свойство gateway_labels в зависимости от вашего окружения шлюза.
Информация. После развертывания/неразвертывания API Control Plane отправит событие развертывания/неразвертывания на шлюзы. Используя эту конфигурацию, шлюз отфильтрует соответствующие события развертывания/неразвертывания и извлекает артефакты.
-
Включите JSON Web Token (JWT), если требуется.
-
Добавьте публичный сертификат приватного ключа (который используется для подписи токенов) в хранилище доверенных сертификатов (truststore) под алиасом gateway_certificate_alias.
Примечание. Это неприменимо, если вы используете сертификаты по умолчанию, которые поставляются вместе с самим продуктом.
-
Чтобы настроить высокую доступность (HA) для шлюза API-M, выполните следующие действия:
-
Создайте копию узла APIM Gateway, который вы только что настроили. Это будет второй узел кластера APIM Gateway.
-
Настройте балансировщик нагрузки, который будет находиться перед двумя узлами Gateway в вашем развертывании.
-
Примечание. пользовательские артефакты времени выполнения, развернутые в шлюзе, добавьте следующую конфигурацию в файл узлов шлюза /repository/conf/deployment.toml.
[apim.sync_runtime_artifacts.gateway.skip_list]
apis = ["api1.xml","api2.xml"]
endpoints = ["endpoint1.xml"]
sequences = ["post_with_nobody.xml"]
local_entries = ["file.xml"]
1. Откройте файлы deployment.toml каждого узла Gateway и добавьте имя хоста кластера. Например, если имя хоста — gw.example.local:
```toml
[server]
hostname = "gw.example.local"
```
1. Укажите следующие конфигурации входящих подключений в файлах deployment.toml обоих узлов.
```toml
[transport.http]
properties.port = 9763
properties.proxyPort = 80
[transport.https]
properties.port = 9443
properties.proxyPort = 443
```
1. Откройте файл сервера /etc/hosts и сопоставьте имена хостов с IP-адресами.
Формат:<GATEWAY-IP> gw.<domain name>.com
Пример: xxx.xxx.xxx.xx4 gw.<domain name>.com
Пример конфигурации для шлюза
Кластер HA
[server]
hostname = "gw.example.local"
node_ip = "127.0.0.1"
server_role = "gateway-worker"
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
[transport.http]
properties.port = 9763
properties.proxyPort = 80
[transport.https]
properties.port = 9443
properties.proxyPort = 443
[apim.sync_runtime_artifacts.gateway]
gateway_labels =["Default"]
# key manager implementation
[apim.key_manager]
service_url = "https://cp.example.local/services/"
# Traffic Manager configurations
[apim.throttling]
service_url = "https://cp.example.local/services/"
throttle_decision_endpoints = ["tcp://apim-cp-1:5672", "tcp://apim-cp-2:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://apim-cp-1:9611"]
traffic_manager_auth_urls=["ssl://apim-cp-1:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://apim-cp-2:9611"]
traffic_manager_auth_urls=["ssl://apim-cp-2:9711"]
Одиночный узел
[server]
hostname = "gw.example.local"
node_ip = "127.0.0.1"
server_role = "gateway-worker"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
[apim.sync_runtime_artifacts.gateway]
gateway_labels =["Default"]
[apim.key_manager]
service_url = "https://cp.example.local:9443/services/"
[apim.throttling]
service_url = "https://cp.example.local:9443/services/"
throttle_decision_endpoints = ["tcp://cp.example.local:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://cp.example.local:9611"]
traffic_manager_auth_urls=["ssl://cp.example.local:9711"]
Настройте узлы Control Plane
Настройте Control Plane для связи со шлюзом.
-
Откройте файл <APIM-HOME>/repository/conf/deployment.toml узла Control Plane.
-
Добавьте следующие конфигурации в файл deployment.toml.
Подключение плоскости управления к узлу шлюза:
Шлюз с HA
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-LB-host]/services/"
ws_endpoint = "ws://[api-gateway-LB-host-or-ip]:9099"
wss_endpoint = "wss://[api-gateway-LB-host-or-ip]:8099"
http_endpoint = "http://[api-gateway-LB-host]"
https_endpoint = https://[api-gateway-LB-host]
Один шлюз
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-host]:9443/services/"
ws_endpoint = "ws://[api-gateway-host]:9099"
wss_endpoint = "wss://[api-gateway-host]:8099"
http_endpoint = "http://[api-gateway-host]:${http.nio.port}"
https_endpoint = "https://[api-gateway-host]:${https.nio.port}"
Информация. Эта конфигурация используется для развертывания API на шлюзе и для подключения компонента Портала Разработчика к шлюзу, если шлюз используется несколькими арендаторами. Если шлюз не используется в нескольких арендаторах, вы можете создать окружение шлюза с помощью Админ Портала.
Обратите внимание, что в приведенных выше конфигурациях service_url относится к порту 9443 узла шлюза, в то время как http_endpoint и https_endpoint относится к портам http и https (8280 и 8243).
Добавить конфигурации Event Hub :
Информация
Включение TLS/SSL для JMS-коммуникаций Event Hub
Если это необходимо, вы можете включить TLS/SSL для JMS-коммуникаций Event Hub. Обновите ваши конфигурации Event Hub, добавив следующее:
[apim.event_hub]
enable = true
jms.username = "<username>"
jms.password = "<password>"
jms.ssl = "true'&ssl_cert_alias='<certificate_alias_in_truststore>'&trust_store='<path_to_trust_store>'&trust_store_password='<truststore_password>'&key_store='<path_to_key_store>'&key_store_password='<keystore_password>"
ssl = "true'&ssl_cert_alias='<certificate_alias_in_truststore>'&trust_store='<path_to_trust_store>'&trust_store_password='<truststore_password>'&key_store='<path_to_key_store>'&key_store_password='<keystore_password>"
event_listening_endpoints = ["tcp://control-plane-host:8672"]
Чтобы включить защищенные соединения брокера, добавьте следующую конфигурацию в узел Control Plane.
[broker.transport.amqp.ssl_connection]
enabled = true
port = 8672
ssl_enabled_protocols = "TLSv1,TLSv1.2"
ciphers = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
[broker.transport.amqp.ssl_connection.keystore]
location = "repository/resources/security/wso2carbon.jks"
password = "wso2carbon"
cert_type = "SunX509"
[broker.transport.amqp.ssl_connection.truststore]
location = "repository/resources/security/client-truststore.jks"
password = "wso2carbon"
cert_type = "SunX509"
Добавляйте конфигурации Event Hub только в случае наличия высокой доступности (High Availability HA) для Control Plane.
# Event Hub configurations
[apim.event_hub]
enable = true
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
service_url = "https://localhost:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
event_duplicate_url = ["tcp://apim-cp-2:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-1-host:9611"]
auth_urls = ["ssl://control-plane-1-host:9711"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-2-host:9611"]
auth_urls = ["ssl://control-plane-2-host:9711"]
Информация. Поскольку в настройке HA имеется два Event Hub, каждый из них должен публиковать события в оба потока событий. Это будет осуществляться через потоки событий, созданные с помощью apim.event_hub.publish.url_group. События отзыва токенов, полученные в одном Event Hub, будут дублироваться в другой Event Hub с использованием event_duplicate_url.
Добавление конфигураций слушателя событий:
Приведенные ниже конфигурации добавляются в Control Plane только в том случае, если вы используете Resident Key Manager (который находится в Control Plane). Если вы используете NEOMSA IS в качестве Key Manager, вам необходимо добавить их в узел IS. После добавления приведенных ниже конфигураций Control Plane или Identity Server будут слушать события отзыва токенов и вызывать notification_endpoint для уведомления о отзыве токена.
Control Plane с High Availability
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://[control-plane-LB-host]/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
Одиночная Control Plane
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://[control-plane-host]:${mgt.transport.https.port}/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
-
Дополнительно добавьте следующую конфигурацию, для включения функции распределенной инвалидации кеша между узлами..
-
Чтобы настроить высокую доступность (High Availability HA) для Control Plane, выполните следующие действия:
-
Создайте копию узла API-M Control Plane, который вы только что настроили. Это будет второй узел кластера APIM Control Plane.
-
Настройте балансировщик нагрузки, перед двумя узлами Control Plane в вашем развертывании.
-
Примечание. Чтобы задать соответствующую задержку для значения heartbeat, когда соединения остаются бездействующими в течение длительных периодов, включите следующую конфигурацию. Это контролирует частоту внутреннего heartbeat, отправляемого базовым компонентом брокера Qpid:
Кластер HA
[server]
hostname = "cp.example.local"
node_ip = "127.0.0.1"
server_role="control-plane"
base_path = "${carbon.protocol}://${carbon.host}:${carbon.management.port}"
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.apim_db]
type = "mysql"
hostname = "db.example.local"
name = "apim_db"
port = "3306"
username = "apimadmin"
password = "apimadmin"
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-LB-host]/services/"
ws_endpoint = "ws://[api-gateway-LB-host]:9099"
wss_endpoint = "wss://[api-gateway-LB-host]:8099"
http_endpoint = "http://[api-gateway-LB-host]"
https_endpoint = "https://[api-gateway-LB-host]"
[apim.devportal]
url = "https://cp.example.local/devportal"
[transport.http]
properties.port = 9763
properties.proxyPort = 80
[transport.https]
properties.port = 9443
properties.proxyPort = 443
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
event_duplicate_url = ["tcp://apim-cp-2:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://apim-cp-1:9611"]
auth_urls = ["ssl://apim-cp-1:9711"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://apim-cp-2:9611"]
auth_urls = ["ssl://apim-cp-2:9711"]
# key manager implementation
[apim.key_manager]
service_url = "https://cp.example.local/services/"
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://cp.example.local/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
Одиночный узел
[server]
hostname = "cp.example.local"
node_ip = "127.0.0.1"
server_role = "control-plane"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.apim_db]
type = "mysql"
hostname = "db.example.local"
name = "apim_db"
port = "3306"
username = "root"
password = "root"
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "root"
password = "root"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
# Gateway configuration
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://gw.example.local:9443/services/"
username= "${admin.username}"
password= "${admin.password}"
ws_endpoint = "ws://[api-gateway-host]:9099"
wss_endpoint = "wss://[api-gateway-host]:8099"
http_endpoint = "http://[api-gateway-host]:8280"
https_endpoint = "https://[api-gateway-host]:8243"
# key manager implementation
[apim.key_manager]
service_url = "https://cp.example.local:9443/services/"
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://cp.example.local:9443/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
Запуск узлов API-M¶
После успешной настройки всех узлов API-M в развертывании можно запускать серверы.
- Запуск узлов шлюза
Откройте терминал, перейдите в папку<APIM-GATEWAY-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
- Запуск узлов Control Plane
Откройте терминал, перейдите в папку<APIM-CONTROL-PLANE-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
Настройка распределённого развертывания APIM с менеджером трафика отделенным от Control Plane¶
Сервер NEOMSA APIM может быть развернут как развертывание «all-in-one» или как распределенное развертывание. В распределенной настройке профили сервера APIM разворачиваются как отдельные узлы APIM.
Ниже приведены узлы APIM, которые могут быть использованы при распределенном развертывании.
Примечание Для обеспечения высокой доступности вам потребуется минимум два узла, на которых будет запущен каждый профиль.
| Узел API-M (профиль) | Описание |
|---|---|
| Рабочий узел шлюза | Узлы APIM, на которых запущен профиль шлюза. |
| Узел Control Plane | Узлы APIM, на которых запущен профиль Control Plane. Control Plane включает компоненты Traffic Manager, Key Manager, Publisher и Developer Portal. |
| Узел менеджера трафика (опционально) | При необходимости можно настроить отдельный узел APIM для запуска компонента Traffic Manager. То есть узлы Control Plane запускают Key Manager, Publisher и Developer Portal, в то время как Traffic Manager работает |
Установка NEOMSA APIM¶
Для установки и настройки серверов APIM:
-
Загрузите API-менеджер NEOMSA.
-
Создайте копии дистрибутива APIM для отдельных профилей.
Настройка баз данных¶
Вы можете создать необходимые базы данных для развертывания APIM на отдельном сервере и указать базы данных с соответствующих узлов.
Для получения информации смотрите раздел Подготовка БД.
Настройка развертывания с учетом требований к безопасности¶
Перед развертыванием NEOMSA APIM убедитесь, что вы учли соответствующие факторы повышения безопасности (например, изменение и шифрование паролей по умолчанию, настройку безопасности JVM и т. д.).
Создание и импорт SSL-сертификатов¶
Создайте SSL-сертификат для каждого из узлов NEOMSA APIM и импортируйте их в хранилище ключей и хранилище доверенных сертификатов. Это гарантирует, что проблем с несоответствием имени хоста в сертификатах не возникнет.
Примечание. Для всех экземпляров API Manager для расшифровки ресурсов реестра следует использовать одно и то же первичное хранилище ключей.
Настройка аналитики API-M¶
API Manager Analytics поставляется через облачное решение API Manager Analytics. Вам необходимо настроить API Manager Gateway для публикации аналитических данных в облаке.
Настройка и запуск профилей¶
Настройка узлов APIM в развертывании.
Настройка узлов шлюза
Настройте шлюз для взаимодействия с Control Plane и узлами менеджера трафика.
Следуйте приведенным ниже инструкциям, чтобы настроить узел шлюза таким образом, чтобы он мог взаимодействовать с узлом Control Plane:
-
Откройте файл <APIM-HOME>/repository/conf/deployment.toml узла шлюза.
-
Добавьте следующие конфигурации в файл deployment.toml.
-
Подключение шлюза к узлу Control Plane:
Control Plane with High Availability
# Key Manager configuration
[apim.key_manager]
service_url = "https://[control-plane-LB-host]/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-LB-host]/services/"
event_listening_endpoints = ["tcp://control-plane-1-host:5672", "tcp://control-plane-2-host:5672"]
Single Control Plane
# Key Manager configuration
[apim.key_manager]
service_url = "https://[control-plane-host]:${mgt.transport.https.port}/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-host]:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://control-plane-host:5672"]
Информация. Конфигурация event hub используется для получения артефактов шлюза. С помощью event_listening_endpoints, шлюз создаст JMS-соединение с event hub, которое затем используется для подписки на события, связанные с операциями API/Application/Subscription и Key Manager. Указывает service_url на внутренний API, который находится в event hub, который используется для извлечения артефактов и информации из базы данных.
Подключение шлюза к узлу Traffic Manager :
Менеджер трафика с HA
[apim.throttling]
throttle_decision_endpoints = ["tcp://traffic-manager-1-host:5672", "tcp://Traffic-Manager-2-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://traffic-manager-1-host:9611"]
traffic_manager_auth_urls = ["ssl://traffic-manager-1-host:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://traffic-manager-2-host:9611"]
traffic_manager_auth_urls = ["ssl://traffic-manager-2-host:9711"]
Одиночный менеджер трафика
[apim.throttling]
throttle_decision_endpoints = ["tcp://traffic-manager-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://traffic-manager-host:9611"]
traffic_manager_auth_urls = ["ssl://traffic-manager-host:9711"]
Информация. Конфигурации ограничения скорости используются шлюзом для соединения с менеджером трафика. Шлюз будет публиковать события, связанные с вызовом шлюза, в TM с помощью apim.throttling.url_group. Менеджер трафика будут получать эти события, а решения об ограничении скорости будут публиковаться в шлюзе. Чтобы получать эти решения об ограничении скорости, шлюз должен создать соединение JMS с помощью throttle_decision_endpoints и прослушивать.
Включение TLS/SSL для шлюза для коммуникаций Traffic Manager JMS
При необходимости можно включить TLS/SSL для JMS-коммуникаций между узлами шлюза и менеджера трафика.
Для этой цели добавьте следующую конфигурацию в узел шлюза.
[apim.throttling.jms]
topic_connection_factory = "amqp://<![CDATA[<username>]]>:<![CDATA[<password>]]>@clientid/carbon?brokerlist='tcp://tm.example.local:8672?ssl='true'%26ssl_cert_alias='<certificate_alias_in_truststore>'%26trust_store='<path_to_trust_store>'%26trust_store_password='<truststore_password>'%26key_store='<path_to_key_store>'%26key_store_password='<keystore_password>''"
Также обновите узел Traffic Manager, включив в него следующую конфигурацию для включения безопасных брокер соединений.
[broker.transport.amqp.ssl_connection]
enabled = true
port = 8672
ssl_enabled_protocols = "TLSv1,TLSv1.2"
ciphers = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
[broker.transport.amqp.ssl_connection.keystore]
location = "repository/resources/security/wso2carbon.jks"
password = "neomsacarbon"
cert_type = "SunX509"
[broker.transport.amqp.ssl_connection.truststore]
location = "repository/resources/security/client-truststore.jks"
password = "neomsacarbon"
cert_type = "SunX509"
-
Добавьте следующие конфигурации в файл deployment.toml для настройки среды шлюза. Измените конфигурацию gateway_labels в зависимости от среды шлюза.
Информация. После развертывания/неразвертывания API Control Plane отправит событие развертывания/неразвертывания на шлюзы. Используя эту конфигурацию, шлюз отфильтрует соответствующие события развертывания/неразвертывания и извлекает артефакты.
-
Включите JSON Web Token (JWT), если требуется.
-
Добавьте публичный сертификат приватного ключа (который используется для подписи токенов) в хранилище доверенных сертификатов (truststore) под алиасом gateway_certificate_alias.
Примечание. Это неприменимо, если вы используете сертификаты по умолчанию, которые поставляются вместе с самим продуктом.
-
Чтобы настроить высокую доступность (HA) для шлюза API-M, выполните следующие действия:
-
Создайте копию узла API-M Gateway, который вы только что настроили. Это будет второй узел кластера API-M Gateway.
-
Настройте балансировщик нагрузки, который будет находиться перед двумя узлами Gateway в вашем развертывании.
-
Примечание. Чтобы сохранить пользовательские артефакты времени выполнения, развернутые в шлюзе, добавьте следующую конфигурацию в файл узлов шлюза <APIM-HOME>/repository/conf/deployment.toml
[apim.sync_runtime_artifacts.gateway.skip_list]
apis = ["api1.xml","api2.xml"]
endpoints = ["endpoint1.xml"]
sequences = ["post_with_nobody.xml"]
local_entries = ["file.xml"]
- Откройте файлы deployment.toml каждого узла шлюза и добавьте имя хоста кластера. Например, если имя хоста — gw.example.local конфигурация будет:
```toml
[server]
hostname = "gw.example.local"
```
- Укажите следующие конфигурации входящих соединений в файлах deployment.toml обоих узлов.
```toml
[transport.http]
properties.port = 9763
properties.proxyPort = 80
[transport.https]
properties.port = 9443
properties.proxyPort = 443
```
- Откройте файл сервера /etc/hosts и сопоставьте имена хостов с IP-адресами.
Формат:
Пример:
Пример конфигурации для шлюза
Кластер HA
[server]
hostname = "gw.example.local"
node_ip = "127.0.0.1"
server_role = "gateway-worker"
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "neomsacarbon"
alias = "neomsacarbon"
key_password = "neomsacarbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
[transport.http]
properties.port = 9763
properties.proxyPort = 80
[transport.https]
properties.port = 9443
properties.proxyPort = 443
# key manager implementation
[apim.key_manager]
service_url = "https://api.example.local/services/"
[apim.sync_runtime_artifacts.gateway]
gateway_labels =["Default"]
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://api.example.local/services/"
event_listening_endpoints = ["tcp://apim-cp-1:5672", "tcp://apim-cp-2:5672"]
# Traffic Manager configurations
[apim.throttling]
throttle_decision_endpoints = ["tcp://traffic-manager-1:5672", "tcp://traffic-manager-2:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://traffic-manager-1:9611"]
traffic_manager_auth_urls=["ssl://traffic-manager-1:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://traffic-manager-2:9611"]
traffic_manager_auth_urls=["ssl://traffic-manager-2:9711"]
Одиночный узел
[server]
hostname = "gw.example.local"
node_ip = "127.0.0.1"
server_role = "gateway-worker"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "h2"
url = "jdbc:h2:./repository/database/NEOMSA_APIM_SHARED_DB;DB_CLOSE_ON_EXIT=FALSE"
username = "wso2carbon"
password = "wso2carbon"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
# Key Manager configuration
[apim.key_manager]
service_url = "https://cp.example.local:9443/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
# Traffic Manager configurations
[apim.throttling]
throttle_decision_endpoints = ["tcp://tm.example.local:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://tm.example.local:9611"]
traffic_manager_auth_urls=["ssl://tm.example.local:9711"]
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local:9443/services/"
event_listening_endpoints = ["tcp://cp.example.local:5672"]
[apim.sync_runtime_artifacts.gateway]
gateway_labels =["Default"]
Настройка узлов Control plane
Чтобы настроить узлы Control plane для связи со шлюзом, выполните следующие действия.
-
Откройте файл <APIM-HOME>/repository/conf/deployment.toml узла Control Plane.
-
Добавьте следующие конфигурации в файл deployment.toml.
Подключение Control plane к узлу шлюза :
Шлюз с Hight Availability
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-LB-host]/services/"
ws_endpoint = "ws://[api-gateway-LB-host-or-ip]:9099"
wss_endpoint = "wss://[api-gateway-LB-host-or-ip]:8099"
http_endpoint = "http://[api-gateway-LB-host]"
https_endpoint = https://[api-gateway-LB-host]
Одиночный шлюз
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-host]:9443/services/"
ws_endpoint = "ws://[api-gateway-host]:9099"
wss_endpoint = "wss://[api-gateway-host]:8099"
http_endpoint = "http://[api-gateway-host]:${http.nio.port}"
https_endpoint = "https://[api-gateway-host]:${https.nio.port}"
Информация. Эта конфигурация используется для развертывания API на шлюзе и для подключения компонента Портала Разработчика к шлюзу, если шлюз используется несколькими арендаторами. Если шлюз не используется в нескольких арендаторах, вы можете создать окружение шлюза с помощью Админ Портала.
Обратите внимание, что в приведенных выше конфигурациях service_url относится к порту 9443 узла шлюза, в то время как http_endpoint и https_endpoint относится к портам http и https (8280 и 8243).
Добавить конфигурации Event Hub :
Информация
Включение TLS/SSL для JMS-коммуникаций Event Hub
Если это необходимо, вы можете включить TLS/SSL для JMS-коммуникаций Event Hub. Обновите ваши конфигурации Event Hub, добавив следующее.
[apim.event_hub]
enable = true
jms.username = "<username>"
jms.password = "<password>"
jms.ssl = "true'&ssl_cert_alias='<certificate_alias_in_truststore>'&trust_store='<path_to_trust_store>'&trust_store_password='<truststore_password>'&key_store='<path_to_key_store>'&key_store_password='<keystore_password>"
ssl = "true'&ssl_cert_alias='<certificate_alias_in_truststore>'&trust_store='<path_to_trust_store>'&trust_store_password='<truststore_password>'&key_store='<path_to_key_store>'&key_store_password='<keystore_password>"
event_listening_endpoints = ["tcp://control-plane-host:8672"]
Чтобы включить защищенные соединения брокера, добавьте следующую конфигурацию в узел Control Plane.
[broker.transport.amqp.ssl_connection]
enabled = true
port = 8672
ssl_enabled_protocols = "TLSv1,TLSv1.2"
ciphers = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
[broker.transport.amqp.ssl_connection.keystore]
location = "repository/resources/security/wso2carbon.jks"
password = "wso2carbon"
cert_type = "SunX509"
[broker.transport.amqp.ssl_connection.truststore]
location = "repository/resources/security/client-truststore.jks"
password = "wso2carbon"
cert_type = "SunX509"
Control Plane с High Availability
# Event Hub configurations
[apim.event_hub]
enable = true
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
service_url = "https://localhost:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
event_duplicate_url = ["tcp://apim-cp-2:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-1-host:9611"]
auth_urls = ["ssl://control-plane-1-host:9711"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-2-host:9611"]
auth_urls = ["ssl://control-plane-2-host:9711"]
Одиночная Control Plane
Event Hub configurations¶
[apim.event_hub]
enable = true
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
service_url = "https://localhost:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-host:9611"]
auth_urls = ["ssl://control-plane-host:9711"]
Информация. Поскольку в настройке HA есть два event hubs, каждый из них должен публиковать события в оба потока событий. Это будет сделано через потоки событий, созданные с помощью apim.event_hub.publish.url_group. События отзыва токенов, полученные одним event hub, будут дублироваться на другой event hub с помощью event_duplicate_url.
Добавить конфигурации Event Listener:
Приведенные ниже конфигурации добавляются в Control Plane только в том случае, если вы используете Resident Key Manager (находится в Control Plane). Если вы используете NEOMSA IS в качестве Key Manager, вам необходимо добавить их в узел IS. После добавления приведенных ниже конфигураций Control Plane или Identity Server будут прослушивать события отзыва токена и вызывать эндпоинт notification_endpoint для отзыва токена.
Control Plane с High Availability
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://[control-plane-LB-host]/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
Одиночная Control Plane
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://[control-plane-host]:${mgt.transport.https.port}/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
-
При необходимости зашифруйте ключи аутентификации (токены доступа, клиентские секреты и коды авторизации).
-
Дополнительно добавьте следующую конфигурацию, для включения функции распределенной инвалидации кеша между узлами..
-
Чтобы настроить высокую доступность (High Availability HA) для Control Plane, выполните следующие действия:
-
Создайте копию узла API-M Control Plane, который вы только что настроили. Это будет второй узел кластера APIM Control Plane.
-
Настройте балансировщик нагрузки, перед двумя узлами Control Plane в вашем развертывании.
-
Пример конфигурации для Control Plane
Кластер HA
[server]
hostname = "api.example.local"
node_ip = "127.0.0.1"
server_role="control-plane"
base_path = "${carbon.protocol}://${carbon.host}:${carbon.management.port}"
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.apim_db]
type = "mysql"
hostname = "db.example.local"
name = "apim_db"
port = "3306"
username = "apimadmin"
password = "apimadmin"
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-LB-host]/services/"
ws_endpoint = "ws://[api-gateway-LB-host]:9099"
wss_endpoint = "wss://[api-gateway-LB-host]:8099"
http_endpoint = "http://[api-gateway-LB-host]"
https_endpoint = "https://[api-gateway-LB-host]"
[apim.devportal]
url = "https://api.example.local/devportal"
[transport.https.properties]
proxyPort = 443
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://api.example.local/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
event_duplicate_url = ["tcp://apim-cp-2:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://apim-cp-1:9611"]
auth_urls = ["ssl://apim-cp-1:9711"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://apim-cp-2:9611"]
auth_urls = ["ssl://apim-cp-2:9711"]
# key manager implementation
[apim.key_manager]
service_url = "https://api.example.local/services/"
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
type = "default"
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://api.example.local/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
Одиночный узел
[server]
hostname = "cp.example.local"
node_ip = "127.0.0.1"
server_role = "control-plane"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.apim_db]
type = "mysql"
hostname = "db.example.local"
name = "apim_db"
port = "3306"
username = "apimadmin"
password = "apimadmin"
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
# Gateway configuration
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://gw.example.local:9443/services/"
username= "${admin.username}"
password= "${admin.password}"
ws_endpoint = "ws://[api-gateway-host]:9099"
wss_endpoint = "wss://[api-gateway-host]:8099"
http_endpoint = "http://[api-gateway-host]:8280"
https_endpoint = "https://[api-gateway-host]:8243"
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://cp.example.local:9443/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local:9443/services/"
event_listening_endpoints = ["tcp://cp.example.local:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://cp.example.local:9611"]
auth_urls = ["ssl://cp.example.local:9711"]
В типичном распределенном развертывании все компоненты APIM (за исключением APIM Gateway) работают в Control Plane. Однако есть возможность отделить Traffic Manager от Control Plane.
Настройте менеджера трафика для взаимодействия с Control Plane.
-
Откройте файл <APIM-HOME>/repository/conf/deployment.toml узла Traffic Manager.
-
Добавьте следующие конфигурации в файл deployment.toml.
Подключение диспетчера трафика к узлу плоскости управления :
Control Plane с HA
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-LB-host]/services/"
event_listening_endpoints = ["tcp://control-plane-1-host:5672", "tcp://control-plane-2-host:5672"]
Single Control Plane
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-host]/services/"
event_listening_endpoints = ["tcp://control-plane-host:5672"]
Информация. С помощью event_listening_endpoints Менеджер Трафика подписывается на JMS поток обоих Event Hub. Как только получено событие, связанное с политикой, оно извлечет планы выполнения из service_url.
Если узел Traffic Manager настроен с высокой доступностью (HA), настройте ограничение скорости следующим образом..
[apim.throttling]
event_duplicate_url = ["tcp://traffic-manager-2-host:5672"]
throttle_decision_endpoints = ["tcp://localhost:5672"]
Информация Для поддержания согласованности решения об ограничении скорости будут публиковаться event_duplicate_url на другом узле Traffic Manager.
-
Чтобы настроить высокую доступность (HA) для Traffic Manager, выполните следующие действия.
-
Создайте копию узла Traffic Manager, который вы только что настроили. Это второй узел кластера Traffic Manager.
-
Настройте балансировщик нагрузки, подключенный к двум узлам Traffic Manager в вашем развертывании.
-
Примечание. При каждом запуске узла Менеджера Трафика политики ограничения скорости повторно разворачиваются, извлекая последние детали политики из базы данных. Это поддерживает согласованность между узлами Менеджера Трафика. Если вам нужно избежать повторного развертывания определенных политик ограничения скорости, добавьте следующую конфигурацию в файл <APIM-HOME>/repository/conf/deployment.toml узла Менеджера Трафика.
Пример конфигурации для Traffic Manager
Кластер HA
[server]
hostname = "tm.example.local"
node_ip = "127.0.0.1"
server_role = "traffic-manager"
[transport.https.properties]
proxyPort = 443
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://api.example.local/services/"
event_listening_endpoints = ["tcp://apim-cp-1:5672", "tcp://apim-cp-2:5672"]
# Traffic Manager configurations
[apim.throttling]
event_duplicate_url = ["tcp://traffic-manager-2:5672"]
throttle_decision_endpoints = ["tcp://localhost:5672"]
Одиночный узел
[server]
hostname = "tm.example.local"
node_ip = "127.0.0.1"
server_role = "traffic-manager"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "h2"
url = "jdbc:h2:./repository/database/NEOMSA_APIM_SHARED_DB;DB_CLOSE_ON_EXIT=FALSE"
username = "wso2carbon"
password = "wso2carbon"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local:9443/services/"
event_listening_endpoints = ["tcp://cp.example.local:5672"]
Запуск узлов API-M¶
После успешной настройки всех узлов APIM в развертывании можно запускать серверы.
- Запуск узлов шлюза
Откройте терминал, перейдите в папку <APIM-GATEWAY-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
- Запуск узлов Control Plane
Откройте терминал, перейдите в папку <APIM-CONTROL-PLANE-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
- Запустите узлы Traffic Manager
Откройте терминал, перейдите в папку <APIM-TRAFFIC-MANAGER-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
Настройка распределённого развертывания APIM с менеджером ключей отделенным от Control Plane¶
Сервер NEOMSA APIM может быть развернут как развертывание «all-in-one» или как распределенное развертывание. В распределенной настройке профили сервера APIM разворачиваются как отдельные узлы APIM.
Ниже приведены узлы APIM, которые могут быть использованы при распределенном развертывании.
Примечание Для обеспечения высокой доступности вам потребуется минимум два узла, на которых будет запущен каждый профиль.
| Узел API-M (профиль) | Описание |
|---|---|
| Рабочий узел шлюза | Узлы APIM, на которых запущен профиль шлюза. |
| Узел Control Plane | Узлы APIM, на которых запущен профиль Control Plane. Control Plane включает компоненты Traffic Manager, Key Manager, Publisher и Developer Portal. |
| Узел управления ключами (опционально) | При необходимости можно настроить отдельный узел API-M для запуска компонента Key Manager. То есть узлы Control Plane запускают Traffic Manager, Publisher и Developer Portal, в то время как Key Manager работает |
Для установки и настройки серверов API-M:
-
Загрузите API-менеджер NEOMSA .
-
Создайте копии дистрибутива API-M для отдельных профилей.
Настройка баз данных¶
Вы можете создать необходимые базы данных для развертывания APIM на отдельном сервере и указать базы данных с соответствующих узлов.
Для получения информации смотрите раздел Подготовка БД.
Настройка развертывания с учетом требований к безопасности¶
Перед развертыванием NEOMSA APIM убедитесь, что вы учли соответствующие факторы повышения безопасности (например, изменение и шифрование паролей по умолчанию, настройку безопасности JVM и т. д.).
Создание и импорт SSL-сертификатов¶
Создайте SSL-сертификат для каждого из узлов NEOMSA APIM и импортируйте их в хранилище ключей и хранилище доверенных сертификатов. Это гарантирует, что проблем с несоответствием имени хоста в сертификатах не возникнет.
Примечание. Для всех экземпляров API Manager для расшифровки ресурсов реестра следует использовать одно и то же первичное хранилище ключей.
Настройка аналитики APIM¶
API Manager Analytics поставляется через облачное решение API Manager Analytics. Вам необходимо настроить API Manager Gateway для публикации аналитических данных в облаке.
Настройка и запуск профилей¶
Настройка узлов APIM в развертывании.
Настройка узлов Key Manager
Чтобы настроить узлы Key Manager для взаимодействия с Control Plane, выполните следующие действия.
-
Откройте файл <APIM-HOME>/repository/conf/deployment.toml узла Key Manager.
-
Добавьте следующие конфигурации в файл deployment.toml.
Control Plane with High Availability
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://[control-plane-LB-host]/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
# Traffic Manager configurations
[apim.throttling]
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
service_url = "https://[control-plane-LB-host]/services/"
throttle_decision_endpoints = ["tcp://control-plane-1-host:5672", "tcp://control-plane-2-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://control-plane-1-host:9611"]
traffic_manager_auth_urls = ["ssl://control-plane-1-host:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://control-plane-2-host:9611"]
traffic_manager_auth_urls = ["ssl://control-plane-2-host:9711"]
Single Control Plane
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://[control-plane-host]:${mgt.transport.https.port}/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
# Traffic Manager configurations
[apim.throttling]
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
service_url = "https://control-plane-host:9443/services/"
throttle_decision_endpoints = ["tcp://control-plane-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://control-plane-host:9611"]
traffic_manager_auth_urls=["ssl://control-plane-host:9711"]
-
При необходимости зашифруйте ключи аутентификации (токены доступа, клиентские секреты и коды авторизации),
-
Чтобы настроить высокую доступность (HA) для узлов Key Manager, выполните следующие действия:
-
Создайте копию узла APIM Key Manager, который вы только что настроили. Это будет второй узел кластера APIM Key Manager.
-
Настройте балансировщик нагрузки, который будет находиться перед двумя узлами Key Manager в вашем развертывании.
-
Пример конфигурации для Key Manager
Кластер HA
[server]
hostname = "km.example.local"
server_role = "default"
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.apim_db]
type = "mysql"
hostname = "db.example.local"
name = " apim_db"
port = "3306"
username = "apiadmin"
password = "apimadmin"
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "apimadmin"
password = "apimadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
[[event_handler]]
name="userPostSelfRegistration"
subscriptions=["POST_ADD_USER"]
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://[control-plane-LB-host]/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
# Traffic Manager configurations
[apim.throttling]
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
service_url = "https://[control-plane-LB-host]/services/"
throttle_decision_endpoints = ["tcp://control-plane-1-host:5672", "tcp://control-plane-2-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://control-plane-1-host:9611"]
traffic_manager_auth_urls = ["ssl://control-plane-1-host:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://control-plane-2-host:9611"]
traffic_manager_auth_urls = ["ssl://control-plane-2-host:9711"]
Одиночный узел
[server]
hostname = "gw.example.local"
node_ip = "127.0.0.1"
server_role = "gateway-worker"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "h2"
url = "jdbc:h2:./repository/database/NEOMSA_APIM_SHARED_DB;DB_CLOSE_ON_EXIT=FALSE"
username = "wso2carbon"
password = "wso2carbon"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
# Key Manager configuration
[apim.key_manager]
service_url = "https://km.example.local:9443/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
# Traffic Manager configurations
[apim.throttling]
throttle_decision_endpoints = ["tcp://cp.example.local:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://cp.example.local:9611"]
traffic_manager_auth_urls=["ssl://cp.example.local:9711"]
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local:9443/services/"
event_listening_endpoints = ["tcp://cp.example.local:5672"]
[apim.sync_runtime_artifacts.gateway]
gateway_labels =["Default"]
Настройка узлов шлюза
Настройте шлюз для взаимодействия с Control Plane и узлами менеджера ключей.
Следуйте приведенным ниже инструкциям, чтобы настроить узел шлюза таким образом, чтобы он мог взаимодействовать с узлом Control Plane:
-
Откройте файл узла шлюза <APIM-HOME>/repository/conf/deployment.toml.
-
Добавьте следующие конфигурации в файл deployment.toml.
-
Подключение шлюза к узлу Control Plane:
Control Plane with High Availability
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-LB-host]/services/"
event_listening_endpoints = ["tcp://control-plane-1-host:5672", "tcp://control-plane-2-host:5672"]
# Traffic Manager configurations
[apim.throttling]
throttle_decision_endpoints = ["tcp://control-plane-1-host:5672", "tcp://control-plane-2-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://control-plane-1-host:9611"]
traffic_manager_auth_urls = ["ssl://control-plane-1-host:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://control-plane-2-host:9611"]
traffic_manager_auth_urls = ["ssl://control-plane-2-host:9711"]
Single Control Plane
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-host]:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://control-plane-host:5672"]
# Traffic Manager configurations
[apim.throttling]
throttle_decision_endpoints = ["tcp://control-plane-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://control-plane-host:9611"]
traffic_manager_auth_urls = ["ssl://control-plane-host:9711"]
Информация. Конфигурация event hub используется для получения артефактов шлюза. С помощью event_listening_endpoints, шлюз создаст JMS-соединение с event hub, которое затем используется для подписки на события, связанные с операциями API/Application/Subscription и Key Manager. Указывает service_url на внутренний API, который находится в event hub, который используется для извлечения артефактов и информации из базы данных
- Подключение шлюза к узлу Key Manager :
Менеджер ключей с HA
# Key Manager configuration
[apim.key_manager]
service_url = "https://[key-manager-LB-host]/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
Одиночный менеджер ключей
# Key Manager configuration
[apim.key_manager]
service_url = "https://[key-manager-host]:${mgt.transport.https.port}/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
-
Добавьте следующие конфигурации в файл deployment.toml для настройки среды Gateway. Измените свойство gateway_labels в зависимости от среды Gateway.
Информация. После развертывания/неразвертывания API Control Plane отправит событие развертывания/неразвертывания на шлюзы. Используя эту конфигурацию, шлюз отфильтрует соответствующие события развертывания/неразвертывания и извлекает артефакты.
-
Включите JSON Web Token (JWT), если требуется.
-
Добавьте публичный сертификат приватного ключа (который используется для подписи токенов) в хранилище доверенных сертификатов (truststore) под алиасом gateway_certificate_alias.
Примечание. Это неприменимо, если вы используете сертификаты по умолчанию, которые поставляются вместе с самим продуктом.
-
Чтобы настроить высокую доступность (HA) для шлюза APIM, выполните следующие действия:
-
Создайте копию узла APIM Gateway, который вы только что настроили. Это будет второй узел кластера APIM Gateway.
-
Настройте балансировщик нагрузки, который будет находиться перед двумя узлами Gateway в вашем развертывании.
-
Примечание. Чтобы сохранить пользовательские артефакты времени выполнения, развернутые в шлюзе, добавьте следующую конфигурацию в файл узлов шлюза <APIM-HOME>/repository/conf/deployment.toml.
[apim.sync_runtime_artifacts.gateway.skip_list]
apis = ["api1.xml","api2.xml"]
endpoints = ["endpoint1.xml"]
sequences = ["post_with_nobody.xml"]
local_entries = ["file.xml"]
- Откройте файлы deployment.toml каждого узла шлюза и добавьте имя хоста кластера. Например, если имя хоста — gw.example.local конфигурация будет:
```toml
[server]
hostname = "gw.example.local"
```
- Укажите следующие конфигурации входящих соединений в файлах обоих узлов deployment.toml.
```toml
[transport.http]
properties.port = 9763
properties.proxyPort = 80
[transport.https]
properties.port = 9443
properties.proxyPort = 443
```
- Откройте файл сервера /etc/hosts и сопоставьте имена хостов с IP-адресами.
Формат:
Пример:
Пример конфигурации для шлюза
Кластер HA
[server]
hostname = "gw.example.local"
node_ip = "127.0.0.1"
server_role = "gateway-worker"
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
[transport.http]
properties.port = 9763
properties.proxyPort = 80
[transport.https]
properties.port = 9443
properties.proxyPort = 443
# key manager implementation
[apim.key_manager]
service_url = "https://km.example.local/services/"
[apim.sync_runtime_artifacts.gateway]
gateway_labels =["Default"]
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local/services/"
event_listening_endpoints = ["tcp://apim-cp-1:5672", "tcp://apim-cp-2:5672"]
# Traffic Manager configurations
[apim.throttling]
throttle_decision_endpoints = ["tcp://apim-cp-1:5672", "tcp://apim-cp-2:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://apim-cp-1:9611"]
traffic_manager_auth_urls=["ssl://apim-cp-1:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://apim-cp-2:9611"]
traffic_manager_auth_urls=["ssl://apim-cp-2:9711"]
Одиночный узел
[server]
hostname = "gw.example.local"
node_ip = "127.0.0.1"
server_role = "gateway-worker"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "h2"
url = "jdbc:h2:./repository/database/NEOMSA_APIM_SHARED_DB;DB_CLOSE_ON_EXIT=FALSE"
username = "wso2carbon"
password = "wso2carbon"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
# Key Manager configuration
[apim.key_manager]
service_url = "https://km.example.local:9443/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
# Traffic Manager configurations
[apim.throttling]
throttle_decision_endpoints = ["tcp://cp.example.local:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://cp.example.local:9611"]
traffic_manager_auth_urls=["ssl://cp.example.local:9711"]
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local:9443/services/"
event_listening_endpoints = ["tcp://cp.example.local:5672"]
[apim.sync_runtime_artifacts.gateway]
gateway_labels =["Default"]
Настройка узлов Control Plane
Чтобы настроить узлы Control Plane для взаимодействия со шлюзом и менеджером ключей, выполните следующие действия.
-
Откройте файл узла Control Plane <APIM-HOME>/repository/conf/deployment.toml.
-
Добавьте следующие конфигурации в файл deployment.toml.
Подключение Control Plane к узлу менеджера ключей:
Менеджер ключей с Hight Availability
# Key Manager configuration
[apim.key_manager]
service_url = "https://[key-manager-LB-host]/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
Одиночный менеджер ключей
# Key Manager configuration
[apim.key_manager]
service_url = "https://[key-manager-host]:${mgt.transport.https.port}/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
Подключение Control Plane к узлу шлюза:
Шлюз с Hight Availability
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-LB-host]/services/"
ws_endpoint = "ws://[api-gateway-LB-host-or-ip]:9099"
wss_endpoint = "wss://[api-gateway-LB-host-or-ip]:8099"
http_endpoint = "http://[api-gateway-LB-host]"
https_endpoint = https://[api-gateway-LB-host]
Одиночный шлюз
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-host]:9443/services/"
ws_endpoint = "ws://[api-gateway-host]:9099"
wss_endpoint = "wss://[api-gateway-host]:8099"
http_endpoint = "http://[api-gateway-host]:${http.nio.port}"
https_endpoint = "https://[api-gateway-host]:${https.nio.port}"
Информация. Эта конфигурация используется для развертывания API на шлюзе и для подключения компонента Портала Разработчика к шлюзу, если шлюз используется несколькими арендаторами. Если шлюз не используется в нескольких арендаторах, вы можете создать окружение шлюза с помощью Админ Портала.
Обратите внимание, что в приведенных выше конфигурациях service_url относится к порту 9443 узла шлюза, в то время как http_endpoint и https_endpoint относится к портам http и https (8280 и 8243).
Добавить конфигурации Event Hub :
Информация
Включение TLS/SSL для JMS-коммуникаций Event Hub
Если это необходимо, вы можете включить TLS/SSL для JMS-коммуникаций Event Hub. Обновите ваши конфигурации Event Hub, добавив следующее.
[apim.event_hub]
enable = true
jms.username = "<username>"
jms.password = "<password>"
jms.ssl = "true'&ssl_cert_alias='<certificate_alias_in_truststore>'&trust_store='<path_to_trust_store>'&trust_store_password='<truststore_password>'&key_store='<path_to_key_store>'&key_store_password='<keystore_password>"
ssl = "true'&ssl_cert_alias='<certificate_alias_in_truststore>'&trust_store='<path_to_trust_store>'&trust_store_password='<truststore_password>'&key_store='<path_to_key_store>'&key_store_password='<keystore_password>"
event_listening_endpoints = ["tcp://control-plane-host:8672"]
Чтобы включить защищенные соединения брокера, добавьте следующую конфигурацию в узел Control Plane.
[broker.transport.amqp.ssl_connection]
enabled = true
port = 8672
ssl_enabled_protocols = "TLSv1,TLSv1.2"
ciphers = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
[broker.transport.amqp.ssl_connection.keystore]
location = "repository/resources/security/wso2carbon.jks"
password = "wso2carbon"
cert_type = "SunX509"
[broker.transport.amqp.ssl_connection.truststore]
location = "repository/resources/security/client-truststore.jks"
password = "wso2carbon"
cert_type = "SunX509"
Control Plane с High Availability
# Event Hub configurations
[apim.event_hub]
enable = true
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
service_url = "https://localhost:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
event_duplicate_url = ["tcp://apim-cp-2:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-1-host:9611"]
auth_urls = ["ssl://control-plane-1-host:9711"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-2-host:9611"]
auth_urls = ["ssl://control-plane-2-host:9711"]
Одиночная Control Plane
# Event Hub configurations
[apim.event_hub]
enable = true
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
service_url = "https://localhost:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-host:9611"]
auth_urls = ["ssl://control-plane-host:9711"]
Информация. Поскольку в настройке HA есть два event hubs, каждый из них должен публиковать события в оба потока событий. Это будет сделано через потоки событий, созданные с помощью apim.event_hub.publish.url_group. События отзыва токенов, полученные одним event hub, будут дублироваться на другой event hub с помощью event_duplicate_url.
-
При необходимости зашифруйте ключи аутентификации (токены доступа, клиентские секреты и коды авторизации).
-
Дополнительно добавьте следующую конфигурацию, для включения функции распределенной инвалидации кеша между узлами..
-
Чтобы настроить высокую доступность (High Availability HA) для Control Plane, выполните следующие действия:
-
Создайте копию узла API-M Control Plane, который вы только что настроили. Это будет второй узел кластера APIM Control Plane.
-
Настройте балансировщик нагрузки, перед двумя узлами Control Plane в вашем развертывании.
-
Пример конфигурации для плоскости управления
Кластер HA
[server]
hostname = "api.example.local"
node_ip = "127.0.0.1"
server_role="control-plane"
base_path = "${carbon.protocol}://${carbon.host}:${carbon.management.port}"
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.apim_db]
type = "mysql"
hostname = "db.example.local"
name = "apim_db"
port = "3306"
username = "apimadmin"
password = "apimadmin"
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-LB-host]/services/"
ws_endpoint = "ws://[api-gateway-LB-host]:9099"
wss_endpoint = "wss://[api-gateway-LB-host]:8099"
http_endpoint = "http://[api-gateway-LB-host]"
https_endpoint = "https://[api-gateway-LB-host]"
[apim.devportal]
url = "https://api.example.local/devportal"
[transport.https.properties]
proxyPort = 443
[apim.cors]
allow_origins = "*"
allow_methods = ["GET","PUT","POST","DELETE","PATCH","OPTIONS"]
allow_headers = ["authorization","Access-Control-Allow-Origin","Content-Type","SOAPAction","apikey","Internal-Key"]
allow_credentials = false
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://api.example.local/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
event_duplicate_url = ["tcp://apim-cp-2:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://apim-cp-1:9611"]
auth_urls = ["ssl://apim-cp-1:9711"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://apim-cp-2:9611"]
auth_urls = ["ssl://apim-cp-2:9711"]
# key manager implementation
[apim.key_manager]
service_url = "https://[key-manager-LB-host]/services/"
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://localhost:${mgt.transport.https.port}/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
Одиночный узел
[server]
hostname = "cp.example.local"
node_ip = "127.0.0.1"
server_role = "control-plane"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.apim_db]
type = "mysql"
hostname = "db.example.local"
name = "apim_db"
port = "3306"
username = "apimadmin"
password = "apimadmin"
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[apim.devportal]
url = "https://cp.example.local:9443/devportal"
# key manager implementation
[apim.key_manager]
service_url = "https://km.example.local:9443/services/"
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
# Gateway configuration
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://gw.example.local:9443/services/"
username= "${admin.username}"
password= "${admin.password}"
ws_endpoint = "ws://[api-gateway-host]:9099"
wss_endpoint = "wss://[api-gateway-host]:8099"
http_endpoint = "http://[api-gateway-host]:8280"
https_endpoint = "https://[api-gateway-host]:8243"
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://localhost:${mgt.transport.https.port}/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local:9443/services/"
event_listening_endpoints = ["tcp://cp.example.local:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://cp.example.local:9611"]
auth_urls = ["ssl://cp.example.local:9711"]
Запуск узлов APIM¶
После успешной настройки всех узлов APIM в развертывании можно запускать серверы.
- Запустите узлы Key Manager
Откройте терминал, перейдите в папку <APIM-KEY-MANAGER-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
- Запуск узлов шлюза
Откройте терминал, перейдите в папку <APIM-GATEWAY-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
- Запуск узлов Control Plane
Откройте терминал, перейдите в папку <API-M-CONTROL-PLANE-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
Запуск профилей APIM¶
При запуске сервера APIM запускаются все компоненты, функции и связанные с ним артефакты. Поддержка нескольких профилей позволяет запускать продукт на выбранном профиле, так что только функции, специфичные для этого профиля, вместе с общими функциями запускаются с сервером.
Совет. Запуск продукта на предпочтительном профиле блокирует/разрешает соответствующие OSGI-бандлы. В результате, даже если вы запускаете сервер на профиле, вы все равно можете получить доступ к веб-приложению API Publisher.
OSGI-бандл — это тесно связанная, динамически загружаемая коллекция классов, JAR-файлов и конфигурационных файлов, которые явно указывают свои внешние зависимости (если таковые имеются). В OSGi, бандл — это основной формат развертывания. Бандлы — это приложения, упакованные в JAR-файлы, которые можно устанавливать, запускать, останавливать, обновлять и удалять.
Прежде чем начать
Ознакомьтесь со следующими темами, чтобы понять, как профили APIM используются в распределенном развертывании:
-
Распределенное развертывание — обзор
-
Настройка распределенного развертывания APIM
Команды запуска профиля
Ниже перечислены команды запуска для каждого из профилей APIM.
| Профиль | Команда |
|---|---|
| Профиль шлюза | -Dprofile=gateway-worker |
| Профиль плоскости управления | -Dprofile=control-plane |
| Профиль менеджера трафика | -Dprofile=traffic-manager |
| Профиль менеджера ключей | -Dprofile=api-key-manager-node |
Запуск профиля API-M
Вы можете запустить профиль API Manager следующими способами в зависимости от ваших требований.
Метод 1. Оптимизация перед запуском сервера
Примечание. Обязательно обновите пакет APIM до последней версии с помощью "NEOMSA in-place updates tool" перед запуском оптимизации профиля. Если вы обновите сервер после запуска оптимизации профиля, вам может потребоваться следовать Методу 2 Оптимизация при запуске сервера , так как обновления могли бы загрузить неактуальные файлы для этого профиля
Создайте оптимизированное распределение для конкретного профиля APIM.
- Запустите скрипт <APIM-HOME>/bin/profileSetup.sh или сценарий <APIM-HOME>/bin/profileSetup.bat на основе вашей операционной системы/
Образец формата
sh <APIM-HOME>/bin/profileSetup.sh -Dprofile=<preferred-profile>
Пример:Linux/Solaris/MacOS
sh <APIM-HOME>/bin/profileSetup.sh -Dprofile=gateway-worker
- Скопируйте соответствующий JAR-файл коннектора базы данных в каталог /lib.
Например, если вы используете базу данных MySQL,
1. Загрузите [JAR-файл коннектора MySQL](https://downloads.mysql.com/archives/c-j/) и распакуйте его.
Совет. Найдите совместимую версию MySQL Connector в зависимости от используемой версии MySQL.
- Для MySQL версии 8.0.x совместимой версией MySQL Connector является 8.0.x.
- Для MySQL версии 8.4.x совместимой версией MySQL Connector является 8.4.x.
- Скопируйте его в каталог <APIM-HOME>/repository/components/lib/.
-
Создайте необходимые базы данных, а именно базу данных APIM (apimdb также известную как NEOMSA_APIM_DB) и общую базу данных (NEOMSA_APIM_SHARED_DB также известную как shareddb).
-
Обновите конфигурации БД по умолчанию в соответствии с вашей средой.
Измените следующие конфигурации БД, которые находятся в файле <APIM-HOME>/repository/conf/deployment.toml.
[database.apim_db]
type = "mysql"
hostname = "localhost"
name = "apim_db"
port = "3306"
username = "root"
password = "root"
[database.shared_db]
type = "mysql"
hostname = "localhost"
name = "shared_db"
port = "3306"
username = "root"
password = "root"
- Запустите сервер с указанным профилем.
Образец формата
Пример:Linux/Solaris/MacOS
Запустите сервер, используя скрипт, соответствующий вашей операционной системе, используя команду, указанную ниже.
Предупреждение. Перед запуском этой команды вам необходимо вручную внести изменения в конфигурацию файла deployment.toml в пакете.
Образец формата
sh <APIM-HOME>/bin/api-manager.sh --optimize -Dprofile=<preferred-profile>
Пример:Linux/Solaris/MacOS
sh <APIM-HOME>/bin/api-manager.sh --optimize -Dprofile=gateway-worker
Передача этой опции--skipConfigOptimization позволяет сохранить конфигурации, которые вы ранее применили вручную при оптимизации профиля.
Образец формата
sh <APIM-HOME>/bin/api-manager.sh --optimize -Dprofile=<preferred-profile> --skipConfigOptimization
Пример:Linux/Solaris/MacOS
sh <APIM-HOME>/bin/api-manager.sh --optimize -Dprofile=gateway-worker --skipConfigOptimization
Примечание. Оптимизация профиля с использованием скриптов является рекомендуемым подходом. Ручная оптимизация и включение использования опции –skipConfigOptimization должны выполняться только в тех случаях, когда этого нельзя избежать.
Развертывание Multi-DC¶
Что такое архитектура развертывания Multi-DC?
Архитектура развертывания с несколькими центрами обработки данных (multi-datacenter (multi-DC)), в управлении API относится к настройке, при которой организация разворачивает свою инфраструктуру управления API в нескольких центрах обработки данных или географических локациях Эта архитектура предназначена для повышения доступности, масштабируемости и устойчивости системы управления API, обеспечивая постоянный доступ и высокую производительность API для пользователей в разных регионах.
Почему стоит развернуть несколько ЦОД (Центры Обработки Данных)?
Архитектура с несколькими центрами обработки данных (multi-DC) используется по разным причинам, в первую очередь для решения конкретных задач и требований, с которыми сталкиваются организации в современном ИТ-ландшафте. Вот некоторые из основных причин, по которым используются архитектуры с несколькими ЦОД:
-
Высокая доступность: архитектуры Multi-DC разработаны для обеспечения высокой доступности сервисов и приложений. Распределяя ресурсы по нескольким центрам обработки данных, организации могут снизить риск простоя из-за сбоев в работе центров обработки данных, проблем с оборудованием или сбоев в работе сети. Если в одном центре обработки данных возникнут проблемы, трафик можно перенаправить в другой.
-
Географическая избыточность: для глобальных компаний или организаций с географически распределенной пользовательской базой, архитектуры с несколькими ЦОД предлагают доступ к ресурсам с низкой задержкой. Пользователи могут подключаться к ближайшему центру обработки данных, что улучшает общий пользовательский опыт.
-
Сокращение задержек: для приложений, чувствительных к задержкам, размещение центров обработки данных ближе к конечным пользователям может значительно сократить время передачи данных, что приведет к более быстрому отклику.
-
Аварийное восстановление: конфигурации с несколькими ЦОД предоставляют встроенные возможности аварийного восстановления. В случае сбоя или стихийного бедствия, затрагивающего один центр обработки данных, организации могут переключить операции на другой центр обработки данных, минимизируя перебои в обслуживании.
-
Масштабируемость: Архитектуры с несколькими ЦОД допускают горизонтальную масштабируемость. Дополнительные ресурсы могут быть добавлены для размещения возросших рабочих нагрузок и трафика. Это критически важно для приложений и услуг с изменяющимися шаблонами использования.
-
Соответствие нормативным требованиям: В некоторых отраслях и регионах существуют специфические требования к местонахождению данных или соблюдению норм.. Архитектуры Multi-DC могут использоваться для хранения и обработки данных в соответствии с местными нормативами.
-
Резервное копирование и репликация данных: архитектуры с несколькими ЦОД часто включают стратегии резервного копирования и репликации данных для обеспечения целостности данных и снижения риска потери данных.
В общем, архитектуры с несколькими центрами обработки данных используются для повышения надежности, масштабируемости и возможности аварийного восстановления, одновременно удовлетворяя различным эксплуатационным и нормативным требованиям. Они особенно важны для организаций, которым необходимо обеспечить бесперебойную доставку услуг и доступность данных в современном взаимосвязанном и зависимом от данных мире.
Как NEOMSA API Manager поддерживает развертывание нескольких ЦОД?
В NEOMSA развертывания в нескольких центрах обработки данных поддерживают два основных паттерна, каждый из которых соответствует конкретным случаям использования и требованиям. Выбор правильного паттерна имеет решающее значение для удовлетворения потребностей конкретного развертывания.. При масштабировании развертывания в новый регион можно выбрать подходящий паттерн в зависимости от требований.
При выборе нового регионального развертывания учтите следующие критерии:
-
Необходимость автономной работы с доступом ко всему набору функций APIM.
-
Требование записывать данные независимо в базу данных в каждом региональном контексте.
-
Возможность репликации базы данных.
-
Стоимость не должна быть ограничивающим фактором.
-
Необходимость проведения операций с малой задержкой в регионе.
-
Требование к мультиарендности (Multi-Tenancy).
-
Восстановление после стихийных бедствий, когда регионам необходимо выживать независимо друг от друга.
В случаях, когда применяются вышеупомянутые критерии, Шаблон 1 оказывается оптимальным решением.
В качестве альтернативы рассмотрите следующие критерии для вашего предстоящего регионального развертывания:
Необходимость в том, чтобы шлюзы поддерживали близость к бэкенд-системам. Невозможность репликации базы данных. Бюджетные ограничения, которые требуют экономичного подхода.
Если эти критерии актуальны для вашей ситуации, то Шаблон 2 становится идеальным выбором.
Тщательно оценив требования к развертыванию и рассмотрев сценарии и преимущества каждого шаблона, вы сможете принять обоснованное решение о том, какой шаблон лучше всего подойдет для развертывания вашего многоцентрового центра обработки данных с помощью NEOMSA APIM .
Давайте рассмотрим архитектуру развертывания двух шаблонов.
Примечание. NEOMSA APIM встроенный менеджер ключей, который служит надежным решением для аутентификации и авторизации. В процессе планирования развертывания важно признать встроенный менеджер ключей как неотъемлемую часть control plane.. Однако, если ваш проект требует конфигурации внешнего стороннего провайдера идентификации (IDP), развертывание NEOMSA APIM в нескольких центрах обработки данных разработано для беспроблемного удовлетворения этого требования. В этом случае API Manager рассматривает внешний IDP как сервис, устанавливая связь через вызовы сервиса. Пока внешний IDP доступен соответствующим центрам обработки данных, NEOMSA APIM может эффективно интегрироваться и функционировать совместно с ним.
Этот документ предоставляет подробные рекомендации по настройке развертываний с несколькими дата-центрами, рассматривая встроенный менеджер ключей NEOMSA API Manager как ключевой элемент, который включен в состав контрольной плоскости.
Шаблон 1: Гео-региональное синхронизированное управление API с реплицированными базами данных
Обзор
Шаблон 1 в развертывании NEOMSA APIM в нескольких центрах обработки данных (несколько ЦОД) подразумевает создание нескольких распределенных установок, соединенных реплицированными базами данных и control planes (event hubs) в разных регионах. Эта конфигурация предназначена для максимизации высокой доступности и обеспечения отказоустойчивости.
Примечание. NEOMSA APIM был протестирован для репликации БД только с базами данных MSSQL и Oracle.
Преимущества
-
Поскольку плоскости управления доступны в каждом регионе, такие задачи, как развертывание API, применение политик, управление приложениями и создание/удаление политик, могут выполняться в каждом регионе.
-
Обеспечивает низкую задержку для всех операций, поскольку все задачи и функции могут управляться в пределах региона. Это особенно важно для приложений со строгими требованиями к задержке.
-
Регионы могут существовать независимо друг от друга, используя все функции, что обеспечивает надежное решение для восстановления после сбоев.
Что следует учитывать
- Хотя шаблон 1 позволяет каждому региону функционировать независимо, а чтение и запись баз данных могут происходить в каждом регионе, вам потребуется выделить больше ресурсов, чем шаблон 2, поскольку все компоненты должны быть развернуты во всех регионах.
Ключевые компоненты
- Распределенные настройки: Создаются несколько распределенных установок NEOMSA APIM в разных дата-центрах или географических локациях. Каждая установка включает экземпляры API Gateway, компоненты Publisher/Store, экземпляры Key Manager и любые другие соответствующие компоненты.
Примечание. Обратите внимание, что оба региона могут быть сконфигурированы как настройки «все в одном» (all-in-one). Это считается полностью распределенной установкой для упрощения понимания взаимодействия между компонентами.
-
Репликация базы данных: Репликация базы данных реализована для обеспечения синхронизации базовых баз данных NEOMSA APIM во всех настройках центра обработки данных. Эта репликация обеспечивает избыточность данных и отказоустойчивость, позволяя поддерживать согласованность конфигураций API и данных подписки.
-
Плоскости управления (Event Hubs): Плоскости управления (Event Hubs) в каждой настройке центра обработки данных взаимосвязаны для обеспечения связи в реальном времени и синхронизации данных. Плоскости управления играют важную роль в управлении и координации действий в распределенных настройках.
Шаблон 2: Централизованное управление API с региональными плоскостями данных (Regional Data Planes)
Обзор.В Шаблоне 2 развертывания NEOMSA APIM с несколькими центрами обработки данных (multi-DC) архитектура разработана с четким разделением ролей В частности, один регион выполняет функцию центральной контрольной точки для всего развертывания и называется "основным регионом". Другие регионы, которые предназначены для обработки входящего трафика и потребностей в масштабировании, известны как "подрегионы"
Преимущества
-
Дополнительные регионы оснащены шлюзами и менеджерами трафика, что снижает потребление ресурсов, поскольку не все компоненты/узлы нужно дублировать.
-
Если бэкенды распределены по нескольким регионам, с помощью этой архитектуры можно добавлять шлюзы ближе к бэкендам.
Что следует учитывать
-
Поскольку в Шаблоне 2 плоскость управления находится в основном регионе, в случае потери соединения или отказа основного региона связь между плоскостью управления и узлами шлюза/диспетчера трафика будет нарушена. Однако субрегионы по-прежнему смогут обрабатывать входящий трафик и выполнять регулирование в регионах с существующими данными. После повторного подключения плоскости управления основного региона данные будут синхронизированы с субрегионом.
-
Шлюзы в субрегионе зависят от плоскости управления (control plane) основного региона для данных, связанных с API, при запуске сервера. Поэтому узлы шлюза в субрегионе могут быть перезапущены/запущены только после подключения плоскости управления.
-
Шаблон 2 не поддерживает многопользовательскую среду. Поэтому, если развертывание требует многопользовательской среды, рекомендуется рассмотреть Шаблон 1.
Ключевые компоненты
-
Основной регион: Основной регион содержит узлы плоскости управления и служит основным центром принятия решений для всей установки с несколькими ЦОД (multi-DC). Этот регион отвечает за административные задачи, такие как публикация API, управление и применение политик.
-
Субрегион: Субрегионы настроены исключительно на обработку входящего трафика. Эти регионы состоят из узлов шлюза и узлов управления трафиком и масштабируются независимо для удовлетворения нагрузки трафика. Субрегионы играют важную роль в распределении и управлении фактическим трафиком API.
-
Горизонтальное масштабирование: эта документация содержит информацию о настройке одного основного региона с одним субрегионом. Однако развертывание может быть горизонтально масштабировано по мере необходимости путем добавления нескольких субрегионов. Такой подход обеспечивает гибкость и отзывчивость к изменениям в схемах трафика и нагрузках.
Примечание. Оба Шаблона 1 и 2 поддерживают регулирование на основе региона/географической области по умолчанию. Таким образом, регулирование будет осуществляться независимо для каждого региона из соответствующего трафика центра обработки данных.
Часто задаваемые вопросы (FAQ)
- Какой шаблон мне следует использовать, если у меня есть два региона, в обоих из которых требуется возможность доступа к таким функциям, как создание/публикация API, создание приложений и выполнение задач администрирования с низкой задержкой?
Для вышеуказанного требования Шаблон 1 является наиболее подходящим выбором. В Шаблоне 1 узлы плоскости управления распределены по всем регионам, что обеспечивает доступ к указанным функциям из всех регионов локально с минимальной задержкой. Такая конфигурация гарантирует, что пользователи в каждом регионе могут эффективно выполнять такие задачи, как создание API, публикация, управление приложениями и администрирование политик, удовлетворяя требованиям низкой задержки.
- У меня есть API-развертывание в одном регионе, и при проверке трафика APIM было обнаружено, что трафик API из другого региона внезапно значительно увеличился. Какова должна быть стратегия решения этой ситуации?
В этом сценарии вы можете выбрать Шаблон 1 или Шаблон 2 в зависимости от ваших конкретных требований. Шаблон 1 подходит, когда вам нужны все функции плоскости управления из недавно добавленного региона. Однако Шаблон 2 будет уместен, если регион с увеличенным трафиком API в первую очередь требует эффективной обработки трафика без необходимости в дополнительных функций управления API.
- В настоящее время у меня есть развертывание APIM в одном регионе, где находятся все компоненты. Однако развернутые API находятся в другом регионе, и клиенты из этого региона используют эти API. Как можно устранить эту неэффективность?
При работе со значительным числом клиентов из региона, где размещены серверные части, существующая обработка трафика может оказаться неэффективной.
Чтобы преодолеть эту неэффективность, рассмотрите возможность использования Шаблон 2. Добавив субрегион в тот же регион, что и бэкенд, вы можете оптимизировать связь шлюза с бэкендом. В этой настройке связь шлюза и бэкенда не обязательно должна происходить в разных регионах, что приводит к повышению эффективности. Этот шаблон помогает повысить производительность и скорость реагирования вашего развертывания API в многорегиональных сценариях.
- Я в процессе добавления нового региона для управления входящим трафиком из другого региона. В моем развертывании многопользовательская аренда является важнейшим фактором. Какой шаблон лучше всего подходит для моих требований?
В этом сценарии рекомендуемым выбором является Шаблон 1. Шаблон 1 легко обеспечивает многопользовательскую среду в регионах, что делает его подходящим решением для обработки входящего трафика и обеспечения эффективного управления арендаторами в многорегиональном развертывании
Настройка Шаблона 1: Гео-региональное синхронизированное управление API с реплицированными базами данных¶
В этом шаблоне все регионы идентичны, поэтому в документации будет предоставлена информация о настройке одного региона.
Настройка базы данных с репликацией¶
Примечание: NEOMSA APIM поддерживает репликацию БД только с БД MSSQL и Oracle. Наши клиенты использовали и протестировали эти две БД, и необходимые первичные и вторичные ключи доступны.
NEOMSA APIM поставляется со скриптами базы данных multi-dc для MSSQL и Oracle. При настройке базы данных с репликацией для развертывания multi-dc рекомендуется использовать предоставленный скрипт. Структура файла следующая.
<APIM-HOME>
└── dbscripts
└── multi-dc
├── OGG
│ └── oracle
│ ├── Readme.txt
│ ├── apimgt
│ │ ├── sequences.sql ----> NEOMSA_APIM_DB
│ │ └── tables.sql -------> NEOMSA_APIM_DB
│ ├── sequence.sql ---------> NEOMSA_APIM_SHARED_DB
│ └── tables.sql -----------> NEOMSA_APIM_SHARED_DB
└── SQLServer
└── mssql
├── ReadMe.txt
├── apimgt
│ └── tables.sql -------> NEOMSA_APIM_DB
└── tables.sql -----------> NEOMSA_APIM_SHARED_DB
По вопросам конфигураций, связанных с репликацией, вам следует проконсультироваться с администратором вашей базы данных.
Настройка узлов API Manager¶
— Установка NEOMSA APIM¶
Для установки и настройки серверов APIM:
-
Загрузите API-менеджер NEOMSA.
-
Создайте копии дистрибутива APIM для отдельных профилей.
Настройка баз данных¶
Вы можете создать необходимые базы данных для развертывания APIM на отдельном сервере и указать базы данных с соответствующих узлов.
Для получения информации смотрите раздел Подготовка БД.
Настройка развертывания с учетом требований к безопасности¶
Перед развертыванием NEOMSA APIM убедитесь, что вы учли соответствующие факторы повышения безопасности (например, изменение и шифрование паролей по умолчанию, настройку безопасности JVM и т. д.).
— Создание и импорт SSL-сертификатов¶
Создайте SSL-сертификат для каждого из узлов NEOMSA APIM и импортируйте их в хранилище ключей и хранилище доверенных сертификатов. Это гарантирует, что проблем с несоответствием имени хоста в сертификатах не возникнет.
Примечание. Для всех экземпляров API Manager для расшифровки ресурсов реестра следует использовать одно и то же первичное хранилище ключей.
— Настройка аналитики APIM¶
API Manager Analytics поставляется через облачное решение API Manager Analytics. Вам необходимо настроить API Manager Gateway для публикации аналитических данных в облаке.
— Настройка и запуск профилей¶
Настройка узлов APIM в развертывании.
Настройте узлы шлюза
Настройте шлюз для взаимодействия с плоскостью управления и узлами менеджера трафика.
Следуйте приведенным ниже инструкциям, чтобы настроить узел шлюза таким образом, чтобы он мог взаимодействовать с узлом плоскости управления:
-
Откройте файл узла шлюза <APIM-HOME>/repository/conf/deployment.toml.
-
Добавьте следующие конфигурации в файл deployment.toml.
-
Подключение шлюза к узлу плоскости управления (Control Plane):
Control Plane c High Availability
# Key Manager configuration
[apim.key_manager]
service_url = "https://[control-plane-LB-host]/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-LB-host]/services/"
event_listening_endpoints = ["tcp://control-plane-1-host:5672", "tcp://control-plane-2-host:5672"]
Single Control Plane
# Key Manager configuration
[apim.key_manager]
service_url = "https://[control-plane-host]:${mgt.transport.https.port}/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-host]:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://control-plane-host:5672"]
Информация. Конфигурация even hub используется для извлечения артефактов шлюза. Используя event_listening_endpoints, шлюз создаст JMS-соединение с even hub, которое затем будет использоваться для подписки на события, связанные с операциями API/Application/Subscription и Key Manager. Указывает service_url на внутренний API, который находится в even hub, который используется для извлечения артефактов и информации из базы данных.
- Подключение шлюза к узлу Traffic Manager :
Менеджер ключей с HA
[apim.throttling]
throttle_decision_endpoints = ["tcp://traffic-manager-1-host:5672", "tcp://Traffic-Manager-2-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://traffic-manager-1-host:9611"]
traffic_manager_auth_urls = ["ssl://traffic-manager-1-host:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://traffic-manager-2-host:9611"]
traffic_manager_auth_urls = ["ssl://traffic-manager-2-host:9711"]
Одиночный менеджер ключей
[apim.throttling]
throttle_decision_endpoints = ["tcp://traffic-manager-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://traffic-manager-host:9611"]
traffic_manager_auth_urls = ["ssl://traffic-manager-host:9711"]
Информация. Конфигурации ограничения скорости используются шлюзом для соединения с менеджером трафика. Шлюз будет публиковать события, связанные с вызовом шлюза, в TM с помощью apim.throttling.url_group. Менеджеры трафика будут получать эти события, а решения об ограничении скорости будут публиковаться в шлюзе. Чтобы получать эти решения об ограничении скорости, шлюз должен создать соединение JMS с помощью throttle_decision_endpoints и прослушивать.
Включение TLS/SSL для шлюза для коммуникаций Traffic Manager JMS
При необходимости можно включить TLS/SSL для JMS-коммуникаций между узлами шлюза и менеджера трафика.
Для этой цели добавьте следующую конфигурацию в узел шлюза.
[apim.throttling.jms]
topic_connection_factory = "amqp://<![CDATA[<username>]]>:<![CDATA[<password>]]>@clientid/carbon?brokerlist='tcp://tm.example.local:8672?ssl='true'%26ssl_cert_alias='<certificate_alias_in_truststore>'%26trust_store='<path_to_trust_store>'%26trust_store_password='<truststore_password>'%26key_store='<path_to_key_store>'%26key_store_password='<keystore_password>''"
Также обновите узел Traffic Manager, включив в него следующую конфигурацию для включения безопасных соединений брокеров.
[broker.transport.amqp.ssl_connection]
enabled = true
port = 8672
ssl_enabled_protocols = "TLSv1,TLSv1.2"
ciphers = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
[broker.transport.amqp.ssl_connection.keystore]
location = "repository/resources/security/wso2carbon.jks"
password = "wso2carbon"
cert_type = "SunX509"
[broker.transport.amqp.ssl_connection.truststore]
location = "repository/resources/security/client-truststore.jks"
password = "wso2carbon"
cert_type = "SunX509"
-
Добавьте следующие конфигурации в файл deployment.toml для настройки среды Gateway. Измените свойство gateway_labels свойство в зависимости от среды Gateway.
Информация. После развертывания/неразвертывания API Control Plane отправит событие развертывания/неразвертывания на шлюзы. Используя эту конфигурацию, шлюз отфильтрует соответствующие события развертывания/неразвертывания и извлекает артефакты.
-
Включите JSON Web Token (JWT), если требуется.
-
Добавьте публичный сертификат приватного ключа (который используется для подписи токенов) в хранилище доверенных сертификатов (truststore) под алиасом gateway_certificate_alias.
Примечание. Это неприменимо, если вы используете сертификаты по умолчанию, которые поставляются вместе с самим продуктом.
-
Чтобы настроить высокую доступность (HA) для шлюза APIM, выполните следующие действия:
-
Создайте копию узла APIM Gateway, который вы только что настроили. Это второй узел кластера APIM Gateway.
-
Настройте балансировщик нагрузки, который будет находиться перед двумя узлами Gateway в вашем развертывании.
-
Примечание. Чтобы сохранить пользовательские артефакты времени выполнения, развернутые в шлюзе, добавьте следующую конфигурацию в файл узлов шлюза <APIM-HOME>/repository/conf/deployment.toml.
[apim.sync_runtime_artifacts.gateway.skip_list]
apis = ["api1.xml","api2.xml"]
endpoints = ["endpoint1.xml"]
sequences = ["post_with_nobody.xml"]
local_entries = ["file.xml"]
- Откройте файлы deployment.toml каждого узла шлюза и добавьте имя хоста кластера. Например, если имя хоста — gw.example.local конфигурация будет:
```toml
[server]
hostname = "gw.example.local"
```
- Укажите следующие конфигурации входящих соединений в файлах обоих узлов deployment.toml.
```toml
[transport.http]
properties.port = 9763
properties.proxyPort = 80
[transport.https]
properties.port = 9443
properties.proxyPort = 443
```
- Откройте файл сервера /etc/hosts и сопоставьте имена хостов с IP-адресами.
Формат:
Пример:
Кластер HA
[server]
hostname = "gw.example.local"
node_ip = "127.0.0.1"
server_role = "gateway-worker"
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
[transport.http]
properties.port = 9763
properties.proxyPort = 80
[transport.https]
properties.port = 9443
properties.proxyPort = 443
# key manager implementation
[apim.key_manager]
service_url = "https://api.example.local/services/"
[apim.sync_runtime_artifacts.gateway]
gateway_labels =["Default"]
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://api.example.local/services/"
event_listening_endpoints = ["tcp://apim-cp-1:5672", "tcp://apim-cp-2:5672"]
# Traffic Manager configurations
[apim.throttling]
throttle_decision_endpoints = ["tcp://traffic-manager-1:5672", "tcp://traffic-manager-2:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://traffic-manager-1:9611"]
traffic_manager_auth_urls=["ssl://traffic-manager-1:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://traffic-manager-2:9611"]
traffic_manager_auth_urls=["ssl://traffic-manager-2:9711"]
Одиночный узел
[server]
hostname = "gw.example.local"
node_ip = "127.0.0.1"
server_role = "gateway-worker"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "h2"
url = "jdbc:h2:./repository/database/NEOMSA_APIM_SHARED_DB;DB_CLOSE_ON_EXIT=FALSE"
username = "wso2carbon"
password = "wso2carbon"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
Key Manager configuration¶
[apim.key_manager]
service_url = "https://cp.example.local:9443/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
Traffic Manager configurations¶
[apim.throttling]
throttle_decision_endpoints = ["tcp://tm.example.local:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://tm.example.local:9611"]
traffic_manager_auth_urls=["ssl://tm.example.local:9711"]
Event Hub configurations¶
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local:9443/services/"
event_listening_endpoints = ["tcp://cp.example.local:5672"]
[apim.sync_runtime_artifacts.gateway]
gateway_labels =["Default"]
Чтобы настроить узлы плоскости управления для связи со шлюзом, выполните следующие действия.
-
Откройте файл узла Control Plane <APIM-HOME>/repository/conf/deployment.toml.
-
Добавьте следующие конфигурации в файл deployment.toml.
Подключение плоскости управления к узлу шлюза:
Шлюз с HA
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-LB-host]/services/"
ws_endpoint = "ws://[api-gateway-LB-host-or-ip]:9099"
wss_endpoint = "wss://[api-gateway-LB-host-or-ip]:8099"
http_endpoint = "http://[api-gateway-LB-host]"
https_endpoint = https://[api-gateway-LB-host]
Одиночный шлюз
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-host]:9443/services/"
ws_endpoint = "ws://[api-gateway-host]:9099"
wss_endpoint = "wss://[api-gateway-host]:8099"
http_endpoint = "http://[api-gateway-host]:${http.nio.port}"
https_endpoint = "https://[api-gateway-host]:${https.nio.port}"
Информация. Эта конфигурация используется для развертывания API в шлюзе и для подключения компонента Портала администратора к шлюзу, если шлюз используется несколькими арендаторами. Если шлюз не используется несколькими арендаторами, вы можете создать окружение шлюза с помощью Портала администратора.
Обратите внимание, что в приведенных выше конфигурациях service_url указывает на порт 9443 узла шлюза, а http_endpoint и https_endpoint указывает на порты http и https nio ports (8280 и 8243).
Добавить конфигурации Event Hub :
Информация
Включение TLS/SSL для JMS-коммуникаций Event Hub.
При необходимости вы можете включить TLS/SSL для JMS-коммуникаций Event Hub. Обновите конфигурации event hub., включив для этой цели следующее.
[apim.event_hub]
enable = true
jms.username = "<username>"
jms.password = "<password>"
jms.ssl = "true'&ssl_cert_alias='<certificate_alias_in_truststore>'&trust_store='<path_to_trust_store>'&trust_store_password='<truststore_password>'&key_store='<path_to_key_store>'&key_store_password='<keystore_password>"
ssl = "true'&ssl_cert_alias='<certificate_alias_in_truststore>'&trust_store='<path_to_trust_store>'&trust_store_password='<truststore_password>'&key_store='<path_to_key_store>'&key_store_password='<keystore_password>"
event_listening_endpoints = ["tcp://control-plane-host:8672"]
Чтобы включить безопасные соединения брокера, добавьте следующую конфигурацию в узел Control Plane.
[broker.transport.amqp.ssl_connection]
enabled = true
port = 8672
ssl_enabled_protocols = "TLSv1,TLSv1.2"
ciphers = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
[broker.transport.amqp.ssl_connection.keystore]
location = "repository/resources/security/wso2carbon.jks"
password = "wso2carbon"
cert_type = "SunX509"
[broker.transport.amqp.ssl_connection.truststore]
location = "repository/resources/security/client-truststore.jks"
password = "wso2carbon"
cert_type = "SunX509"
Control Plane c High Availability
Event Hub configurations¶
[apim.event_hub]
enable = true
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
service_url = "https://localhost:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
event_duplicate_url = ["tcp://apim-cp-2:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-1-host:9611"]
auth_urls = ["ssl://control-plane-1-host:9711"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-2-host:9611"]
auth_urls = ["ssl://control-plane-2-host:9711"]
Single Control Plane
# Event Hub configurations
[apim.event_hub]
enable = true
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
service_url = "https://localhost:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-host:9611"]
auth_urls = ["ssl://control-plane-host:9711"]
Информация. Поскольку в настройке HA есть два event hubs, каждый event hubs должен публиковать события в обоих потоках событий. Это будет сделано через потоки событий, созданные с помощью apim.event_hub.publish.url_group. События аннулирования токенов, полученные в одном Event Hub, будут дублироваться в другом Event Hub с использованием event_duplicate_url.
Добавьте конфигурации слушателя событий:
Приведенные ниже конфигурации добавляются в Control Plane только в том случае, если вы используете Resident Key Manager (находится в Control Plane). Если вы используете NEOMSA IS в качестве Key Manager, вам необходимо добавить их в узел IS. После добавления приведенных ниже конфигураций Control Plane или Identity Server будут прослушивать события отзыва токенов и вызывать в отношении notification_endpoint отозванных токенов.
Control Plane c High Availability
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://[control-plane-LB-host]/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
Single Control Plane
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://[control-plane-host]:${mgt.transport.https.port}/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
-
При необходимости зашифруйте ключи аутентификации (токены доступа, клиентские секреты и коды авторизации).
-
По желании добавьте следующую конфигурацию, чтобы включить аннулирование распределенного кэша в узлах плоскости управления.
-
Чтобы настроить высокую доступность (HA) для control plane, выполните следующие действия:
-
Создайте копию узла APIM Control Plane, который вы только что настроили. Это будет второй узел кластера API-M Control Plane.
-
Настройте балансировщик нагрузки, который будет находиться перед двумя узлами Control Plane в вашем развертывании.
-
Пример конфигурации для Control Plane
Кластер HA
[server]
hostname = "api.example.local"
node_ip = "127.0.0.1"
server_role="control-plane"
base_path = "${carbon.protocol}://${carbon.host}:${carbon.management.port}"
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.apim_db]
type = "mysql"
hostname = "db.example.local"
name = "apim_db"
port = "3306"
username = "apimadmin"
password = "apimadmin"
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-LB-host]/services/"
ws_endpoint = "ws://[api-gateway-LB-host]:9099"
wss_endpoint = "wss://[api-gateway-LB-host]:8099"
http_endpoint = "http://[api-gateway-LB-host]"
https_endpoint = "https://[api-gateway-LB-host]"
[apim.devportal]
url = "https://api.example.local/devportal"
[transport.https.properties]
proxyPort = 443
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://api.example.local/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
event_duplicate_url = ["tcp://apim-cp-2:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://apim-cp-1:9611"]
auth_urls = ["ssl://apim-cp-1:9711"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://apim-cp-2:9611"]
auth_urls = ["ssl://apim-cp-2:9711"]
# key manager implementation
[apim.key_manager]
service_url = "https://api.example.local/services/"
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
type = "default"
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://api.example.local/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
Одиночный узел
[server]
hostname = "cp.example.local"
node_ip = "127.0.0.1"
server_role = "control-plane"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.apim_db]
type = "mysql"
hostname = "db.example.local"
name = "apim_db"
port = "3306"
username = "apimadmin"
password = "apimadmin"
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
# Gateway configuration
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://gw.example.local:9443/services/"
username= "${admin.username}"
password= "${admin.password}"
ws_endpoint = "ws://[api-gateway-host]:9099"
wss_endpoint = "wss://[api-gateway-host]:8099"
http_endpoint = "http://[api-gateway-host]:8280"
https_endpoint = "https://[api-gateway-host]:8243"
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://cp.example.local:9443/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local:9443/services/"
event_listening_endpoints = ["tcp://cp.example.local:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://cp.example.local:9611"]
auth_urls = ["ssl://cp.example.local:9711"]
Настройте узлы менеджера трафика
В типичном распределенном развертывании все компоненты APIM (за исключением APIM Gateway) работают в Control Plane. Однако у вас есть возможность отделить Traffic Manager от Control Plane.
Настройте менеджер трафика для взаимодействия с Control Plane.
-
Откройте файл <APIM-HOME>/repository/conf/deployment.toml узла Traffic Manager.
-
Добавьте следующие конфигурации в файл deployment.toml.
Подключение диспетчера трафика к узлу плоскости управления :
Control Plane с High Availability
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-LB-host]/services/"
event_listening_endpoints = ["tcp://control-plane-1-host:5672", "tcp://control-plane-2-host:5672"]
Single Control Plane
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-host]/services/"
event_listening_endpoints = ["tcp://control-plane-host:5672"]
Информация. С помощью event_listening_endpoints Traffic Manager подписывается на поток JMS обоих event hubs. После получения события, связанного с политикой, он извлечет планы выполнения из service_url.
Если узел Traffic Manager настроен на высокую доступность (HA), настройте ограничение скорости следующим образом.
[apim.throttling]
event_duplicate_url = ["tcp://traffic-manager-2-host:5672"]
throttle_decision_endpoints = ["tcp://localhost:5672"]
Информация. Для поддержания согласованности решения об ограничении скорости будут публиковаться event_duplicate_url публиковаться на другом узле Traffic Manager.
-
Чтобы настроить высокую доступность (HA) для Traffic Manager, выполните следующие действия.
-
Создайте копию узла Traffic Manager, который вы только что настроили. Это будет второй узел кластера Traffic Manager.
-
Настройте балансировщик нагрузки, подключенный к двум узлам Traffic Manager в вашем развертывании.
-
Примечание. При каждом запуске узла Traffic Manager политики ограничения скорости переразвертываются путем извлечения последних сведений о политике из базы данных. Это поддерживает согласованность между узлами Traffic Manager. Если вам нужно избежать повторного развертывания определенных политик ограничения скорости, добавьте следующую конфигурацию в файл <APIM-HOME>/repository/conf/deployment.toml файл в узле Traffic Manager.
[apim.throttling]
skip_redeploying_policies = ["throttle_policy_1","throttle_policy_2"]
Пример конфигурации для Traffic Manager
Кластер HA
[server]
hostname = "tm.example.local"
node_ip = "127.0.0.1"
server_role = "traffic-manager"
[transport.https.properties]
proxyPort = 443
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://api.example.local/services/"
event_listening_endpoints = ["tcp://apim-cp-1:5672", "tcp://apim-cp-2:5672"]
# Traffic Manager configurations
[apim.throttling]
event_duplicate_url = ["tcp://traffic-manager-2:5672"]
throttle_decision_endpoints = ["tcp://localhost:5672"]
Одиночный узел
[server]
hostname = "tm.example.local"
node_ip = "127.0.0.1"
server_role = "traffic-manager"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "h2"
url = "jdbc:h2:./repository/database/NEOMSA_APIM_SHARED_DB;DB_CLOSE_ON_EXIT=FALSE"
username = "wso2carbon"
password = "wso2carbon"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local:9443/services/"
event_listening_endpoints = ["tcp://cp.example.local:5672"]
— Запуск узлов APIM¶
После успешной настройки всех узлов APIM в развертывании можно запускать серверы.
- Запуск узлов шлюза
Откройте терминал, перейдите в папку <APIM-GATEWAY-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
- Запуск узлов Control Plane
Откройте терминал, перейдите в папку <APIM-CONTROL-PLANE-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
- Запустите узлы Traffic Manager
Откройте терминал, перейдите в папку <APIM-TRAFFIC-MANAGER-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
Настройка связи между узлами плоскости управления в разных регионах¶
В развертывании NEOMSA APIM с несколькими центрами обработки данных (multi-DC) каждый регион работает независимо и взаимодействует с другими регионами через соответствующие им event hubs посредством событий JMS (Java Message Service). Этот шаблон обеспечивает эффективную межрегиональную координацию и уведомления о различных событиях, включая события, связанные с API, события, связанные с приложениями, события, связанные с менеджером ключей, и события отзыва токенов.
Следует отметить, что эта межрегиональная коммуникация через события JMS и Event Hub'ы не поддерживается "из коробки" в NEOMSA APIM . Поэтому организациям, развертывающие установки с несколькими ЦОД, необходимо реализовать собственные публикации данных в узлах control plane каждого региона. Эти пользовательские публикации данных предназначены для отправки данных в Event Hub'ы в разных регионах, что облегчает связь между ними.
Необходимо реализовать 5 следующих издателей данных на каждую control plane, где используются издатели данных:
| Издатель данных | Цель |
|---|---|
| Notifications data publisher | Публикует данные, связанные с потоком событий «org.wso2.apimgt.notification.stream». Этот поток событий состоит из событий, связанных с API, приложениями, политиками и т. д. |
| Token revocation data publisher | Публикует данные, связанные с потоком событий «org.wso2.apimgt.token.revocation.stream». Этот поток событий отвечает за события, связанные с отзывом токенов. |
| Key management data publisher | Публикует данные, связанные с потоком событий «org.wso2.apimgt.keymgt.stream». Этот поток событий отвечает за события, связанные с менеджером ключей, такие как добавление, обновление и удаление менеджера ключей. |
| Async Webhooks data publisher | Публикует данные из потока событий «org.wso2.apimgt.webhooks.request.stream». Этот поток событий отвечает за данные запроса от развернутых вебхуков в шлюзе API. |
| Blocking Event Data Publisher | Публикует данные из потока событий «org.wso2.blocking.request.stream». Этот поток событий отвечает за блокировку задач, таких как блокировка приложений, блокировка IP и т. д. |
Кроме того, файлы jndi.properties должны быть добавлены для каждого региона, чтобы предоставить информацию о подключении Event Hub.
Поскольку плоскости управления подключены только через соединения JMS, порт TCP 5672 должен быть открыт для внешних сторон (control plane других регионов).
Выполните следующие шаги, чтобы настроить узел(ы) control plane в регионе 1 для связи с control plane региона 2. Аналогичным образом конфигурации региона 1 следует добавить в control plane региона 2.
- Добавьте следующие event publishers в каталог <APIM-HOME>/repository/deployment/server/eventpublishers плоскости управления.
notificationJMSPublisherRegion2.xml
<?xml version="1.0" encoding="UTF-8"?>
<eventPublisher name="notificationJMSPublisherRegion2" statistics="disable"
trace="disable"
xmlns="http://wso2.org/carbon/eventpublisher">
<from streamName="org.wso2.apimgt.notification.stream" version="1.0.0"/>
<mapping customMapping="disable" type="json"/>
<to eventAdapterType="jms">
<property name="java.naming.factory.initial">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</property>
<property name="java.naming.provider.url">repository/conf/jndi-region2.properties</property>
<property name="transport.jms.DestinationType">topic</property>
<property name="transport.jms.Destination">notification</property>
<property name="transport.jms.ConcurrentPublishers">allow</property>
<property name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</property>
</to>
</eventPublisher>
tokenRevocationJMSPublisherRegion2.xml
<?xml version="1.0" encoding="UTF-8"?>
<eventPublisher name="tokenRevocationJMSPublisherRegion2" statistics="disable"
trace="disable"
xmlns="http://wso2.org/carbon/eventpublisher">
<from streamName="org.wso2.apimgt.token.revocation.stream" version="1.0.0"/>
<mapping customMapping="disable" type="json"/>
<to eventAdapterType="jms">
<property name="java.naming.factory.initial">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</property>
<property name="java.naming.provider.url">repository/conf/jndi-region2.properties</property>
<property name="transport.jms.DestinationType">topic</property>
<property name="transport.jms.Destination">tokenRevocation</property>
<property name="transport.jms.ConcurrentPublishers">allow</property>
<property name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</property>
</to>
</eventPublisher>
keymgtEventJMSEventPublisherRegion2.xml
<?xml version="1.0" encoding="UTF-8"?>
<eventPublisher name="keymgtEventJMSEventPublisherRegion2" statistics="disable"
trace="disable" xmlns="http://wso2.org/carbon/eventpublisher">
<from streamName="org.wso2.apimgt.keymgt.stream" version="1.0.0"/>
<mapping customMapping="disable" type="json"/>
<to eventAdapterType="jms">
<property name="java.naming.factory.initial">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</property>
<property name="java.naming.provider.url">repository/conf/jndi-region2.properties</property>
<property name="transport.jms.DestinationType">topic</property>
<property name="transport.jms.Destination">keyManager</property>
<property name="transport.jms.ConcurrentPublishers">allow</property>
<property name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</property>
</to>
</eventPublisher>
asyncWebhooksEventPublisherRegion2.xml (это необязательно, только если в вашем развертывании есть API потоковой передачи вебхуков)
<?xml version="1.0" encoding="UTF-8"?>
<eventPublisher name="asyncWebhooksEventPublisher-1.0.0-Region2" statistics="disable" processing="disable"
trace="disable"
xmlns="http://wso2.org/carbon/eventpublisher">
<from streamName="org.wso2.apimgt.webhooks.request.stream" version="1.0.0"/>
<mapping customMapping="disable" type="json"/>
<to eventAdapterType="jms">
<property name="java.naming.factory.initial">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</property>
<property name="java.naming.provider.url">repository/conf/jndi2-region2.properties</property>
<property name="transport.jms.DestinationType">topic</property>
<property name="transport.jms.Destination">asyncWebhooksData</property>
<property name="transport.jms.ConcurrentPublishers">allow</property>
<property name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</property>
</to>
</eventPublisher>
blockingEventJMSPublisherRegion2.xml
<?xml version="1.0" encoding="UTF-8"?>
<eventPublisher name="blockingEventJMSPublisher" statistics="disable"
trace="disable" xmlns="http://wso2.org/carbon/eventpublisher">
<from streamName="org.wso2.blocking.request.stream" version="1.0.0"/>
<mapping customMapping="disable" type="json"/>
<to eventAdapterType="jms">
<property name="java.naming.factory.initial">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</property>
<property name="java.naming.provider.url">repository/conf/jndi2-region2.properties</property>
<property name="transport.jms.DestinationType">topic</property>
<property name="transport.jms.Destination">throttleData</property>
<property name="transport.jms.ConcurrentPublishers">allow</property>
<property name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</property>
</to>
</eventPublisher>
- Добавьте следующий файл конфигурации JNDI в <APIM-HOME>/repository/conf directory:
jndi-region2. properties
connectionfactory.TopicConnectionFactory = amqp://admin:admin@clientid/carbon?brokerlist='tcp://<region2-cp-host>:5672'
topic.tokenRevocation = tokenRevocation
topic.keyManager = keyManager
topic.notification = notification
topic.asyncWebhooksData = asyncWebhooksData
Замените <region2-cp-host> на хост control plane региона, где публикуются эти данные. В шаблоне 1 все Event Hub'ы публикуют данные во все остальные Event Hub'ы. Поэтому все Event Hub'ы (узлы контрольной плоскости) во всех регионах должны быть настроены на публикацию данных в другие регионы..
Необязательный шаг. Если у вас есть вторичные хранилища пользователей, убедитесь, что каталог userstores является общим для регионов.
Примечание. При первоначальном добавлении вторичного хранилища пользователей будет создан новый каталог с именем userstores./repository/deployment/server location. Все конфигурации, связанные с вторичным хранилищем пользователей, будут храниться в каталоге userstores
Настройка Шаблона 2: Централизованное управление API с региональными Data Plane¶
Настройка основного региона
Основной регион будет аналогичен настройке в конкретном регионе, как в Шаблоне 1. Следовательно, конфигурация будет аналогичной, за исключением репликации БД и связи с even hubz
Установка NEOMSA APIM¶
Для установки и настройки серверов APIM:
-
Загрузите API-менеджер NEOMSA
-
Создайте копии дистрибутива API-M для отдельных профилей.
Настройка баз данных¶
Вы можете создать необходимые базы данных для развертывания API-M на отдельном сервере и указать базы данных с соответствующих узлов.
Для получения информации смотрите раздел Подготовка БД.
Настройка развертывания с учетом требований к безопасности¶
Перед развертыванием NEOMSA APIM убедитесь, что вы учли соответствующие факторы повышения безопасности (например, изменение и шифрование паролей по умолчанию, настройку безопасности JVM и т. д.).
Создание и импорт SSL-сертификатов¶
Создайте SSL-сертификат для каждого из узлов NEOMSA APIM и импортируйте их в хранилище ключей и хранилище доверенных сертификатов. Это гарантирует, что проблем с несоответствием имени хоста в сертификатах не возникнет.
Примечание. Для всех экземпляров API Manager для расшифровки ресурсов реестра следует использовать одно и то же первичное хранилище ключей.
API Manager Analytics поставляется через облачное решение API Manager Analytics. Вам необходимо настроить API Manager Gateway для публикации аналитических данных в облаке.
Настройка и запуск профилей¶
Настройка узлов APIM в развертывании.
Настройте узлы шлюза
Настройте шлюз для взаимодействия с плоскостью управления и узлами менеджера трафика.
Следуйте приведенным ниже инструкциям, чтобы настроить узел шлюза таким образом, чтобы он мог взаимодействовать с узлом плоскости управления:
-
Откройте файл узла шлюза <APIM-HOME>/repository/conf/deployment.toml.
-
Добавьте следующие конфигурации в файл deployment.toml.
-
Подключение шлюза к узлу плоскости управления (Control Plane):
Control Plane c High Availability
# Key Manager configuration
[apim.key_manager]
service_url = "https://[control-plane-LB-host]/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-LB-host]/services/"
event_listening_endpoints = ["tcp://control-plane-1-host:5672", "tcp://control-plane-2-host:5672"]
Single Control Plane
# Key Manager configuration
[apim.key_manager]
service_url = "https://[control-plane-host]:${mgt.transport.https.port}/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-host]:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://control-plane-host:5672"]
Информация. Конфигурация even hub используется для извлечения артефактов шлюза. Используя event_listening_endpoints, шлюз создаст JMS-соединение с even hub, которое затем будет использоваться для подписки на события, связанные с операциями API/Application/Subscription и Key Manager. Указывает service_url на внутренний API, который находится в even hub, который используется для извлечения артефактов и информации из базы данных.
- Подключение шлюза к узлу Traffic Manager :
Менеджер ключей с HA
[apim.throttling]
throttle_decision_endpoints = ["tcp://traffic-manager-1-host:5672", "tcp://Traffic-Manager-2-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://traffic-manager-1-host:9611"]
traffic_manager_auth_urls = ["ssl://traffic-manager-1-host:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://traffic-manager-2-host:9611"]
traffic_manager_auth_urls = ["ssl://traffic-manager-2-host:9711"]
Одиночный менеджер ключей
[apim.throttling]
throttle_decision_endpoints = ["tcp://traffic-manager-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://traffic-manager-host:9611"]
traffic_manager_auth_urls = ["ssl://traffic-manager-host:9711"]
Информация. Конфигурации ограничения скорости используются шлюзом для соединения с менеджером трафика. Шлюз будет публиковать события, связанные с вызовом шлюза, в TM с помощью apim.throttling.url_group. Менеджеры трафика будут получать эти события, а решения об ограничении скорости будут публиковаться в шлюзе. Чтобы получать эти решения об ограничении скорости, шлюз должен создать соединение JMS с помощью throttle_decision_endpoints и прослушивать.
Включение TLS/SSL для шлюза для коммуникаций Traffic Manager JMS
При необходимости можно включить TLS/SSL для JMS-коммуникаций между узлами шлюза и менеджера трафика.
Для этой цели добавьте следующую конфигурацию в узел шлюза.
[apim.throttling.jms]
topic_connection_factory = "amqp://<![CDATA[<username>]]>:<![CDATA[<password>]]>@clientid/carbon?brokerlist='tcp://tm.example.local:8672?ssl='true'%26ssl_cert_alias='<certificate_alias_in_truststore>'%26trust_store='<path_to_trust_store>'%26trust_store_password='<truststore_password>'%26key_store='<path_to_key_store>'%26key_store_password='<keystore_password>''"
Также обновите узел Traffic Manager, включив в него следующую конфигурацию для включения безопасных соединений брокеров.
[broker.transport.amqp.ssl_connection]
enabled = true
port = 8672
ssl_enabled_protocols = "TLSv1,TLSv1.2"
ciphers = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
[broker.transport.amqp.ssl_connection.keystore]
location = "repository/resources/security/wso2carbon.jks"
password = "wso2carbon"
cert_type = "SunX509"
[broker.transport.amqp.ssl_connection.truststore]
location = "repository/resources/security/client-truststore.jks"
password = "wso2carbon"
cert_type = "SunX509"
-
Добавьте следующие конфигурации в файл deployment.toml для настройки среды Gateway. Измените свойство gateway_labels в зависимости от среды Gateway.
Информация. После развертывания/неразвертывания API Control Plane отправит событие развертывания/неразвертывания на шлюзы. Используя эту конфигурацию, шлюз отфильтрует соответствующие события развертывания/неразвертывания и извлекает артефакты.
-
Включите JSON Web Token (JWT), если требуется.
-
Добавьте публичный сертификат приватного ключа (который используется для подписи токенов) в хранилище доверенных сертификатов (truststore) под алиасом gateway_certificate_alias.
Примечание. Это неприменимо, если вы используете сертификаты по умолчанию, которые поставляются вместе с самим продуктом.
-
Чтобы настроить высокую доступность (HA) для шлюза API-M, выполните следующие действия:
-
Создайте копию узла API-M Gateway, который вы только что настроили. Это второй узел кластера API-M Gateway.
-
Настройте балансировщик нагрузки, который будет находиться перед двумя узлами Gateway в вашем развертывании.
-
Примечание. Чтобы сохранить пользовательские артефакты времени выполнения, развернутые в шлюзе, добавьте следующую конфигурацию в файл узлов шлюза <APIM-HOME>/repository/conf/deployment.toml.
[apim.sync_runtime_artifacts.gateway.skip_list]
apis = ["api1.xml","api2.xml"]
endpoints = ["endpoint1.xml"]
sequences = ["post_with_nobody.xml"]
local_entries = ["file.xml"]
1. Откройте файлы deployment.toml каждого узла шлюза и добавьте имя хоста кластера. Например, если имя хоста — gw.example.local конфигурация будет:
```toml
[server]
hostname = "gw.example.local"
```
1. Укажите следующие конфигурации входящих соединений в файлах обоих узлов deployment.toml.
```toml
[transport.http]
properties.port = 9763
properties.proxyPort = 80
[transport.https]
properties.port = 9443
properties.proxyPort = 443
```
1. Откройте файл сервера /etc/hosts и сопоставьте имена хостов с IP-адресами.
Формат:
Пример:
Кластер HA
[server]
hostname = "gw.example.local"
node_ip = "127.0.0.1"
server_role = "gateway-worker"
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
[transport.http]
properties.port = 9763
properties.proxyPort = 80
[transport.https]
properties.port = 9443
properties.proxyPort = 443
# key manager implementation
[apim.key_manager]
service_url = "https://api.example.local/services/"
[apim.sync_runtime_artifacts.gateway]
gateway_labels =["Default"]
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://api.example.local/services/"
event_listening_endpoints = ["tcp://apim-cp-1:5672", "tcp://apim-cp-2:5672"]
# Traffic Manager configurations
[apim.throttling]
throttle_decision_endpoints = ["tcp://traffic-manager-1:5672", "tcp://traffic-manager-2:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://traffic-manager-1:9611"]
traffic_manager_auth_urls=["ssl://traffic-manager-1:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://traffic-manager-2:9611"]
traffic_manager_auth_urls=["ssl://traffic-manager-2:9711"]
Одиночный узел
[server]
hostname = "gw.example.local"
node_ip = "127.0.0.1"
server_role = "gateway-worker"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "h2"
url = "jdbc:h2:./repository/database/NEOMSA_APIM_SHARED_DB;DB_CLOSE_ON_EXIT=FALSE"
username = "wso2carbon"
password = "wso2carbon"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
# Key Manager configuration
[apim.key_manager]
service_url = "https://cp.example.local:9443/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
# Traffic Manager configurations
[apim.throttling]
throttle_decision_endpoints = ["tcp://tm.example.local:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls=["tcp://tm.example.local:9611"]
traffic_manager_auth_urls=["ssl://tm.example.local:9711"]
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local:9443/services/"
event_listening_endpoints = ["tcp://cp.example.local:5672"]
[apim.sync_runtime_artifacts.gateway]
gateway_labels =["Default"]
Настройка узлов плоскости управления (Control Plane)
Чтобы настроить узлы плоскости управления для связи со шлюзом, выполните следующие действия.
-
Откройте файл узла Control Plane <APIM-HOME>/repository/conf/deployment.toml.
-
Добавьте следующие конфигурации в файл deployment.toml.
Подключение плоскости управления к узлу шлюза:
Шлюз с HA
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-LB-host]/services/"
ws_endpoint = "ws://[api-gateway-LB-host-or-ip]:9099"
wss_endpoint = "wss://[api-gateway-LB-host-or-ip]:8099"
http_endpoint = "http://[api-gateway-LB-host]"
https_endpoint = https://[api-gateway-LB-host]
Одиночный шлюз
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-host]:9443/services/"
ws_endpoint = "ws://[api-gateway-host]:9099"
wss_endpoint = "wss://[api-gateway-host]:8099"
http_endpoint = "http://[api-gateway-host]:${http.nio.port}"
https_endpoint = "https://[api-gateway-host]:${https.nio.port}"
Информация. Эта конфигурация используется для развертывания API в шлюзе и для подключения компонента Портала администратора к шлюзу, если шлюз используется несколькими арендаторами. Если шлюз не используется несколькими арендаторами, вы можете создать окружение шлюза с помощью Портала администратора.
Обратите внимание, что в приведенных выше конфигурациях service_url указывает на порт 9443 узла шлюза, а http_endpoint и https_endpoint указывает на порты http и https nio ports (8280 и 8243).
Добавить конфигурации Event Hub :
Информация
Включение TLS/SSL для JMS-коммуникаций Event Hub.
При необходимости вы можете включить TLS/SSL для JMS-коммуникаций Event Hub. Обновите конфигурации event hub., включив для этой цели следующее.
[apim.event_hub]
enable = true
jms.username = "<username>"
jms.password = "<password>"
jms.ssl = "true'&ssl_cert_alias='<certificate_alias_in_truststore>'&trust_store='<path_to_trust_store>'&trust_store_password='<truststore_password>'&key_store='<path_to_key_store>'&key_store_password='<keystore_password>"
ssl = "true'&ssl_cert_alias='<certificate_alias_in_truststore>'&trust_store='<path_to_trust_store>'&trust_store_password='<truststore_password>'&key_store='<path_to_key_store>'&key_store_password='<keystore_password>"
event_listening_endpoints = ["tcp://control-plane-host:8672"]
Чтобы включить безопасные брокерские соединения, добавьте следующую конфигурацию в узел Control Plane.
[broker.transport.amqp.ssl_connection]
enabled = true
port = 8672
ssl_enabled_protocols = "TLSv1,TLSv1.2"
ciphers = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
[broker.transport.amqp.ssl_connection.keystore]
location = "repository/resources/security/wso2carbon.jks"
password = "wso2carbon"
cert_type = "SunX509"
[broker.transport.amqp.ssl_connection.truststore]
location = "repository/resources/security/client-truststore.jks"
password = "wso2carbon"
cert_type = "SunX509"
Control Plane c High Availability
# Event Hub configurations
[apim.event_hub]
enable = true
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
service_url = "https://localhost:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
event_duplicate_url = ["tcp://apim-cp-2:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-1-host:9611"]
auth_urls = ["ssl://control-plane-1-host:9711"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-2-host:9611"]
auth_urls = ["ssl://control-plane-2-host:9711"]
Single Control Plane
# Event Hub configurations
[apim.event_hub]
enable = true
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
service_url = "https://localhost:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://control-plane-host:9611"]
auth_urls = ["ssl://control-plane-host:9711"]
Информация
Поскольку в настройке HA есть два event hubs, каждый event hubs должен публиковать события в обоих потоках событий. Это будет сделано через потоки событий, созданные с помощью apim.event_hub.publish.url_group. События аннулирования токенов, полученные в одном Event Hub, будут дублироваться в другом Event Hub с использованием event_duplicate_url.
Добавить конфигурации слушателя событий:
Приведенные ниже конфигурации добавляются в Control Plane только в том случае, если вы используете Resident Key Manager (находится в Control Plane). Если вы используете NEOMSA IS в качестве Key Manager, вам необходимо добавить их в узел IS. После добавления приведенных ниже конфигураций Control Plane или Identity Server будут прослушивать события отзыва токенов и вызывать в отношении notification_endpoint отозванных токенов
Control Plane c High Availability
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://[control-plane-LB-host]/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
Single Control Plane
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://[control-plane-host]:${mgt.transport.https.port}/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
-
При необходимости зашифруйте ключи аутентификации (токены доступа, клиентские секреты и коды авторизации).
-
При желании добавьте следующую конфигурацию, чтобы включить аннулирование распределенного кэша в узлах плоскости управления.
-
Чтобы настроить высокую доступность (HA) для control plane, выполните следующие действия:
-
Создайте копию узла API-M Control Plane, который вы только что настроили. Это будет второй узел кластера API-M Control Plane.
-
Настройте балансировщик нагрузки, который будет находиться перед двумя узлами Control Plane в вашем развертывании.
-
Пример конфигурации для Control Plane
Кластер HA
[server]
hostname = "api.example.local"
node_ip = "127.0.0.1"
server_role="control-plane"
base_path = "${carbon.protocol}://${carbon.host}:${carbon.management.port}"
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.apim_db]
type = "mysql"
hostname = "db.example.local"
name = "apim_db"
port = "3306"
username = "apimadmin"
password = "apimadmin"
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://[api-gateway-LB-host]/services/"
ws_endpoint = "ws://[api-gateway-LB-host]:9099"
wss_endpoint = "wss://[api-gateway-LB-host]:8099"
http_endpoint = "http://[api-gateway-LB-host]"
https_endpoint = "https://[api-gateway-LB-host]"
[apim.devportal]
url = "https://api.example.local/devportal"
[transport.https.properties]
proxyPort = 443
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://api.example.local/services/"
event_listening_endpoints = ["tcp://localhost:5672"]
event_duplicate_url = ["tcp://apim-cp-2:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://apim-cp-1:9611"]
auth_urls = ["ssl://apim-cp-1:9711"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://apim-cp-2:9611"]
auth_urls = ["ssl://apim-cp-2:9711"]
# key manager implementation
[apim.key_manager]
service_url = "https://api.example.local/services/"
username= "$ref{super_admin.username}"
password= "$ref{super_admin.password}"
type = "default"
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://api.example.local/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
Одиночный узел
[server]
hostname = "cp.example.local"
node_ip = "127.0.0.1"
server_role = "control-plane"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.apim_db]
type = "mysql"
hostname = "db.example.local"
name = "apim_db"
port = "3306"
username = "apimadmin"
password = "apimadmin"
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
# Gateway configuration
[[apim.gateway.environment]]
name = "Default"
type = "hybrid"
display_in_api_console = true
description = "This is a hybrid gateway that handles both production and sandbox token traffic."
show_as_token_endpoint_url = true
service_url = "https://gw.example.local:9443/services/"
username= "${admin.username}"
password= "${admin.password}"
ws_endpoint = "ws://[api-gateway-host]:9099"
wss_endpoint = "wss://[api-gateway-host]:8099"
http_endpoint = "http://[api-gateway-host]:8280"
https_endpoint = "https://[api-gateway-host]:8243"
# Event Listener configurations
[[event_listener]]
id = "token_revocation"
type = "org.wso2.carbon.identity.core.handler.AbstractIdentityHandler"
name = "org.wso2.is.notification.ApimOauthEventInterceptor"
order = 1
[event_listener.properties]
notification_endpoint = "https://cp.example.local:9443/internal/data/v1/notify"
username = "${admin.username}"
password = "${admin.password}"
'header.X-WSO2-KEY-MANAGER' = "default"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local:9443/services/"
event_listening_endpoints = ["tcp://cp.example.local:5672"]
[[apim.event_hub.publish.url_group]]
urls = ["tcp://cp.example.local:9611"]
auth_urls = ["ssl://cp.example.local:9711"]
Настройте узлы менеджера трафика
В типичном распределенном развертывании все компоненты API-M (за исключением API-M Gateway) работают в Control Plane. Однако у вас есть возможность отделить Traffic Manager от Control Plane.
Настройте менеджер трафика для взаимодействия с Control Plane.
-
Откройте файл <APIM-HOME>/repository/conf/deployment.toml узла Traffic Manager.
-
Добавьте следующие конфигурации в файл deployment.toml.
Подключение менеджера трафика к узлу Control Plane:
Control Plane с High Availability
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-LB-host]/services/"
event_listening_endpoints = ["tcp://control-plane-1-host:5672", "tcp://control-plane-2-host:5672"]
Single Control Plane
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[control-plane-host]/services/"
event_listening_endpoints = ["tcp://control-plane-host:5672"]
Информация. С помощью event_listening_endpoints Traffic Manager подписывается на поток JMS обоих event hubs. После получения события, связанного с политикой, он извлечет планы выполнения из service_url.
Если узел Traffic Manager настроен на высокую доступность (HA), настройте ограничение скорости следующим образом.
[apim.throttling]
event_duplicate_url = ["tcp://traffic-manager-2-host:5672"]
throttle_decision_endpoints = ["tcp://localhost:5672"]
Информация. Для поддержания согласованности решения об ограничении скорости будут публиковаться event_duplicate_url на другом узле Traffic Manager.
-
Чтобы настроить высокую доступность (HA) для Traffic Manager, выполните следующие действия.
-
Создайте копию узла Traffic Manager, который вы только что настроили. Это будет второй узел кластера Traffic Manager.
-
Настройте балансировщик нагрузки, подключенный к двум узлам Traffic Manager в вашем развертывании.
-
Примечание. При каждом запуске узла Traffic Manager политики ограничения скорости переразвертываются путем извлечения последних сведений о политике из базы данных. Это поддерживает согласованность между узлами Traffic Manager. Если вам нужно избежать повторного развертывания определенных политик ограничения скорости, добавьте следующую конфигурацию в файл <APIM-HOME>/repository/conf/deployment.toml в узле Traffic Manager.
[apim.throttling]
skip_redeploying_policies = ["throttle_policy_1","throttle_policy_2"]
Пример конфигурации для Traffic Manager
Кластер HA
[server]
hostname = "tm.example.local"
node_ip = "127.0.0.1"
server_role = "traffic-manager"
[transport.https.properties]
proxyPort = 443
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "mysql"
hostname = "db.example.local"
name = "shared_db"
port = "3306"
username = "sharedadmin"
password = "sharedadmin"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://api.example.local/services/"
event_listening_endpoints = ["tcp://apim-cp-1:5672", "tcp://apim-cp-2:5672"]
# Traffic Manager configurations
[apim.throttling]
event_duplicate_url = ["tcp://traffic-manager-2:5672"]
throttle_decision_endpoints = ["tcp://localhost:5672"]
Одиночный узел
[server]
hostname = "tm.example.local"
node_ip = "127.0.0.1"
server_role = "traffic-manager"
offset=0
[user_store]
type = "database_unique_id"
[super_admin]
username = "admin"
password = "admin"
create_admin_account = true
[database.shared_db]
type = "h2"
url = "jdbc:h2:./repository/database/NEOMSA_APIM_SHARED_DB;DB_CLOSE_ON_EXIT=FALSE"
username = "wso2carbon"
password = "wso2carbon"
[keystore.tls]
file_name = "wso2carbon.jks"
type = "JKS"
password = "wso2carbon"
alias = "wso2carbon"
key_password = "wso2carbon"
[truststore]
file_name = "client-truststore.jks"
type = "JKS"
password = "wso2carbon"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://cp.example.local:9443/services/"
event_listening_endpoints = ["tcp://cp.example.local:5672"]
Запуск узлов APIM¶
После успешной настройки всех узлов APIM в развертывании можно запускать серверы.
- Запуск узлов шлюза
Откройте терминал, перейдите в папку <APIM-GATEWAY-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
- Запуск узлов Control Plane
Откройте терминал, перейдите в папку <APIM-CONTROL-PLANE-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
- Запустите узлы Traffic Manager
Откройте терминал, перейдите в папку <APIM-TRAFFIC-MANAGER-HOME>/bin и выполните следующую команду:
ОС Linux/Mac
Поскольку control plane находится только в основном регионе, узлы шлюза и узлы менеджера трафика в субрегионах должны взаимодействовать с основным регионом через control plane (event hub). Поэтому следующие порты должны быть открыты для внешнего использования.
| Порт | Компонент | Использование |
|---|---|---|
| 9443 | HTTPS | Балансировщик нагрузки, работающий на узлах control plane. Используется в эндпоинте, которая указывает на внутренний API, находящийся в event hub’е, который используется для извлечения артефактов и информации из базы данных с помощью GW и TM в подрегионе. |
| 5672 | TCP | Каждый экземпляр control plane в настройке HA используется для установления JMS-соединения между компонентами субрегиона и event hub’ом, которое затем используется компонентами субрегиона для получения событий. |
Настройка субрегиона
Шаг 1: Настройте узлы шлюза
Следуйте инструкциям здесь, чтобы настроить шлюз субрегиона для соединения с Control Plane основного региона и менеджером трафика субрегиона. Обратите внимание на имена хостов, указанные ниже, при настройке узла шлюза.
Подключение шлюза к узлу Control Plane
Конфигурация для установки с Single Control Plane
# Key Manager configuration
[apim.key_manager]
service_url = "https://[main-region-cp-host]:${mgt.transport.https.port}/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://[main-region-cp-host]:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://main-region-cp-host:5672"]
Конфигурация для установки, содержащей Control Planes с High Availability
Key Manager configuration¶
[apim.key_manager]
service_url = "https://[main-region-cp-LB-host]/services/"
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
Event Hub configurations¶
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://main-region-cp-LB-host/services/"
event_listening_endpoints = ["tcp://main-region-cp-1-host:5672, tcp://main-region-cp-2-host:5672"]
Конфигурация для установки с единым менеджером трафика
[apim.throttling]
throttle_decision_endpoints = ["tcp://sub-region-1-tm-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://sub-region-1-tm-host:9611"]
traffic_manager_auth_urls = ["ssl://sub-region-1-tm-host:9711"]
Конфигурация для установки, содержащей Traffic Manager с High Availability
[apim.throttling]
throttle_decision_endpoints = ["tcp://sub-region-1-tm-1-host:5672", "tcp://sub-region-1-tm-2-host:5672"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://sub-region-1-tm-1-host:9611"]
traffic_manager_auth_urls = ["ssl://sub-region-1-tm-1-host:9711"]
[[apim.throttling.url_group]]
traffic_manager_urls = ["tcp://sub-region-1-tm-2-host:9611"]
traffic_manager_auth_urls = ["ssl://sub-region-1-tm-2-host:9711"]
Шаг 2: Настройте узлы Traffic Manager
Следуйте инструкциям здесь, чтобы настроить Traffic Manager субрегиона для подключения к Control Plane основного региона. Обратите внимание на имена хостов, указанные ниже, при настройке узла шлюза.
Настройте Traffic Manager для взаимодействия с Control Plane
Конфигурация для установки с Single Control Plane
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://main-region-cp-host:${mgt.transport.https.port}/services/"
event_listening_endpoints = ["tcp://main-region-cp-host:5672"]
Конфигурация для установки, содержащей Control Plane с High Availability
# Event Hub configurations
[apim.event_hub]
enable = true
username = "$ref{super_admin.username}"
password = "$ref{super_admin.password}"
service_url = "https://main-region-cp-LB-host/services/"
event_listening_endpoints = ["tcp://main-region-cp-1-host:5672", "tcp://main-region-cp-2-host:5672"]
Примечание. <main-region-cp-LB-host> следует заменить на хост балансировщика нагрузки (LB), который находится перед узлами плоскости управления основного региона в настройке HA, тогда как <main-region-cp-host> следует заменить на хост плоскости управления основного региона, поскольку узлы шлюза и узлы менеджера трафика субрегиона будут взаимодействовать с плоскостью управления основного региона напрямую в настройке единой плоскости управления.
















