2.4. 从 WildcardRouter 迁移到 Zync 路由管理


在 3scale 2.6 中,WildcardRouter 组件和通配符 OpenShift 路由已被删除,现在作为由 Zync 子系统管理的单个 OpenShift 路由创建。此流程详细介绍了将路由管理从 WildcardRouter 迁移到 Zync。

此时,所有 3scale 镜像都已升级到 3scale 2.6。创建和删除与 3scale 服务和租户对应的 OpenShift 路由由 Zync 子系统自动管理。此外,通过添加新的 OpenShift 元素(在上一节中完成)提供了需要这样做的所有新 Zync 基础架构。

要将 OpenShift 路由管理从 WildcardRouter 迁移到 Zync,必须执行与 OpenShift 路由和通配符路由相关的旧 3scale 租户和服务,然后必须执行 Zync 的现有服务和租户强制重新评估。这使得 Zync 将创建与当前具有等效的路由。

修改公共基本 URL 时,会在 system-app 中触发事件,并通过存储在 system-redis 中的作业队列通知 system-sidekiq。然后,作业会在后台处理,并发送到 zync,它会检查数据是否已或没有存在于 zync-db 中。如果检测到更改,它将通过在 zync-que 中处理的作业创建新路由。

重要

在执行任何操作前,如果您手动将 SSL 证书安装到某些路由中,则必须复制分配给路由的证书,并注意每个路由被分配到的证书。您需要将它们安装到由 Zync 创建的新等效路由中,以便保留证书功能。

注意
  • 默认情况下,通过 hosted 选项迁移您的服务。
  • 公共基本 URL 将自动填充,路由由 Zync 创建。
  • 只有在使用选项 self_managed 配置外部 APIcast 网关时才需要步骤 1。
  • 如果您选择了 3scale_managed 选项,则路由由 Zync 自动管理。

流程

  1. 假设 Zync 不管理外部网关的路由,您可以按照其中一个建议的替代选择来修改由 Zync 管理的每个服务的部署选项:

    • 在 3scale 中:

      1. 进入 Integration 页面,点 edit integration settings
      2. 选择正确的部署选项,并在有时保存您的更改。
    • 使用 API:

      1. 使用带有访问令牌 (ACCESS_TOKEN) 和租户端点 (TENANT_URL) 的服务标识符 (ID) 更新服务。

        $ curl -XPUT "${TENANT_URL}/admin/api/services/${ID}.json" -d deployment_option=self_managed -d access_token="${ACCESS_TOKEN}"

        另外,如果您使用 APIcast 托管,可以使用下面的命令:

        $ curl -XPUT "${TENANT_URL}/admin/api/services/${ID}.json" -d deployment_option=hosted -d access_token="${ACCESS_TOKEN}"
      2. 对于每个租户的每个服务,通过 3scale 或 API 修改 deployment_option 字段:

        • 这些是您可以将 deployment_option 设置为 self_managed 的情况:

          • APIcast 链接到 OpenShift 中的自定义路由。
          • APIcast 在 OpenShift 之外托管。
          • APICAST_PATH_ROUTING 设置为 true
        • 在其他情况下,将 deployment_option 设置为托管的
  2. 在可能的现有路由中,3scale 在 2.5 中自动创建一些默认路由。首先删除它们:

    $ oc delete route system-master
    $ oc delete route system-provider-admin
    $ oc delete route system-developer
    $ oc delete route api-apicast-production
    $ oc delete route api-apicast-staging
    • 如果您使用 WILDCARD_POLICY=Subdomain 部署 3scale 2.5,则必须删除通配符路由:

      $ oc delete route apicast-wildcard-router
    • 否则,如果您在没有 WILDCARD_POLICY=Subdomain 的情况下部署 3scale 2.5,您必须删除为 3scale 租户和服务手动创建的路由,以避免重复 Zync 将创建的路由。

此时,所有与服务和租户相关的路由都必须已被删除。现在,您将由 Zync 创建对等路由:

  1. 使用 Zync 强制重新同步所有 3scale 服务和租户 OpenShift 路由:

    $ SYSTEM_SIDEKIQ_POD=$(oc get pods | grep sidekiq | awk '{print $1}')
  2. 检查 SYSTEM_SIDEKIQ_POD 环境变量结果是否不为空:

    $ echo ${SYSTEM_SIDEKIQ_POD}
  3. 最后,执行重新同步:

    $ oc exec -it ${SYSTEM_SIDEKIQ_POD} -- bash -c 'bundle exec rake zync:resync:domains'

    您将看到这种样式的输出,其中包含有关通知到系统的信息:

    $ No valid API key has been set, notifications will not be sent
    ActiveMerchant MODE set to 'production'
    [Core] Using http://backend-listener:3000/internal/ as URL
    OpenIdAuthentication.store is nil. Using in-memory store.
    [EventBroker] notifying subscribers of Domains::ProviderDomainsChangedEvent 59a554f6-7b3f-4246-9c36-24da988ca800
    [EventBroker] notifying subscribers of ZyncEvent caa8e941-b734-4192-acb0-0b12cbaab9ca
    Enqueued ZyncWorker#d92db46bdba7a299f3e88f14 with args: ["caa8e941-b734-4192-acb0-0b12cbaab9ca", {:type=>"Provider", :id=>1, :parent_event_id=>"59a554f6-7b3f-4246-9c36-24da988ca800", :parent_event_type=>"Domains::ProviderDomainsChangedEvent", :tenant_id=>1}]
    [EventBroker] notifying subscribers of Domains::ProviderDomainsChangedEvent 9010a199-2af1-4023-9b8d-297bd618096f
    …

    在强制 Zync 重新评估后,为所有现有租户和服务创建新路由。根据服务和租户的数量,路由创建可能需要几分钟时间。

    在进程结束时,您将看到创建:

    • 一个主管理门户路由.

      对于每个 3scale 租户两个路由,会创建:

    • 租户的管理门户路由。
    • 租户开发人员门户路由。

      对于每个 3scale 服务创建两个路由:

    • 与服务对应的 APIcast staging 路由。
    • 与服务对应的 APIcast 生产路由。
  4. 验证是否为所有现有服务和租户创建了上述所有预期的路由。您可以通过运行以下命令查看所有路由:

    $ oc get routes

    如上一命令的输出中显示的 host/port 字段必须是路由的 URL。

    • 如果您部署了 3scale 2.5,将 WILDCARD_POLICY 设置为 Subdomain,则所有新路由都必须具有与旧 OpenShift 通配符Domain 相同的基本 WildcardDomain。
    • 否则,如果您在没有 WILDCARD_POLICY=Subdomain 的情况下部署 3scale 2.5,新路由必须具有与您删除的旧路由相同的主机,包括在 2.5 发行版中 3scale 自动创建的那些。
  5. 最后,如果您为旧通配符路由使用自定义 SSL 证书,或者旧的手动创建的路由,请将它们安装到 Zync 创建的新路由中。您可以通过 OpenShift Web 面板编辑路由,并将证书/添加到其中。
  6. 验证在迁移仍然可使用新路由解析前存在的服务和租户。要做到这一点执行以下操作:

    1. 解析与迁移前已存在的 3scale 服务关联的现有 APIcast 生产 URL 的路由。
    2. 解析与迁移前已存在的 3scale 服务关联的现有 APIcast staging URL 的路由。
    3. 解析在迁移前已存在的租户的路由。
  7. 验证新的 Zync 功能是否正常工作时,请确认在创建新租户和服务时是否生成了新的路由。要做到这一点执行以下操作:

    1. 从 'master' 面板创建一个新租户,并验证与它关联的新路由后出现在 OpenShift 中。
    2. 在其中一个现有租户中创建一个新服务,并验证与它关联的新路由出现在 OpenShift 中后。
  8. 删除 apicast-wildcard-router 服务:

    $ oc delete service apicast-wildcard-router
  9. 删除已弃用的 WildcardRouter 子系统:

    $ oc delete ImageStream amp-wildcard-router
    $ oc delete DeploymentConfig apicast-wildcard-router

    执行所有列出的步骤后,基于模板的部署中的 3scale 从 2.6 升级到 2.7 现已完成。

2.4.1. 现有 DeploymentConfig 的额外步骤

2.4.1.1. backend-redis DeploymentConfig

如果当前 3scale 安装中存在 backend-redis DeploymentConfig,请修补 backend-redis 镜像流:

$ oc patch imagestream/backend-redis --type=json -p '[{"op": "add", "path": "/spec/tags/-", "value": {"annotations": {"openshift.io/display-name": "Backend 2.7 Redis"}, "from": { "kind": "DockerImage", "name": "registry.redhat.io/rhscl/redis-32-rhel7:3.2"}, "name": "2.7", "referencePolicy": {"type": "Source"}}}]'
$ oc patch imagestream/backend-redis --type=json -p '[{"op": "add", "path": "/spec/tags/-", "value": {"annotations": {"openshift.io/display-name": "Backend Redis (latest)"}, "from": { "kind": "ImageStreamTag", "name": "2.7"}, "name": "latest", "referencePolicy": {"type": "Source"}}}]'
  • 此补丁更新了 backend-redis 镜像流,使其包含 2.7 标签。使用以下命令,如果 tags 列显示了 2.7,您可以确认标签已创建:
$ oc get is backend-redis
  • 如果镜像上有新的更新,此补丁还可能触发 backend-redis DeploymentConfig 的重新部署。如果发生这种情况,请等待新容器集重新部署并就绪,并且旧容器集终止。

继续 升级 3scale 镜像

2.4.1.2. system-redis DeploymentConfig

如果当前 3scale 安装中存在 system-redis DeploymentConfig,请修补 system-redis 镜像流:

$ oc patch imagestream/system-redis --type=json -p '[{"op": "add", "path": "/spec/tags/-", "value": {"annotations": {"openshift.io/display-name": "System 2.7 Redis"}, "from": { "kind": "DockerImage", "name": "registry.redhat.io/rhscl/redis-32-rhel7:3.2"}, "name": "2.7", "referencePolicy": {"type": "Source"}}}]'
$ oc patch imagestream/system-redis --type=json -p '[{"op": "add", "path": "/spec/tags/-", "value": {"annotations": {"openshift.io/display-name": "System Redis (latest)"}, "from": { "kind": "ImageStreamTag", "name": "2.7"}, "name": "latest", "referencePolicy": {"type": "Source"}}}]'
  • 此补丁更新了 system-redis 镜像流,使其包含 2.7 标签。使用以下命令,如果 tags 列显示了 2.7,您可以确认标签已创建:
$ oc get is system-redis
  • 如果镜像有新的更新,此补丁还可能触发 system-redis DeploymentConfig 的重新部署。如果发生这种情况,请等待新容器集重新部署并就绪,并且旧容器集终止。

继续 升级 3scale 镜像

2.4.1.3. system-mysql DeploymentConfig

如果当前 3scale 安装中存在 system-mysql DeploymentConfig,请修补 system-mysql 镜像流:

$ oc patch imagestream/system-mysql --type=json -p '[{"op": "add", "path": "/spec/tags/-", "value": {"annotations": {"openshift.io/display-name": "System 2.7 MySQL"}, "from": { "kind": "DockerImage", "name": "registry.redhat.io/rhscl/mysql-57-rhel7:5.7"}, "name": "2.7", "referencePolicy": {"type": "Source"}}}]'
$ oc patch imagestream/system-mysql --type=json -p '[{"op": "add", "path": "/spec/tags/-", "value": {"annotations": {"openshift.io/display-name": "System MySQL (latest)"}, "from": { "kind": "ImageStreamTag", "name": "2.7"}, "name": "latest", "referencePolicy": {"type": "Source"}}}]'
  • 此补丁更新了 system-mysql 镜像流,使其包含 2.7 标签。使用以下命令,如果 tags 列显示了 2.7,您可以确认标签已创建:
$ oc get is system-mysql
  • 如果镜像上有新的更新,此补丁还可能触发 system-mysql DeploymentConfig 的重新部署。如果发生这种情况,请等待新容器集重新部署并就绪,并且旧容器集终止。

继续 升级 3scale 镜像

2.4.1.4. system-postgresql DeploymentConfig

如果当前 3scale 安装中存在 system-postgresql DeploymentConfig,请修补 system-postgresql 镜像流:

$ oc patch imagestream/system-postgresql --type=json -p '[{"op": "add", "path": "/spec/tags/-", "value": {"annotations": {"openshift.io/display-name": "System 2.7 PostgreSQL"}, "from": { "kind": "DockerImage", "name": "registry.redhat.io/rhscl/postgresql-10-rhel7"}, "name": "2.7", "referencePolicy": {"type": "Source"}}}]'
$ oc patch imagestream/system-postgresql --type=json -p '[{"op": "add", "path": "/spec/tags/-", "value": {"annotations": {"openshift.io/display-name": "System PostgreSQL (latest)"}, "from": { "kind": "ImageStreamTag", "name": "2.7"}, "name": "latest", "referencePolicy": {"type": "Source"}}}]'
  • 此补丁更新了 system-postgresql 镜像流,使其包含 2.7 标签。使用以下命令,如果 tags 列显示了 2.7,您可以确认标签已创建:
$ oc get is system-postgresql
  • 如果镜像有新的更新,此补丁还可能触发 system-postgresql DeploymentConfig 的重新部署。如果发生这种情况,请等待新容器集重新部署并就绪,并且旧容器集终止。

继续 升级 3scale 镜像

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.