8장. OpenShift에서 Fuse에서 Spring Boot 2의 REST 브리지 빠른 시작에 Cryostat 실행

이 빠른 시작에서는 Camel의 REST DSL을 사용하여 백엔드 Cryostat API를 노출하는 방법을 보여줍니다. 간단한 camel 경로는 REST 호출을 기존 Cryostat 서비스에 브리지할 수 있습니다. 보안은 RH SSO에서 지원하는 REST 끝점 및 Cryostat 끝점 모두에 포함됩니다. OAuth 및 OpenID Connect를 통해 보호된 프런트 엔드 REST API는 리소스 소유자 암호 OAuth2 모드를 사용하여 RH SSO에서 JWT 액세스 토큰을 가져오고 이 토큰을 사용하여 REST 엔드포인트에 액세스합니다.

전제 조건

  • OCP 3.11 이상을 설치 및 구성했습니다.
  • RH SSO 7.4 이상을 설치했습니다.
  • 3Scale 2.8 이상을 설치했습니다.
  • registry.redhat.io 에 대한 인증을 구성했습니다. 자세한 내용은 Red Hat Container Registry 인증 구성을 참조하십시오.

절차

다음 섹션에서는 OpenShift에서 Fuse의 REST 브리지 빠른 시작에 Cryostat를 실행하고 배포하는 방법을 설명합니다.

  1. OpenShift 서버를 시작합니다. RH SSO 이미지(2 pods) 및 3Scale 이미지(15 Pod)를 이 빠른 시작의 사전 요구 사항으로 설치해야 하므로 옵션 --memory 8GB --cpus 4 를 사용하여 강력한 시스템에서 OpenShift 서버를 시작해야 합니다. 또한 만료 시간을 사용하여 보안 토큰을 발행해야 하므로 시간대 옵션도 추가해야 합니다. Openshift 클러스터가 로컬 시스템과 동일한 시간대를 사용하는지 확인합니다(기본적으로 UTC 시간대 사용).
  2. 사용자 developercluster-admin 역할을 추가합니다.

    $ 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 역할을 추가해야 합니다.

  3. 시크릿을 생성하고 서비스 계정에 연결합니다.

    $ 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

    openshift 네임스페이스에서 RH SSO 이미지를 사용할 수 있는지 확인한 다음 템플릿 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 관리자 콘솔에 액세스하는 데 사용되는 사용자 이름/암호를 확인합니다. 예를 들면 다음과 같습니다.

     * 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 템플릿으로 작성된 시크릿을 생성) 3scale의 시크릿이 필요합니다. camel-bridge 시크릿에서 USERNAME/PASSWORD를 재사용할 수 있습니다. 로컬 machine/laptop에서 쉽게 실행할 수 있도록 하드웨어 리소스를 명시적으로 지정하지 않기 때문에 의도적으로 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 Cryostat 버튼을 클릭합니다.
    3. Add Cryostat 페이지에서 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. 새 제품을 생성할 때 수동으로 정의를 선택하고 NameSystem name 모두에 camel-security-bridge 를 사용합니다.
    3. 새 백엔드를 생성할 때 이름과 시스템 이름 모두에 camel-security-bridge 를 사용하고 개인 기본 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 게이트웨이에 액세스합니다. eample의 경우,

          User Key 	bdfb53fe9b426fbf21428fd116035798
    8. 새로 생성된 camel-security-bridge 프로젝트를 편집하고 대시보드의 camel-security-bridge 에서 게시합니다.
    9. Integration > Settings 로 이동합니다. 인증 정보 위치로 를 HTTP 헤더로 선택합니다.
    10. 대시보드의 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 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 서버입니다. 이 빠른 시작에서는 로컬 머신에서 백엔드 soap 서버를 실행하므로 시스템의 로컬 IP 주소를 -DwECDHE.service.host로 전달합니다. (이 주소는 localhost 또는 127.0.0.1 이외의 IP 주소여야 합니다.)

  14. 브라우저에서 OpenShift 콘솔의 openshift 프로젝트로 이동합니다. spring-boot-camel-soap-rest-bridge 의 Pod가 시작될 때까지 기다립니다.
  15. 프로젝트의 개요 페이지에서 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. Camel에서 로그 를 보려면 로그 탭으로 전환합니다.
  17. OpenApi API에 액세스합니다.

이 예제에서는 context-path camelcxf/openapi를 사용하는 openapi를 사용하는 서비스에 대한 API 문서를 제공합니다. 웹 브라우저에서 http://spring-boot-camel-soap-rest-bridge-openshift.OPENSHIFT_IP_ADDR.nip.io/camelcxf/openapi/openapi.jsonn 에 있는 API 문서에 액세스할 수 있습니다.