gpe_mw_ansible.3scale_multitenant

以下是文本的中文翻译:

:scrollbar: :data-uri: :toc2: :linkattrs:

= 3scale多租户

:numbered:

== 概述

此工作负载在单个OCP命名空间中配置一个集中的3scale API管理器。

该工作负载仅需在每个OCP集群中执行一次。

它还允许在3scale API管理器安装中管理(即创建/删除)可配置数量的API _租户_。

在以下情况下,此角色可能会很有价值:

. 讲师主导培训(ILTs)、黑客马拉松和研讨会: + 考虑到在ILTs中需要3scale的X名学生,配置一个中央的多租户红帽3scale API管理器,每个学生分配一个自己的租户。 + 为学生提供对其分配租户的管理凭据。 + 这种方法可能比每个学生单独配置自己的3scale API管理器更为可取。

. 红帽3scale启用 + 一些学习目标可能是:

.. 演示在OCP上配置3scale。 .. 与外部SMTP提供商集成以发送电子邮件并促进用户自注册工作流程。 .. 使用OAuth2 _访问_和 _刷新_令牌调用3scale的REST管理API。

=== 先决条件

. 在本实验室中配置的3scale版本(v2.4)已知在OpenShift Container Platform 4.8上运行。 + 应在执行此ansible角色之前预先安装此版本的OpenShift。

. 使用与目标OCP集群相对应的oc工具版本,确保oc工具已作为集群管理员进行身份验证。

. 此ansible角色需要在执行此ansible的目标主机上安装lxml和openshift Python模块。即: +


dnf install python3-lxml

dnf install python3-openshift


== API管理器

此部分描述的ansible可以使用OpenShift 模板 进行3scale API管理器的配置。

=== 已知问题

. 在符合FIPS标准的OpenShift上运行API管理器。目标修复:3scale 2.12

=== 资源要求

此ansible角色允许根据以下ansible变量的值配置不同规模的3scale:is_production

. 资源利用:is_production = true .. 默认情况下,CPU和RAM的集群配额设置得相当高: ... CPU限制:30个核心 ... RAM限制:30 Gi .. 在3scale API管理器模板中定义的CPU和RAM限制也设置得相当高。 .. 这些默认设置被故意设置得很高以允许高吞吐量。

. 资源利用:is_production = false + 这是默认设置。 配置3scale所需的资源减少到大约12 Gi RAM和6个CPU。

=== SMTP提供商 您需要与一个SMTP提供商注册,以启用3scale API管理器发送电子邮件的功能。

在3scale中,SMTP设置是全局配置的,所有API 租户 都会使用。

以下是与该ansible角色测试过的一些提供_免费计划_的SMTP提供商:

. SocketLabs: 目前提供的免费计划允许每月发送2000封电子邮件。 . SendGrid: 目前提供的免费计划允许每天发送100封电子邮件

=== 环境变量 所有环境变量都是可选的。

如果未指定任何环境变量,则将配置一个3scale API管理器 _控制平面_,该控制平面期望至少有一个RWX PVC,并且不与SMTP提供商集成。

API管理器将配置在以下命名空间中: 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随后需要其对应的“system-storage” PVC的ReadWriteMany访问模式。 在用于存储的AWS EBS的API管理器部署到OCP 4.*时,ReadWriteMany访问模式不可用。 在这种情况下,将此环境变量设置为:true。 这样做可以窜改3scale控制平面模板,指定ReadWriteOnce(而不是ReadWriteMany)。 如果您将其设置为true,则不要尝试创建超过一个副本的system-app pod。

. SMTP配置以启用API管理器发送电子邮件 + 电子邮件被广泛用于支持3scale开发者门户的各种_注册流程_。 + SMTP提供商与3scale之间的集成是针对整个API管理器全局进行的。

.. smtp_userid + 可选。默认为null。如果为null,则不会配置3scale API管理器与SMTP提供商之间的集成。

.. smtp_host .. smtp_port .. smtp_authentication .. smtp_passwd .. smtp_domain

. adminEmailUser + 可选。默认值 = jdoe。

. adminEmailDomain + 可选。默认值 = redhat.com。

. RESUME_CONTROL_PLANE_GWS + 可选。默认值 = true。 + 3scale API管理器默认包括一个暂存和一个生产网关。 这两个网关通常不用于对请求应用API策略,因为“数据平面”(即:网关)往往部署在不同的环境中。 然而,暂存网关是系统提供者Web应用程序所需的API网关策略详细信息。 因此,默认值为:true。

. OCP_AMP_ADMIN_ID + 可选。默认 = api0。 + 拥有API管理器所在OCP命名空间的OCP用户。 此用户被分配了一个集群配额。

注意:这个OCP用户不一定需要存在。

=== 执行

. 配置API管理器: +


$ $ ansible-playbook playbooks/apimanager.yml

. 查看_3scale-mt-api0_命名空间中的所有API管理器路由: +


$ oc get route -n 3scale-mt-api0

. 可选:删除API管理器: +


$ ansible-playbook playbooks/apimanager.yml -e ACTION=uninstall

== API租户 随着3scale API管理器的配置,会创建一个_默认_租户。

如有需要,此部分描述的ansible可以创建更多租户。

=== 环境变量 所有环境变量都是可选的。

如果未指定任何环境变量,则将在API管理器中创建一个单独的租户(称为:_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,则将为API管理器所在的同一OCP集群中的每个相应租户创建带有API网关的OCP项目。

. ocp_user_name_base + 可选。默认值 = ocp。
+ 确定将有权访问其相应API管理相关项目的OCP用户的基本名称。 例如;如果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管理器和租户已经配置,并且需要特定于该租户的相应apicast网关,则此ansible将很有用。

=== 环境变量

. threescale_tenant_admin_accesstoken + 必填 + 值为创建3scale租户时的以下变量:_ADMIN_ACCESS_TOKEN_。 或者,您可以从3scale租户管理员UI中创建一个新的访问令牌:_齿轮图标 -> 个人设置 -> 令牌 -> 访问令牌 -> 添加访问令牌_。 或者,这可以是您3scale租户管理员的“提供者API密钥”。

. threescale_tenant_admin_hostname + 必填。 + 目标3scale租户的 provider admin 路由URL。 + 例如:t1-admin.apps.cluster-4663.4663.sandbox758.opentlc.com。

. gw_namespace + 可选。默认 = user1-gw。

. threescale_version + 可选。默认 = 3scale-2.10.0-GA-jbride。 + 其他标签列在这里

=== 执行:

. 部署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

. 创建Playbook: +


$ echo "

  • hosts: all become: false gather_facts: False vars_files: roles:
    • gpe_mw_ansible.3scale_multitenant " > /tmp/3scale_multitenant.yml

=== 配置3scale API管理器

3scale多租户应用的OCP命名空间将由以下用户拥有:{{OCP_AMP_ADMIN_ID}}。

{{OCP_AMP_ADMIN_ID}}将被分配一个集群配额以管理分配给3scale的限制和请求。

. 执行: +


API管理器配置

$ 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管理器的配置应完成。 . 由于API管理器是一个包含许多不同组件的大型应用程序,各组件按照顺序启动。 + 随后,ansible在每个配置过程的阶段进入等待循环。

=== 命名租户

除了能够创建一系列通用租户外,您还可以单独创建_命名_租户。


orgName=openbanking-prod

ocpAdminId=ocp01 # 拥有其相应API管理相关项目的OCP用户名称。

tenantAdminId=api01 # 将成为其API租户管理员(以及自己API网关管理员)的API用户名称。

create_gws_with_each_tenant=true # 如果为true,则将在API管理器所在的同一OCP集群中为每个相应租户创建带有API网关的OCP项目。

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"


==== 租户用户凭据

每个租户配置一个具有管理员权限的用户。

用户ID和密码是使用以下在defaults/main.yml中找到的ansible变量生成的:

. 租户管理员用户ID: {{ tenant_admin_user_name_base }} (例如:api01、api02、api03等)。 . 租户管理员密码: {{ tenantAdminPasswd }} 。

=== API管理器中的过时_WILDCARD_DOMAIN_ 状态 可能会遇到您的API管理器原始配置的DNS发生变化的情况。 具体来说,原始配置API管理器时使用的_WILDCARD_DOMAIN_参数的值不再有效。

一个可能出现这种情况的示例是,在Ravello中,3scale API管理器的原始配置将被捕获为Ravello _蓝图_。 在运行时,将从此Ravello 蓝图 实例化一个Ravello _应用程序_,并应用Ravello 应用程序 的实际运行时DNS。 此应用程序应用的DNS将与创建蓝图时使用的DNS不同。

为了解决与此过时状态相关的问题,需要执行以下操作:

. 更新API管理器命名空间中的所有路由。 . 更新API管理器的system-mysql数据库中的_system.accounts_表中的过时URL。 . 更改configmap: system-environment中的_THREESCALE_SUPERDOMAIN_变量的值:

如何更改上述内容的示例可以在这里找到。

关于项目

3scale Multitenant Automated Provisioning

安装
ansible-galaxy install gpe_mw_ansible.3scale_multitenant
许可证
Unknown
下载
221
拥有者
Ansible roles to support RHT middleware labs