Menu Close
第8章 Fuse on OpenShift での Spring Boot 2 の SOAP to REST bridge クイックスタートの実行
このクイックスタートは、Camel の REST DSL を使用してバックエンド SOAP API を公開する方法を実証します。シンプルな Camel ルートは REST 呼び出しをレガシー SOAP サービスにブリッジできます。RH SSO を基盤とする REST エンドポイントと SOAP エンドポイントの両方にセキュリティーが関係します。OAuth および OpenID Connect で保護されるフロントエンド REST API とクライアントは Resource Owner Password Credentials 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 bridge クイックスタートを実行し、デプロイする方法を説明します。
- 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 ボタンをクリックします。
-
この例の事前定義された必要な
realm/client/user/role
をインポートするディレクトリーから./src/main/resources/keycloak-config/realm-export-new.json
を選択します。
-
RH SSO をインストールした後にコンソールに表示されるユーザー名/パスワードを使用して
3Scale API Gateway を設定します。
-
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
を使用し、 Private Base 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 の順に移動します。As HTTP Headers を Credentials location として選択します。
-
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 として渡します。(これは 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 にアクセスします。