第8章 Fuse on OpenShift 上での Spring Boot 2 用 SOAP to REST ブリッジクイックスタートの実行
このクイックスタートは、Camel の REST DSL を使用してバックエンド SOAP API を公開する方法を示しています。簡単な camel ルートは REST 呼び出しをレガシー SOAP サービスにブリッジできます。RH SSO がサポートする REST エンドポイントと SOAP エンドポイントの両方に対してセキュリティーが関与します。OAuth および OpenID Connect によって保護されるフロントエンド REST API ならびにクライアントは、リソースオーナーパスワードクレデンシャル OAuth2 モードを使用して RH SSO から JWT アクセストークンを取得し、このトークンを使用して REST エンドポイントにアクセスします。
前提条件
- OCP 3.11 以降のバージョンをインストールし、設定している。
- RH SSO 7.4 以降のバージョンをインストールしている。
- 3Scale 2.8 以降のバージョンをインストールしている。
-
registry.redhat.io
への認証が設定されている。詳細は、Configuring Red Hat Container Registry authentication を参照してください。
手順
以下のセクションでは、Fuse on OpenShift で SOAP to REST ブリッジクイックスタートを実行し、デプロイする方法を説明します。
- OpenShift サーバーを起動します。このクイックスタートの前提条件として RH SSO イメージ (2 Pod) および 3Scale イメージ (15 Pod) をインストールする必要があるため、--memory 8GB --cpus 4 オプションを使用して、強力なマシンで OpenShift サーバーを起動する必要があります。有効期限のあるセキュリティートークンを発行する必要もあるため、タイムゾーンオプションも追加する必要があります。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
このクイックスタートは RH SSO イメージと同様に
openshift
namespace にデプロイされ (これは関係するテンプレートのデフォルト設定の要件です)、cluster-admin
ロールをユーザーdeveloper
に追加する必要があります。シークレットを作成し、これを
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
namespace からアクセスできることを確認し、テンプレート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 用に専用の新規プロジェクトを作成する必要があります。また、3scale の新たな
threescale-registry-auth
(3scale テンプレートで記述されているようにこの名前を使用してシークレットを作成します) シークレットも作成する必要があります。camel-bridge シークレットからの USERNAME/PASSWORD を再利用できます。ここでは意図的にamp-eval-tech-preview.yml
テンプレートを使用します。これは、ハードウェアリソースを明示的に指定していないため、ローカルマシン/ラップトップで簡単に実行できるためです。3scale テンプレートが Openshift に正常にインストールされたら、コンソールに以下のような出力が表示されます。
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 を選択し、Name と System name の両方に
camel-security-bridge
を使用します。 -
新規バックエンドを作成する場合は、Name と System name の両方に
camel-security-bridge
を使用し、プライベートベース URL はhttp://spring-boot-camel-soap-rest-bridge-openshift.OPENSHIFT_IP_ADDR.nip.io/
にする必要があります。 - 新規作成したバックエンドを新たに作成したプロダクトに追加します。
-
マッピングルール
Verb:POST Pattern:/
を追加します。 -
アプリケーションプランを作成する場合には、Name と System name の両方に
camel-security-bridge
を使用します。 アプリケーションの作成時に、新しい作成した
camel-security-bridge
アプリケーションプランを選択します。アプリケーションを作成したら、API クレデンシャルをメモします。これらのクレデンシャルを使用して 3scale ゲートウェイにアクセスします。以下に例を示します。User Key bdfb53fe9b426fbf21428fd116035798
-
新たに作成した
camel-security-bridge
プロジェクトを編集し、Dashboard のcamel-security-bridge
から公開します。 - Integration > Settings の順に移動します。Credentials location として HTTP Headers を選択します。
-
Dashboard の
camel-security-bridge
から Integration > Configuration の順に移動し、Staging APIcast と Production APIcastの両方を昇格します。
-
3Scale をインストールした後にコンソールに表示されるユーザー名/パスワードを使用して
デプロイメントしたクイックスタートアプリケーションが含まれるディレクトリーに移動します (例:my_openshift/spring-boot-camel-soap-rest-bridge)。
$ cd my_openshift/spring-boot-camel-soap-rest-bridge
プロジェクトを OpenShift クラスターにビルドし、デプロイします。
$ mvn clean fabric8: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
イメージに 2 つの属性を渡す必要があります。1 つは Openshift の RH SSO サーバーアドレスで、これは https://sso-openshift.OPENSHIFT_IP_ADDR.nip.io です。もう 1 つは、バックエンド soap サーバーです。このクイックスタートでは、ローカルマシンでバックエンド soap サーバーを実行するので、マシンのローカル IP アドレスを -Dweather.service.host として渡します(ローカルホストまたは 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) にアクセスできます。