第 8 章 在 OpenShift 上的 Fuse 上运行 SOAP 到 REST bridge quickstart for Spring Boot 2
此快速入门演示了如何使用 Camel 的 REST DSL 来公开后端 SOAP API。简单的 camel 路由可以桥接 REST 调用旧 SOAP 服务。安全性适用于由 RH SSO 支持的 REST 端点和 SOAP 端点。前端 REST API 通过 OAuth 和 OpenID Connect 保护,客户端将使用 Resource Owner Password Credentials OAuth2 模式从 RH SSO 获取 JWT 访问令牌,并使用此令牌访问 REST 端点。
先决条件
- 已安装并配置了 OCP 4.1 或更高版本。
- 已安装 RH SSO 7.4 或更高版本。
- 已安装 3Scale 2.8 或更高版本。
-
您已将身份验证配置为
registry.redhat.io
。如需更多信息,请参阅配置 Red Hat Container Registry 身份验证。
步骤
以下小节解释了如何在 OpenShift 上的 Fuse 上运行和部署 SOAP 到 REST 网桥快速启动。
- 启动 OpenShift 服务器。由于我们需要安装 RH SSO 镜像(2 个 pod)和 3Scale 镜像(15 个 pod),因此我们需要在强大的机器上启动 OpenShift 服务器,选项 --memory 8GB --cpus 4。我们还需要在过期时间内发布安全令牌,因此我们还需要添加 timezone 选项。确保 Openshift 集群使用与本地机器相同的时区(默认为使用 UTC 时区)。
将
cluster-admin
角色添加到用户developer
。$ oc login -u system:admin $ oc adm policy add-cluster-role-to-user cluster-admin developer $ oc login -u developer $ oc project openshift
此快速入门部署在
openshift
命名空间中(这是涉及的模板的默认配置)和 RH SSO 镜像的需求,因此我们需要向用户开发人员
添加cluster-admin
角色。创建一个机密,并将它链接到
serviceaccounts
。$ oc create secret docker-registry camel-bridge --docker-server=registry.redhat.io \ --docker-username=USERNAME \ --docker-password=PASSWORD \ --docker-email=EMAIL_ADDRESS $ oc secrets link default camel-bridge --for=pull $ oc secrets link builder camel-bridge
添加 RH SSO 镜像流,并使用模板
sso74-x509-postgresql-persistent
安装 RH SSO。$ for resource in sso74-image-stream.json \ sso74-https.json \ sso74-postgresql.json \ sso74-postgresql-persistent.json \ sso74-x509-https.json \ sso74-x509-postgresql-persistent.json do oc create -f \ https://raw.githubusercontent.com/jboss-container-images/redhat-sso-7-openshift-image/sso74-dev/templates/${resource} done $ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default $ oc new-app --template=sso74-x509-postgresql-persistent
验证 RH SSO 镜像可从
openshift
命名空间可用,然后使用模板sso74-x509-postgresql-persistent
安装 RH SSO。此模板可以平均保存 RH SSO 配置,因此配置会在 Openshift 服务器重启后保留。在服务器上成功安装了 RH SSO 镜像后,您可以看到控制台上的输出,如下所示:
A new persistent RH-SSO service (using PostgreSQL) has been created in your project. The admin username/password for accessing the master realm via the RH-SSO console is tprYtXP1/nEjf7fojv11FmhJ5eaqadoh0SI2gvlls. The username/password for accessing the PostgreSQL database "root" is userqxe/XNYRjL74CrJEWW7HiSYEdH5FMKVSDytx. The HTTPS keystore used for serving secure content, the JGroups keystore used for securing JGroups communications, and server truststore used for securing RH-SSO requests were automatically created via OpenShift's service serving x509 certificate secrets. * With parameters: * Application Name=sso * Custom RH-SSO Server Hostname= * JGroups Cluster Password=1whGRnsAWu162u0e4P6jNpLn5ysJLWjg # generated * Database JNDI Name=java:jboss/datasources/KeycloakDS * Database Name=root * Datasource Minimum Pool Size= * Datasource Maximum Pool Size= * Datasource Transaction Isolation= * PostgreSQL Maximum number of connections= * PostgreSQL Shared Buffers= * Database Username=userqxe # generated * Database Password=XNYRjL74CrJEWW7HiSYEdH5FMKVSDytx # generated * Database Volume Capacity=1Gi * ImageStream Namespace=openshift * RH-SSO Administrator Username=tprYtXP1 # generated * RH-SSO Administrator Password=nEjf7fojv11FmhJ5eaqadoh0SI2gvlls # generated * RH-SSO Realm= * RH-SSO Service Username= * RH-SSO Service Password= * PostgreSQL Image Stream Tag=10 * Container Memory Limit=1Gi
请注意用于访问 RH SSO 管理控制台的 Username/Password。例如,
* RH-SSO Administrator Username=tprYtXP1 # generated * RH-SSO Administrator Password=nEjf7fojv11FmhJ5eaqadoh0SI2gvlls # generated
在 3scale 项目中安装 3scale 模板。
$ oc new-project 3scale $ oc create secret docker-registry threescale-registry-auth --docker-server=registry.redhat.io --docker-server=registry.redhat.io \ --docker-username=USERNAME \ --docker-password=PASSWORD \ --docker-email=EMAIL_ADDRESS $ oc secrets link default threescale-registry-auth --for=pull $ oc secrets link builder threescale-registry-auth $ oc new-app --param WILDCARD_DOMAIN="OPENSHIFT_IP_ADDR.nip.io" -f https://raw.githubusercontent.com/3scale/3scale-amp-openshift-templates/2.8.0.GA/amp/amp-eval-tech-preview.yml
openshift 上的 3scale 安装将启动 15 个 pod,因此需要为 3scale 创建新项目。您还需要一个新的
threescale-registry-auth
(使用此名称创建 secret,因为它以 3scale 模板编写)secret 用于 3scale。您可以重复使用 camel-bridge secret 中的 USERNAME/PASSWORD。我们有意使用amp-eval-tech-preview.yml
模板,因为它没有明确指定硬件资源,因此可以在本地机器/laptop 上运行。在 Openshift 上成功安装了 3scale 模板后,您可以看到控制台上的输出,如下所示:
3scale API Management --------- 3scale API Management main system (Evaluation) Login on https://3scale-admin.192.168.64.33.nip.io as admin/b6t784nt * With parameters: * AMP_RELEASE=2.8 * APP_LABEL=3scale-api-management * TENANT_NAME=3scale * RWX_STORAGE_CLASS=null * AMP_BACKEND_IMAGE=registry.redhat.io/3scale-amp2/backend-rhel7:3scale2.8 * AMP_ZYNC_IMAGE=registry.redhat.io/3scale-amp2/zync-rhel7:3scale2.8 * AMP_APICAST_IMAGE=registry.redhat.io/3scale-amp2/apicast-gateway-rhel8:3scale2.8 * AMP_SYSTEM_IMAGE=registry.redhat.io/3scale-amp2/system-rhel7:3scale2.8 * ZYNC_DATABASE_IMAGE=registry.redhat.io/rhscl/postgresql-10-rhel7 * MEMCACHED_IMAGE=registry.redhat.io/3scale-amp2/memcached-rhel7:3scale2.8 * IMAGESTREAM_TAG_IMPORT_INSECURE=false * SYSTEM_DATABASE_IMAGE=registry.redhat.io/rhscl/mysql-57-rhel7:5.7 * REDIS_IMAGE=registry.redhat.io/rhscl/redis-32-rhel7:3.2 * System MySQL User=mysql * System MySQL Password=mrscfh4h # generated * System MySQL Database Name=system * System MySQL Root password.=xbi0ch3i # generated * WILDCARD_DOMAIN=192.168.64.33.nip.io * SYSTEM_BACKEND_USERNAME=3scale_api_user * SYSTEM_BACKEND_PASSWORD=kraji167 # generated * SYSTEM_BACKEND_SHARED_SECRET=8af5m6gb # generated * SYSTEM_APP_SECRET_KEY_BASE=726e63427173e58cbb68a63bdc60c7315565d6acd037caedeeb0050ecc0e6e41c3c7ec4aba01c17d8d8b7b7e3a28d6166d351a6238608bb84aa5d5b2dc02ae60 # generated * ADMIN_PASSWORD=b6t784nt # generated * ADMIN_USERNAME=admin * ADMIN_EMAIL= * ADMIN_ACCESS_TOKEN=k055jof4itblvwwn # generated * MASTER_NAME=master * MASTER_USER=master * MASTER_PASSWORD=buikudum # generated * MASTER_ACCESS_TOKEN=xa7wkt16 # generated * RECAPTCHA_PUBLIC_KEY= * RECAPTCHA_PRIVATE_KEY= * SYSTEM_REDIS_URL=redis://system-redis:6379/1 * SYSTEM_MESSAGE_BUS_REDIS_URL= * SYSTEM_REDIS_NAMESPACE= * SYSTEM_MESSAGE_BUS_REDIS_NAMESPACE= * Zync Database PostgreSQL Connection Password=efyJdRccBbYcWtWl # generated * ZYNC_SECRET_KEY_BASE=dcmNGWtrjCReuJlQ # generated * ZYNC_AUTHENTICATION_TOKEN=3FKMAije3V3RWQQ8 # generated * APICAST_ACCESS_TOKEN=2ql8txu4 # generated * APICAST_MANAGEMENT_API=status * APICAST_OPENSSL_VERIFY=false * APICAST_RESPONSE_CODES=true * APICAST_REGISTRY_URL=http://apicast-staging:8090/policies
请注意可以访问 3scale 管理控制台的 Username/Password。
* ADMIN_PASSWORD=b6t784nt # generated * ADMIN_USERNAME=admin
配置 RH SSO。
-
在 RH SSO 安装后,使用控制台中显示的用户名/密码从
https://sso-openshift.OPENSHIFT_IP_ADDR.nip.io/auth
登录 RH SSO 管理控制台。 - 单击页面左上角的 Add Realm 按钮。
- 在 Add Realm 页面上,选择 Import Select file 按钮。
-
从目录中选择
./src/main/resources/keycloak-config/realm-export-new.json
,这将为本例导入预定义必要的realm/client/user/role
。
-
在 RH SSO 安装后,使用控制台中显示的用户名/密码从
配置 3Scale API 网关。
-
在 3Scale 安装后,使用控制台中显示的用户名/密码从
https://3scale-admin.OPENSHIFT_IP_ADDR.nip.io/p/admin/dashboard
登录 3Scale 管理控制台。 -
在创建新产品时,请选择 Define manually,并将
camel-security-bridge
用于 Name 和 System name。 -
在创建新后端时,将
camel-security-bridge
用于 Name 和 System name,而 私有基本 URL 应该为http://spring-boot-camel-soap-rest-bridge-openshift.OPENSHIFT_IP_ADDR.nip.io/
。 - 将新创建的后端添加到新创建的产品。
-
添加映射规则
Verb:POST Pattern:/
。 -
在创建应用程序计划时,将
camel-security-bridge
用于 Name 和 System name。 在创建应用程序时,选择新的创建的
camel-security-bridge
应用程序计划。创建应用程序后,记下 API 凭据。使用这些凭证访问 3scale 网关。例如,User Key bdfb53fe9b426fbf21428fd116035798
-
编辑新创建的
camel-security-bridge
项目,并在 Dashboard 中从camel-security-bridge
中发布它。 - 进入 Integration > Settings。选择 As HTTP Headers 作为 Credentials 位置。
-
在 Dashboard 中的
camel-security-bridge
中,进入 Integration > Configuration,并提升 Staging APIcast 和 Production APIcast。
-
在 3Scale 安装后,使用控制台中显示的用户名/密码从
导航到包含提取的 Quickstart 应用程序的目录(例如,my_openshift/spring-boot-camel-soap-rest-bridge)。
$ cd my_openshift/spring-boot-camel-soap-rest-bridge
构建和部署项目到 OpenShift 集群。
$ mvn clean oc:deploy -Popenshift -DJAVA_OPTIONS="-Dsso.server=https://sso-openshift.OPENSHIFT_IP_ADDR.nip.io -Dweather.service.host=${your local ip}"
我们需要在 openshift 上将两个属性传递给
camel-soap-rest-bridge
镜像。一个是 openshift 上的 RH SSO 服务器地址,它是 https://sso-openshift.OPENSHIFT_IP_ADDR.nip.io。另一个是后端 soap 服务器。在这个快速入门中,我们在本地机器上运行 backend soap 服务器,因此将机器的本地 IP 地址作为 -Dweather.service.host 传递。(这必须是 localhost 或 127.0.0.1 以外的 ip 地址。)-
在您的浏览器中,导航到 OpenShift 控制台中的
openshift
项目。等待spring-boot-camel-soap-rest-bridge
的 pod 启动。 -
在项目的 Overview 页面中,导航到
spring-boot-camel-soap-rest-bridge
应用程序的详情页面部署: https://OPENSHIFT_IP_ADDR:8443/console/project/openshift/browse/pods/spring-boot-camel-soap-rest-bridge-NUMBER_OF_DEPLOYMENT?tab=details。 - 切换到 Logs 选项卡,从 Camel 查看日志。
- 访问 OpenApi API。
本例使用 context-path camelcxf/openapi 使用 openapi 提供服务的 API 文档。您可以从 Web 浏览器访问 API 文档,地址为 http://spring-boot-camel-soap-rest-bridge-openshift.OPENSHIFT_IP_ADDR.nip.io/camelcxf/openapi/openapi.jsonn。