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 クイックスタートを実行し、デプロイする方法を説明します。

  1. OpenShift サーバーを起動します。このクイックスタートの前提条件として RH SSO イメージ (2 つの Pod) および 3Scale イメージ (15 個の Pod) をインストールする必要があるため、--memory 8GB --cpus 4 のオプションを指定して、強力なマシンで OpenShift サーバーを開始する必要があります。また、期限切れの時間でセキュリティートークンを発行する必要があるため、タイムゾーンオプションも追加する必要があります。Openshift クラスターがローカルマシンと同じタイムゾーンを使用することを確認します (デフォルトでは UTC タイムゾーンを使用します)。
  2. 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 に追加する必要があります。

  3. シークレットを作成し、これを 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
  4. 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 サーバーの再起動後も設定が保持されます。

  5. 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
  6. RH SSO 管理コンソールへのアクセスに使用される Username/Password をメモします。例を以下に示します。

     * RH-SSO Administrator Username=tprYtXP1 # generated
     * RH-SSO Administrator Password=nEjf7fojv11FmhJ5eaqadoh0SI2gvlls # generated
  7. 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テンプレートを使用します。これは、ハードウェアリソースを明示的に指定していないため、ローカルマシン/ラップトップで簡単に実行できるためです。

  8. 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
  9. 3scale 管理コンソールにアクセスできる Username/Password を書き留めます。

            * ADMIN_PASSWORD=b6t784nt # generated
            * ADMIN_USERNAME=admin
  10. RH SSO を設定します。

    1. RH SSO をインストールした後にコンソールに表示されるユーザー名/パスワードを使用して https://sso-openshift.OPENSHIFT_IP_ADDR.nip.io/auth から RH SSO 管理コンソールにログインします。
    2. ページの左上隅にある Add Realm ボタンをクリックします。
    3. Add Realm ページで Import Select file ボタンをクリックします。
    4. この例の事前定義された必要な realm/client/user/role をインポートするディレクトリーから ./src/main/resources/keycloak-config/realm-export-new.json を選択します。
  11. 3Scale API Gateway を設定します。

    1. 3Scale をインストールした後にコンソールに表示されるユーザー名/パスワードを使用して https://3scale-admin.OPENSHIFT_IP_ADDR.nip.io/p/admin/dashboard から 3Scale 管理コンソールにログインします。
    2. 新規製品の作成時に、Define manually を選択し、NameSystem name の両方に camel-security-bridge を使用します。
    3. 新規バックエンドを作成する場合、NameSystem name の両方に camel-security-bridge を使用し、 Private Base URLhttp://spring-boot-camel-soap-rest-bridge-openshift.OPENSHIFT_IP_ADDR.nip.io/ である必要があります。
    4. 新たに作成したバックエンドを新たに作成したプロダクトに追加します。
    5. マッピングルール Verb:POST Pattern:/ を追加します。
    6. アプリケーションプランを作成する場合には、NameSystem name の両方に camel-security-bridge を使用します。
    7. アプリケーションの作成時に、新しい作成した camel-security-bridge アプリケーションプランを選択します。アプリケーションを作成したら、API クレデンシャルを書き留めます。これらのクレデンシャルを使用して、3scale ゲートウェイにアクセスします。例を以下に示します。

          User Key 	bdfb53fe9b426fbf21428fd116035798
    8. 新たに作成した camel-security-bridge プロジェクトを編集して、Dashboard の camel-security-bridge から公開します。
    9. Integration > Settings の順に移動します。As HTTP HeadersCredentials location として選択します。
    10. Dashboard の camel-security-bridge から Integration > Configuration の順に移動し、Staging APIcastProduction APIcastの両方を昇格します。
  12. 展開したクイックスタートアプリケーションが含まれるディレクトリーに移動します (my_openshift/spring-boot-camel-soap-rest-bridge)。

    $ cd my_openshift/spring-boot-camel-soap-rest-bridge
  13. プロジェクトを 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 アドレスでなければなりません)。

  14. ブラウザーで OpenShift コンソールの openshift プロジェクトに移動します。spring-boot-camel-soap-rest-bridge の Pod が起動していることを確認できるまで待機します。
  15. プロジェクトの 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 に移動します。
  16. Logs タブに切り替えて Camel からログを表示します。
  17. 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 にアクセスします。