3scale_multitenant
:scrollbar: :data-uri: :toc2: :linkattrs:
= 3scale_multitenant
:numbered:
== Обзор
Этот рабочий процесс предоставляет единственный централизованный 3scale API Manager в одном пространстве имен OCP.
Этот рабочий процесс необходимо выполнять только один раз для кластера OCP.
Он также позволяет управлять (то есть создавать/удалять) настраиваемым количеством API арендаторов в установке 3scale API Manager.
Эта роль может быть полезна в следующих ситуациях:
. Обучение с инструктором (ILT), Хакатоны и мастер-классы: + При наличии X числа студентов в ILT, которые требуют 3scale, предоставляется единый центральный многопользовательский Red Hat 3scale API Manager, где каждому студенту назначается свой собственный арендатор. + Студенту предоставляются административные учетные данные для его назначенного арендатора. + Этот подход может быть более предпочтительным, чем другой вариант, при котором каждый студент предоставляет свой собственный 3scale API Manager.
. Обучение Red Hat 3scale + Некоторые учебные цели могут быть:
.. Демонстрация развертывания 3scale на OCP. .. Интеграция с внешним поставщиком smtp для отправки электронных писем и упрощения процесса саморегистрации пользователей. .. Вызов REST Admin API 3scale с использованием токенов доступа и обновления OAuth2.
=== Предварительные требования
. Версия 3scale, развернутая в этой лаборатории (v2.4), известна тем, что работает на OpenShift Container Platform 4.8. + Эта версия OpenShift должна быть предварительно установлена перед выполнением этой ансибл роли.
. Используя версию утилиты oc, соответствующую вашему целевому кластеру OCP, убедитесь, что утилита oc уже аутентифицирована как cluster-admin.
. Эта ансибл роль требует установки модулей python lxml и openshift на целевом хосте, выполняющем этот ansible. То есть: +
dnf install python3-lxml
dnf install python3-openshift
== API Manager
Ansible, описанный в этом разделе, может развернуть 3scale API Manager с использованием шаблонов OpenShift.
=== Известные проблемы
. link:https://issues.redhat.com/browse/THREESCALE-5725[API Manager на FIPS совместимом OpenShift] . Целевой фикс: 3scale 2.12
=== Требования к ресурсам
Эта ансибл роль позволяет развертывание 3scale разных размеров в зависимости от значения следующей переменной ansible: is_production
. Использование ресурсов: is_production = true .. Квота кластера как для CPU, так и для RAM установлена довольно высоко по умолчанию: ... Ограничение по CPU: 30 ядер ... Ограничение по RAM: 30 Gi .. Ограничения по CPU и RAM, определенные в шаблоне 3scale API Manager, также установлены довольно высоко. .. Эти настройки по умолчанию установлены намеренно высокими, чтобы обеспечить высокую пропускную способность.
. Использование ресурсов: is_production = false + Это значение по умолчанию. Ресурсов, необходимых для развертывания 3scale, достаточно примерно 12 Gi RAM и 6 CPU.
=== SMTP Провайдеры Вам нужно зарегистрироваться у провайдера smtp, чтобы активировать функцию отправки писем в 3scale API Manager.
В 3scale настройки smtp конфигурируются глобально и используются всеми API арендаторами.
Некоторые провайдеры SMTP с бесплатными планами, с которыми была протестирована эта ансибл роль, перечислены ниже:
. SocketLabs: В настоящее время предлагает бесплатный план, позволяющий link:https://www.socketlabs.com/signup/[2000 электронных писем в месяц] . SendGrid: В настоящее время предлагает бесплатный план, позволяющий link:https://sendgrid.com/pricing/[100 писем в день]
=== Переменные окружения Все переменные окружения являются необязательными.
Если переменные окружения не указаны, то будет развернута управляющая плоскость 3scale API Manager, которая ожидает как минимум один RWX PVC и не интегрируется с SMTP провайдером.
API Manager будет развернут в следующем пространстве имен: 3scale-mt-api0.
. amp_master_passwd + Необязательно. Значение по умолчанию = master.
. master_access_token + Необязательно. Значение по умолчанию = wtqhhsly.
. default_tenant_access_token + Необязательно. Значение по умолчанию = 3832cnj371woiduh.
. is_production + Необязательно. Значение по умолчанию = false.
. use_rwo_for_cms + Необязательно. Значение по умолчанию = false. + Управляющая плоскость 3scale состоит из системы управления контентом (CMS), которая обычно масштабируется для повышения производительности в среде производства. Эта CMS требует режима доступа ReadWriteMany для соответствующего PVC "system-storage". В развертывании API Manager на OCP 4.*, где используется AWS EBS для хранения, режим доступа ReadWriteMany link:https://docs.openshift.com/container-platform/4.2/storage/understanding-persistent-storage.html#pv-access-modes_understanding-persistent-storage[недоступен]. В этом сценарии установите эту переменную окружения в: true. Это изменит шаблон управляющей плоскости 3scale, чтобы указать ReadWriteOnce (а не ReadWriteMany). Если вы установите это значение в true, не пытайтесь создать более одной реплики пода system-app.
. SMTP Конфигурации для активации возможности API Manager отправлять электронные письма + Электронные письма широко используются для поддержки различных процессов регистрации в портале разработчиков 3scale. + Интеграция между провайдером SMTP и 3scale выполняется глобально для всего API Manager.
.. smtp_userid + Необязательно. Значение по умолчанию = null. Если null, интеграция между 3scale API Manager и SMTP провайдером не будет настроена.
.. smtp_host .. smtp_port .. smtp_authentication .. smtp_passwd .. smtp_domain
. adminEmailUser + Необязательно. Значение по умолчанию = jdoe.
. adminEmailDomain + Необязательно. Значение по умолчанию = redhat.com.
. RESUME_CONTROL_PLANE_GWS + Необязательно. Значение по умолчанию = true. + API Manager 3scale по умолчанию включает промежуточный и производственный шлюз. Эти два GW обычно не используются для применения политик API к запросам, потому что "плоскость данных" (также известная как: шлюзы) обычно развертывается в другой среде. Однако промежуточный шлюз необходим приложению веб-системы для деталей политик API Gateway. Соответственно, значение по умолчанию равно: true.
. OCP_AMP_ADMIN_ID + Необязательно. Значение по умолчанию = api0. + Пользователь OCP, которому принадлежит пространство имен OCP, где находится API Manager. На этого пользователя назначена квота кластера. ПРИМЕЧАНИЕ: этот пользователь OCP не обязательно должен существовать.
=== Выполнение
. Развертывание API Manager: +
$ $ ansible-playbook playbooks/apimanager.yml
. Просмотр всех маршрутов API Manager в пространстве имен 3scale-mt-api0: +
$ oc get route -n 3scale-mt-api0
. Необязательно: Удалить API Manager: +
$ ansible-playbook playbooks/apimanager.yml -e ACTION=uninstall
== API Арендатор С развертыванием 3scale API Manager создается по умолчанию арендатор.
При необходимости ansible, описанный в этом разделе, может создать дополнительных арендаторов.
=== Переменные окружения Все переменные окружения являются необязательными.
Если переменные окружения не указаны, то в API Manager будет создан единственный арендатор (названный: ocp01), с администратором арендатора: api01 / admin. Соответствующие шлюзы также будут созданы в пространстве имен: ocp01.
. orgName + Необязательно: Значение по умолчанию = ocp01. + Указывает имя арендатора, а также имя пространства имен, где будут развернуты соответствующие шлюзы. + Полезно, если цель состоит в том, чтобы создать единственного арендатора с конкретным именем.
. tenant_admin_user_name_base + Необязательно. Значение по умолчанию = api. + Базовое имя пользователей API, которые будут администраторами своих арендаторов API (и администраторами своих собственных шлюзов API). То есть, если желаемые имена пользователей API: api01, api02, api03 ......., тогда значение этой переменной должно быть: "api".
. tenantAdminPasswd + Необязательно: Значение по умолчанию = admin.
. create_gws_with_each_tenant + Необязательно: Значение по умолчанию = true. + Если true, то для каждого соответствующего арендатора в том же кластере OCP, где находится API Manager, будет создан проект OCP с API шлюзами.
. ocp_user_name_base + Необязательно. Значение по умолчанию = ocp. + Определяет базовое имя пользователей OCP, которые будут иметь доступ к соответствующим проектам, связанным с управлением API. То есть, если имена пользователей OCP: user01, user02, user03 ......., то значение этой переменной должно быть: "user".
. START_TENANT + Необязательно. Значение по умолчанию = 1.
. END_TENANT + Необязательно. Значение по умолчанию = 1.
. use_padded_tenant_numbers + Необязательно. Значение по умолчанию = true. + Если создаются последовательные общие арендаторы, укажите, должны ли имена арендаторов включать дополненный номер или нет. То есть: ocp01, ocp02 ... ocp10 или ocp1, ocp2 ... ocp10. Значение по умолчанию - true. Значение по умолчанию соответствует использованию дополненных номеров в: https://github.com/gpe-mw-ansible-org/rh-sso-multi-realm.
=== Выполнение
. Проведение: +
$ ansible-playbook playbooks/api_tenant.yml
. После завершения развертывания арендатора вы увидите сообщения, похожие на следующие, в конце стандартного вывода ansible: +
ok: [localhost] => { "msg": [ "tenant_output_dir: /home/jbride/provisioning_output/3295.openshift.opentlc.com/tenants_3scale-mt-api0", "tenant_provisioning_log_file = /home/jbride/provisioning_output/3295.openshift.opentlc.com/tenants_3scale-mt-api0/tenant_provisioning.log", "tenant_provisioning_results_file = /home/jbride/provisioning_output/3295.openshift.opentlc.com/tenants_3scale-mt-api0/tenant_info_file_1_2.txt", "start and end tenants = 1 2", "create API Gateways for each tenant = true" ] }
. Файл tenant_provisioning_results_file содержит данные учетных записей и URL каждого развернутого арендатора. + Это файл с разделителями табуляции, который можно импортировать в Google Таблицы или LibreOffice Calc.
== API Шлюзы
Если ваш API Manager и арендаторы уже развернуты, и желательны соответствующие шлюзы apicast, специфичные для этого арендатора, то этот ansible будет полезен.
=== Переменные окружения
. threescale_tenant_admin_accesstoken + Обязательно. + Значение следующей переменной, когда был создан арендатор 3scale: ADMIN_ACCESS_TOKEN. В качестве альтернативы, новый токен доступа можно создать из пользовательского интерфейса администратора арендатора 3scale: Gear Icon -> Personal Settings -> Tokens -> Access Tokens -> Add Access Token. В качестве альтернативы, это может быть "Provider API key" вашего администратора арендатора 3scale.
. threescale_tenant_admin_hostname + Обязательно. + URL маршрута поставщика администратора целевого арендатора 3scale. + То есть: t1-admin.apps.cluster-4663.4663.sandbox758.opentlc.com.
. gw_namespace + Необязательно. Значение по умолчанию = user1-gw.
. threescale_version + Необязательно. Значение по умолчанию = 3scale-2.10.0-GA-jbride. + Другие теги перечислены link:https://github.com/3scale/3scale-amp-openshift-templates/tags[здесь].
=== Выполнение:
. Развертывание шлюзов apicast: +
$ $ ansible-playbook playbooks/api_gw.yml
-e threescale_tenant_admin_accesstoken=$threescale_tenant_admin_accesstoken
-e threescale_tenant_admin_hostname=$threescale_tenant_admin_hostname
== Старое
=== Настройка Ansible
. Установите эту роль локально: +
$ ansible-galaxy install gpe_mw_ansible.3scale_multitenant --force -p $HOME/.ansible/roles
. Создайте плейбук: +
$ echo "
- hosts: all
become: false
gather_facts: False
vars_files:
roles:
- gpe_mw_ansible.3scale_multitenant " > /tmp/3scale_multitenant.yml
=== Проведение 3scale API Manager
Пространство имен OCP для многопользовательского приложения 3scale будет принадлежать следующему пользователю: {{OCP_AMP_ADMIN_ID}}.
{{OCP_AMP_ADMIN_ID}} будет назначен на квоту кластера, чтобы управлять лимитами и запросами, назначенными 3scale.
. Выполнение: +
Provision API manager
$ ansible-playbook playbooks/apimanager.yml \
-e"use_rwo_for_cms=$use_rwo_for_cms"
-e"smtp_port=$smtp_port"
-e"smtp_authentication=$smtp_authentication"
-e"smtp_host=$smtp_host"
-e"smtp_userid=$smtp_userid"
-e"smtp_passwd=$smtp_passwd"
. После примерно 5 минут развертывание API Manager должно завершиться. . Поскольку API Manager является большим приложением с множеством различных компонентов, компоненты запускаются в упорядоченном режиме. + В последствии ansible помещает себя в цикл ожидания на каждом этапе процесса развертывания.
=== Именованные арендаторы
В качестве альтернативы возможности создать последовательность общих арендаторов, можно создать именованного арендатора на индивидуальной основе.
orgName=openbanking-prod
ocpAdminId=ocp01 # имя пользователя OCP, который будет иметь доступ к соответствующим проектам управления API.
tenantAdminId=api01 # имя пользователя API, который станет администратором своих арендаторов API (и администраторами своих собственных API шлюзов).
create_gws_with_each_tenant=true # если true, то для каждого соответствующего арендатора в одном и том же кластере OCP, где находится API Manager, будет создан проект OCP с API шлюзами.
gw_project_name=$orgName-gw.
$ ansible-playbook -i localhost, -c local /tmp/3scale_multitenant.yml
-e"ACTION=tenant_mgmt"
-e"API_MANAGER_NS=$API_MANAGER_NS"
-e"adminEmailUser=$adminEmailUser"
-e"adminEmailDomain=$adminEmailDomain"
-e"create_gws_with_each_tenant=$create_gws_with_each_tenant"
-e"orgName=$orgName"
-e"ocpAdminId=$ocpAdminId"
-e"tenantAdminId=$tenantAdminId"
-e"gw_project_name=$gw_project_name"
-e"rht_service_token_user=$rht_service_token_user"
-e"rht_service_token_password=$rht_service_token_password"
==== Учетные данные пользователя арендатора
Каждому арендатору назначается пользователь с административными привилегиями.
Имя пользователя и пароль генерируются с использованием следующих переменных ansible, найденных в defaults/main.yml:
. Имя пользователя администратора арендатора: {{ tenant_admin_user_name_base }} (например: api01, api02, api03 ...., api10). . Пароль администратора арендатора: {{ tenantAdminPasswd }}.
=== Устаревшее состояние WILDCARD_DOMAIN в API Manager Могут быть ситуации, когда DNS вашего первоначально развернутого API Manager изменяется. В частности, значение параметра WILDCARD_DOMAIN, использованное при первоначальном развертывании вашего API Manager, больше не является действительным.
Примером сценария, когда это может произойти, является Ravello, где первоначальное развертывание API Manager 3scale будет зафиксировано как Blueprint Ravello. Во время выполнения приложение Ravello инстанцируется из этого blueprint, и фактический DNS рабочего времени для приложения Ravello применяется. Этот DNS, примененный к рабочему приложению, будет отличаться от DNS, первоначально использованного при создании blueprint.
Чтобы исправить проблемы, связанные с этим устаревшим состоянием, необходимо выполнить следующее:
. Обновить все маршруты в пространстве имен вашего API Manager. . Обновить устаревшие URL-адреса, найденные в таблице system.accounts в базе данных system-mysql API Manager. . Изменить значение переменной THREESCALE_SUPERDOMAIN в конфигурационной карте: system-environment.
Примеры того, как внести вышеуказанные изменения, найдены link:https://gist.github.com/jbride/be32113707418cb43d73c9ef28a09b9d[здесь].
ansible-galaxy install gpe-mw-ansible-org/3scale_multitenant