Менеджер API WSO2 с F5

Мы пытаемся настроить кластер диспетчера API WSO2 с F5 в качестве балансировщика нагрузки, и у нас возникли проблемы с наличием F5 в миксе. Один экземпляр менеджера установлен на сервере (порт сервера/администратора: node1.xyz.com:9443) с помощью клавиши F5 (manager.xyz.com, который сопоставляется с node1.xyz.com:9443).

После нескольких проб и ошибок мы обнаружили, что проблема связана с конфигурацией URL-адреса диспетчера ключей API в рабочем экземпляре. Использование прямого URL-адреса сервера/порта (например, node1.xyz.com:9443) работает нормально. Однако когда мы используем URL-адрес F5 (например, manager.xyz.com), это приводит к исключению, приведенному ниже. Любые мысли о том, что может быть неправильным или отсутствующим?

В конечном итоге мы хотим иметь два запущенных экземпляра менеджера. Итак, нам нравится, чтобы эта настройка F5 работала так, чтобы рабочие экземпляры могли указывать на F5, а не на отдельный узел менеджера.

Спасибо за помощь в продвижении!

Конфигурация рабочего узла, которая работает:

<APIKeyManager>
        <!--
            Server URL of the API key manager
        -->
<ServerURL>https://node1.xyz.com:9443${carbon.context}/services/</ServerURL>

Конфигурация в рабочем узле, вызывающая ошибку F5:

<APIKeyManager>
        <!--
            Server URL of the API key manager
        -->
<ServerURL>https://manager.xyz.com${carbon.context}/services/</ServerURL>

Исключение при использовании F5:

TID: [0] [AM] [2014-12-11 16:03:37,697] ERROR {org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler} -  API authentication failure {org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler}
org.wso2.carbon.apimgt.gateway.handlers.security.APISecurityException: Error while accessing backend services for API key validation
        at org.wso2.carbon.apimgt.gateway.handlers.security.thrift.ThriftAPIDataStore.getAllURITemplates(ThriftAPIDataStore.java:99)
        at org.wso2.carbon.apimgt.gateway.handlers.security.APIKeyValidator.getAllURITemplates(APIKeyValidator.java:516)
        at org.wso2.carbon.apimgt.gateway.handlers.security.APIKeyValidator.doGetAPIInfo(APIKeyValidator.java:368)
        at org.wso2.carbon.apimgt.gateway.handlers.security.APIKeyValidator.findMatchingVerb(APIKeyValidator.java:343)
        at org.wso2.carbon.apimgt.gateway.handlers.security.APIKeyValidator.getResourceAuthenticationScheme(APIKeyValidator.java:172)
        at org.wso2.carbon.apimgt.gateway.handlers.security.oauth.OAuthAuthenticator.authenticate(OAuthAuthenticator.java:93)
        at org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler.handleRequest(APIAuthenticationHandler.java:92)

person Ram    schedule 15.12.2014    source источник


Ответы (1)


Несколько непосредственных вещей, которые вы могли бы проверить -

  • Убедитесь, что элементы <HostName> и <MgtHostName> в KeyManager_HOME/repository/conf/carbon.xml установлены на имя хоста F5. т.е. "manager.xyz.com"
  • Добавьте атрибут proxyPort=443 к соединителю https в KeyManager_HOME/repository/conf/tomcat/catalina-server.xml. При желании также настройте http-коннектор.

Если вы не установили два вышеуказанных параметра, перенаправления http 302 завершатся ошибкой, что может объяснить ваш сценарий. И мы просим пользователей настроить ProxyPassReverse в дополнение к ProxyPass при использовании Apache HTTPD в качестве обратного прокси-сервера. Я не уверен, что эквивалентная конфигурация для F5.


Если вышеуказанное не помогло, нам нужно знать, как выглядит ваше развертывание, чтобы лучше помочь вам. т.е. как вы кластеризуете узлы. У вас есть отдельный шлюз API, экземпляры диспетчера ключей и т. д.

Я думаю, вам стоит изучить руководство по кластеру WSO2, чтобы лучше понять логику кластеризации.

С APIM вы можете иметь отдельные узлы Keymanager, API-шлюза (и хранилища API, издателя API). Разделение рабочих и менеджеров применимо только к шлюзу API. И Для диспетчера ключей не требуется разделения рабочих и менеджеров. Таким образом, вы можете подумать, что все менеджеры ключей API узлы являются гибридными узлами, которые обеспечивают функции как менеджера, так и работника.

Мы можем видеть дальше, если у вас нет отдельных менеджеров ключей.

person Kasun Gajasinghe    schedule 19.12.2014
comment
Спасибо Касун. Диспетчер ключей работает как часть магазина и издателя. Таким образом, нет никаких распределенных развертываний. Прокси-порты MgtHost и tomcat настраиваются в соответствии с вашим руководством по кластеру Highlights/API. Я вижу более новую версию API Manager 1.8, и документация по кластеризации в этой версии намного лучше. Повторим попытку с чистой установкой и сообщим вам, как все прошло. Чтобы немного пояснить, как мы настраиваем F5, мы хотим, чтобы весь трафик порта 9443 (ELB) направлялся на одно имя F5/DNS, а трафик порта NIO — на другое имя F5/DNS. - person Ram; 23.12.2014
comment
Однако один вопрос: требуется ли ELB, который поставляется с APIM, или F5 может взять на себя эту роль? - person Ram; 23.12.2014
comment
- Чистая настройка с версией 1.8, похоже, работает, за исключением следующего: (1) URL-адрес отзыва в apimanager.xml должен быть локальным IP-адресом вместо F5 для обновления токена. (2) Добавление новых API необходимо было вручную синхронизировать с другими узлами (файлы в synapse-configs/default/api). Есть ли способ автоматической синхронизации? (3)APIM добавляет номер порта (например, 9443), когда корневой контекст по умолчанию используется через F5 (хотя порт прокси-сервера tomcat настроен). Если F5 — manager.xyz.com, то manager.xyz.com/publisher работает нормально. Однако, manager.xyz.com/ перенаправляет на manager.xyz.com:9443/publisher. - person Ram; 30.12.2014
comment
Позвольте мне попытаться ответить на вопросы, как я вижу. 2) Вам необходимо использовать синхронизатор развертывания для синхронизации API между узлами. Для этого есть отдельная страница в руководстве по кластеру. 3) Это интересно. Я только что проверил это с apache httpd, и, похоже, он отлично работает для меня. Я надеюсь, что вы установили proxyPort для обоих коннекторов в файле catalina-server.xml. - person Kasun Gajasinghe; 31.12.2014
comment
Если у вас уже есть балансировщик нагрузки, вы можете его использовать. Вам не нужно включать ELB в картину. - person Kasun Gajasinghe; 31.12.2014