OpenShift Container Platform에서 JBoss EAP 사용

Red Hat JBoss Enterprise Application Platform 8.0

OpenShift용 Red Hat JBoss Enterprise Application Platform 개발 가이드

Red Hat Customer Content Services

초록

OpenShift용 Red Hat JBoss Enterprise Application Platform 사용 가이드

JBoss EAP 문서에 대한 피드백 제공

오류를 보고하거나 문서를 개선하기 위해 Red Hat Jira 계정에 로그인하여 문제를 제출하십시오. Red Hat Jira 계정이 없는 경우 계정을 생성하라는 메시지가 표시됩니다.

프로세스

  1. 티켓을 생성하려면 다음 링크를 클릭하십시오.
  2. 요약 에 문제에 대한 간략한 설명을 입력합니다.
  3. 설명에서 문제 또는 개선 사항에 대한 자세한 설명을 제공합니다. 문서에서 문제가 발생한 위치에 URL을 포함합니다.
  4. Submit 을 클릭하고 문제를 적절한 문서 팀으로 라우팅합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

1장. Red Hat JBoss Enterprise Application Platform

Red Hat JBoss EAP(JBoss Enterprise Application Platform 8.0)는 오픈 표준을 기반으로 구축된 미들웨어 플랫폼으로, Jakarta EE 10 사양을 준수합니다. 고가용성 클러스터링, 메시징 및 분산 캐싱과 같은 기능에 대해 사전 구성된 옵션을 제공합니다. 여기에는 필요한 경우에만 서비스를 활성화할 수 있는 모듈식 구조가 포함되어 시작 속도가 향상됩니다.

웹 기반 관리 콘솔 및 관리 CLI(명령줄 인터페이스)를 사용하면 작업을 스크립팅 및 자동화하고 XML 구성 파일을 편집하지 않아도 됩니다. 또한 JBoss EAP에는 안전하고 확장 가능한 Jakarta EE 애플리케이션을 개발, 배포 및 실행하는 데 사용할 수 있는 API 및 개발 프레임워크가 포함되어 있습니다. JBoss EAP 8.0은 Web Profile, Core Profile 및 Full Platform 사양에 대해 Jakarta EE 10 호환 구현입니다.

1.1. JBoss EAP는 OpenShift에서 어떻게 작동합니까?

Red Hat은 OpenShift에서 JBoss EAP로 애플리케이션 이미지를 빌드하고 실행하는 컨테이너 이미지를 제공합니다.

참고

Red Hat은 더 이상 JBoss EAP가 포함된 이미지를 제공하지 않습니다.

1.2. 비교: OpenShift용 JBoss EAP 및 JBoss EAP

JBoss EAP 제품을 OpenShift용 JBoss EAP 이미지와 비교할 때 몇 가지 중요한 차이점이 있습니다. 다음 표에서는 OpenShift용 JBoss EAP의 현재 버전에서 포함되거나 지원되는 기능을 설명합니다.

표 1.1. OpenShift용 JBoss EAP와 JBoss EAP의 차이점

JBoss EAP 기능OpenShift용 JBoss EAP의 상태설명

JBoss EAP 관리 콘솔

포함되지 않음

JBoss EAP 관리 콘솔은 OpenShift용 JBoss EAP 릴리스에 포함되어 있지 않습니다.

JBoss EAP 관리 CLI

권장되지 않음

JBoss EAP 관리 CLI는 컨테이너화된 환경에서 실행되는 JBoss EAP와 함께 사용하지 않는 것이 좋습니다. 컨테이너를 다시 시작하면 실행 중인 컨테이너에서 관리 CLI를 사용하여 변경한 구성은 손실됩니다. 관리 CLI는 문제 해결을 위해 Pod 내에서 액세스할 수 있습니다.

관리형 도메인

지원되지 않음

JBoss EAP 관리형 도메인은 지원되지 않지만 애플리케이션의 생성 및 배포는 OpenShift의 컨테이너에서 관리됩니다.

기본 루트 페이지

비활성화됨

기본 루트 페이지는 비활성화되어 있지만 자체 애플리케이션을 ROOT.war 로 루트 컨텍스트에 배포할 수 있습니다.

원격 메시징

지원됨

Pod 간 및 원격 메시징을 위한 Red Hat AMQ가 지원됩니다. ActiveMQ Artemis는 JBoss EAP 인스턴스가 있는 단일 Pod 내에서의 메시징에만 지원되며 Red Hat AMQ가 없는 경우에만 활성화됩니다.

트랜잭션 복구

지원됨

EAP Operator는 OpenShift 4에서 테스트 및 지원되는 유일한 트랜잭션 복구 옵션입니다. EAP Operator를 사용하여 트랜잭션 복구에 대한 자세한 내용은 안전하지 않은 트랜잭션 복구를 위한 EAP Operator를 참조하십시오.

1.3. 버전 호환성 및 지원

OpenShift용 JBoss EAP는 OpenJDK 17에 대한 이미지를 제공합니다.

S2I 빌더 이미지와 런타임 이미지 두 가지 변형을 사용할 수 있습니다. S2I 빌더 이미지에는 S2I 빌드 중에 전체 JBoss EAP 서버를 프로비저닝할 수 있는 모든 필수 툴이 포함되어 있습니다. 런타임 이미지에는 JBoss EAP를 실행하는 데 필요한 종속성이 포함되어 있지만 서버는 포함되어 있지 않습니다. 이 서버는 체인된 빌드 중에 런타임 이미지에 설치됩니다.

OpenShift용 JBoss EAP 8.0의 이미지에 다음 수정 사항이 적용되었습니다.

  • S2I 빌더 이미지에는 설치된 JBoss EAP 서버가 포함되어 있지 않으며 S2I 빌드 중에 JBoss EAP 8.0 서버를 설치합니다.
  • S2I 빌드 중 애플리케이션 pom 파일에서 Cryostat-maven-plugin을 구성합니다.
  • S2I 빌드 중에 GALLEON_PROVISION_FEATURE_PACKS,GALLEON_PROVISION_LAYERS, GALLEON_PROVISION_CHANNION _CHANNELS 환경 변수를 설정하여 기존 JBoss EAP 7.4 애플리케이션을 사용하십시오.
  • S2I 빌드 중에 JBoss EAP 프로비저닝 서버에는 OpenShift용으로 사용자 지정된 standalone.xml 서버 구성 파일이 포함되어 있습니다.

    중요

    sever에는 JBoss EAP 7.4와 함께 사용된 standalone-openshift.xml 구성 파일이 아닌 standalone.xml 구성 파일이 포함되어 있습니다.

  • 이미지 내에서 JBOSS_HOME 값은 /opt/server 입니다. JBOSS_HOME 의 값은 JBoss EAP 7.4의 /opt/eap 입니다.
  • Jolokia 에이전트 는 더 이상 이미지에 존재하지 않습니다.
  • Prometheus 에이전트 가 설치되지 않았습니다.
  • Python 프로브 가 더 이상 존재하지 않습니다.
  • SSO 어댑터는 더 이상 이미지에 존재하지 않습니다.
  • ActiveMQ.rar 는 더 이상 존재하지 않습니다.
참고

다음 검색 메커니즘 프로토콜은 더 이상 사용되지 않으며 다른 프로토콜로 교체됩니다.

  • openshift.DNS_PING 프로토콜은 더 이상 사용되지 않으며 dns.DNS_PING 프로토콜로 교체됩니다. 사용자 지정 standalone.xml 파일에서 openshift.DNS_PING 프로토콜을 참조하는 경우 이 프로토콜을 dns.DNS_PING 프로토콜로 교체합니다.
  • openshift.KUBE_PING 검색 메커니즘 프로토콜은 더 이상 사용되지 않으며 kubernetes.KUBE_PING 프로토콜로 교체됩니다.

1.3.1. OpenShift 4.x 지원

OpenShift 4.1의 변경 사항은 Jolokia에 대한 액세스에 영향을 미치며 OpenShift 4.x 웹 콘솔에서는 Open Java 콘솔을 더 이상 사용할 수 없습니다.

이전 OpenShift 릴리스에서 특정 kube-apiserver 프록시 요청이 인증되어 클러스터로 전달되었습니다. 이 동작은 이제 안전하지 않은 것으로 간주되므로 이러한 방식으로 Jolokia에 액세스하는 것은 더 이상 지원되지 않습니다.

OpenShift 콘솔의 코드베이스가 변경되었기 때문에 Open Java Console에 대한 링크를 더 이상 사용할 수 없습니다.

1.3.2. IBM Z 지원

libartemis-native 의 s390x 변형은 이미지에 포함되어 있지 않습니다. 따라서 AIO와 관련된 모든 설정은 고려하지 않습니다.

  • journal-type: journal-typeASYNCIO 로 설정해도 적용되지 않습니다. 이 속성의 기본값은 런타임 시 NIO 입니다.
  • journal-max-io: 이 속성은 적용되지 않습니다.
  • journal-store-enable-async-io: 이 속성은 적용되지 않습니다.

1.3.2.1. OpenShift의 JBoss EAP 7.4에서 JBoss EAP 8.0으로 업그레이드

OpenShift에서 JBoss EAP 7.4와 함께 설치된 standalone.xml 파일은 JBoss EAP 8.0 이상과 호환되지 않습니다. JBoss EAP 8.0 이상 OpenShift 컨테이너를 시작하기 전에 파일을 수정하고 standalone.xml 로 이름을 변경해야합니다.

1.3.3. 배포 옵션

OpenShift 사용자를 대신하여 복잡한 상태 저장 애플리케이션의 인스턴스를 생성, 구성 및 관리하기 위해 OpenShift API를 확장하는 JBoss EAP별 컨트롤러인 EAP Operator를 사용하여 OpenShift에 JBoss EAP Java 애플리케이션을 배포할 수 있습니다.

추가 리소스

2장. JBoss EAP 8.0의 패키지 네임스페이스 변경

이 섹션에서는 JBoss EAP 8.0의 패키지 네임스페이스 변경 사항에 대한 추가 정보를 제공합니다. JBoss EAP 8.0은 자카르타 EE 10 및 자카르타 EE 10 API의 기타 여러 구현을 완벽하게 지원합니다. Jakarta EE 10 for JBoss EAP 8.0에서 지원하는 중요한 변경 사항은 패키지 네임스페이스 변경입니다.

2.1. javax에서 jakarta 네임스페이스로 변경

자카르타 EE 8과 EE 10의 주요 차이점은 EE API Java 패키지 이름을 javax.* 에서 jakarta *로 바꾸는 것입니다. 이는 Java EE가 Eclipse Foundation으로 이동하고 자카르타 EE 설정을 따릅니다.

이 네임스페이스 변경에 맞게 애플리케이션을 JBoss EAP 7에서 JBoss EAP 8로 마이그레이션하는 가장 큰 작업입니다. 애플리케이션을 자카르타 EE 10으로 마이그레이션하려면 다음 단계를 완료해야 합니다.

  • import 구문 또는 기타 소스 코드에서 javax 패키지에서 jakarta 패키지로 EE API 클래스를 사용하는 것을 업데이트합니다.
  • jakarta 로 시작하도록 EE 지정 시스템 속성 또는 javax 로 시작하는 기타 구성 속성의 이름을 업데이트합니다.
  • EE 인터페이스의 애플리케이션 제공 구현 또는 java.util.ServiceLoader 메커니즘을 사용하여 부트스트랩된 추상 클래스의 경우 구현 클래스를 META-INF/services/ javax에서 META-INF/services/jakarta로 식별하는 리소스의 이름을 변경합니다.[rest_of_name]META-INF/services/jakarta.[rest_of_name] 로 변경합니다.
참고

Red Hat Migration Toolkit은 애플리케이션 소스 코드에서 네임스페이스를 업데이트하는 데 도움이 될 수 있습니다. 자세한 내용은 How to use Red Hat Migration Toolkit for Auto-Migration of an Application to the Jakarta EE 10 Namespace. 소스 코드 마이그레이션이 옵션이 아닌 경우 Open Source Eclipse Transformer 프로젝트는 기존 Java 아카이브를 javax 네임스페이스에서 jakarta 네임스페이스로 변환하는 바이트 코드 변환 도구를 제공합니다.

참고

이 변경 사항은 Java SE의 일부인 javax 패키지에는 영향을 미치지 않습니다.

추가 리소스

3장. OpenShift Container Platform에서 JBoss EAP 애플리케이션 빌드 및 실행

S2I(Source-to-Image) 프로세스를 따라 JBoss EAP for OpenShift 이미지에서 Java 애플리케이션을 빌드하고 실행할 수 있습니다.

3.1. 사전 요구 사항

  • OpenShift 인스턴스가 설치되어 작동 중입니다.

3.2. OpenShift에서 애플리케이션 배포를 위한 준비

JBoss EAP 애플리케이션 개발자는 OpenShift에 애플리케이션을 배포할 수 있습니다. 다음 예에서, Kit sink quickstart는 Jakarta Server Cryostat, Jakarta Contexts and dependency Cryostat, Jakarta Enterprise Cryostats, Jakarta Persistence 및 Jakarta Cryostat를 사용하는 Jakarta EE 웹 지원 데이터베이스 애플리케이션을 보여줍니다. 자세한 내용은 JBoss EAP 8.0 Kitsink quickstart를 참조하십시오. 아래 절차에 따라 애플리케이션을 배포합니다.

프로세스

  1. oc login 명령을 사용하여 OpenShift 인스턴스에 로그인합니다.
  2. OpenShift에서 프로젝트를 생성합니다.

    다음 명령을 사용하여 프로젝트를 생성합니다. 프로젝트를 사용하면 다른 그룹과 별도로 콘텐츠를 구성하고 관리할 수 있습니다.

    $ oc new-project <project_name>

    예를 들어 Kit sink quickstart 의 경우 다음 명령을 사용하여 Cryo stat-demo 라는 프로젝트를 생성합니다.

    $ oc new-project eap-demo
  3. 선택 사항: 키 저장소와 시크릿을 생성합니다.

    참고

    OpenShift 프로젝트에서 HTTPS 사용 기능을 사용하는 경우 키 저장소와 시크릿을 생성해야 합니다.

    1. Java keytool 명령을 사용하여 키 저장소를 생성합니다.

      주의

      다음 명령은 자체 서명된 인증서를 생성하지만 프로덕션 환경의 경우 SSL 암호화 연결(HTTPS)에 대해 확인된 CA(인증 기관)에서 고유한 SSL 인증서를 사용합니다.

      $ keytool -genkey -keyalg RSA -alias <alias_name> -keystore <keystore_filename.jks> -validity 360 -keysize 2048

      예를 들어, Kit sink 빠른 시작의 경우 다음 명령을 사용하여 키 저장소를 생성합니다.

      $ keytool -genkey -keyalg RSA -alias eapdemo-selfsigned -keystore keystore.jks -validity 360 -keysize 2048
    2. 다음 명령을 사용하여 새 키 저장소에서 보안을 생성합니다.

      $ oc create secret generic <secret_name> --from-file=<keystore_filename.jks>

      예를 들어 Kit sink 빠른 시작의 경우 다음 명령을 사용하여 시크릿을 생성합니다.

      $ oc create secret generic eap-app-secret --from-file=keystore.jks

3.3. OpenShift에서 S2I(Source-to-Image)를 사용하여 애플리케이션 이미지 빌드

S2I(Source-to-Image) 워크플로우에 따라 JBoss EAP 애플리케이션에 대한 재현 가능한 컨테이너 이미지를 빌드합니다. 생성된 컨테이너 이미지에는 애플리케이션 배포 및 즉시 실행 가능한 JBoss EAP 서버가 포함됩니다.

S2I 워크플로는 Git 리포지토리에서 소스 코드를 가져와 사용하려는 언어 및 프레임워크를 기반으로 하는 컨테이너에 삽입합니다. S2I 워크플로가 완료되면 src 코드가 컴파일되고 애플리케이션이 패키지화되고 JBoss EAP 서버에 배포됩니다.

자세한 내용은 JBoss EAP S2I에 대한 레거시 서버 프로비저닝 을 참조하십시오.

참고

JBoss EAP에서는 자카르타 EE 10을 사용하여 애플리케이션을 개발하는 경우에만 S2I 이미지를 사용할 수 있습니다.

사전 요구 사항

  • 유효한 Red Hat 고객 계정이 있습니다.
  • 레지스트리 서비스 계정이 있어야 합니다. Red Hat 고객 포털의 지침에 따라 레지스트리 서비스 계정을 사용하여 인증 토큰을 생성합니다.
  • Red Hat Ecosystem Catalog에서 이미지를 가져오는 데 사용할 수 있는 OpenShift 시크릿 YAML 파일을 다운로드했습니다. 자세한 내용은 OpenShift 시크릿 을 참조하십시오.
  • oc login 명령을 사용하여 OpenShift에 로그인했습니다.
  • Helm이 설치되어 있어야 합니다. 자세한 내용은 Helm 설치를 참조하십시오.
  • 관리 CLI에 이 명령을 입력하여 JBoss EAP Helm 차트 리포지토리를 설치했습니다.

    $ helm repo add jboss-eap https://jbossas.github.io/eap-charts/

프로세스

  1. 다음 YAML 콘텐츠를 사용하여 helm.yaml 이라는 파일을 생성합니다.

    build:
      uri: https://github.com/jboss-developer/jboss-eap-quickstarts.git
      ref: EAP_8.0.0.GA
      contextDir: helloworld
    deploy:
      replicas: 1
  2. 다음 명령을 사용하여 OpenShift에 JBoss EAP 애플리케이션을 배포합니다.

    $ helm install helloworld -f helm.yaml jboss-eap/eap8

검증

  • curl 을 사용하여 애플리케이션에 액세스합니다.

    $ curl https://$(oc get route helloworld --template='{{ .spec.host }}')/HelloWorld

    Hello World! 출력이 표시됩니다. 애플리케이션이 배포되었는지 확인합니다.

3.4. OpenShift에 타사 애플리케이션 배포

컴파일된 WAR 파일 또는 EAR 아카이브를 사용하여 OpenShift 배포를 위한 애플리케이션 이미지를 생성할 수 있습니다. Dockerfile을 사용하여 운영 체제, Java 및 JBoss EAP 구성 요소가 포함된 업데이트되고 포괄적인 런타임 스택과 함께 JBoss EAP 서버에 이러한 아카이브를 배포합니다.

참고

Red Hat은 사전 구축된 JBoss EAP 서버 이미지를 제공하지 않습니다.

3.4.1. 기본 구성을 사용하여 JBoss EAP 서버 프로비저닝

빌더 이미지를 사용하여 OpenShift에 기본 구성으로 JBoss EAP 서버를 설치하고 구성할 수 있습니다. 원활한 배포를 위해 절차를 수행하여 서버를 프로비저닝하고 애플리케이션 파일을 전송하고 필요한 사용자 지정을 수행합니다.

사전 요구 사항

  • 지원되는 Red Hat JBoss Enterprise Application Platform 컨테이너 이미지에 액세스할 수 있습니다. 예를 들면 다음과 같습니다.

    • registry.redhat.io/jboss-eap-8/eap8-openjdk17-builder-openshift-rhel8
    • registry.redhat.io/jboss-eap-8/eap8-openjdk17-runtime-openshift-rhel8
  • podman이 시스템에 설치되어 있어야 합니다. 지원되는 RHEL에서 사용 가능한 최신 podman 버전을 사용합니다. 자세한 내용은 Red Hat JBoss Enterprise Application Platform 8.0 지원 구성을 참조하십시오.

프로세스

  1. 제공된 대로 다음 Dockerfile 콘텐츠를 복사합니다.

    # Use EAP 8 Builder image to create a JBoss EAP 8 server
    # with its default configuration
    
    FROM registry.redhat.io/jboss-eap-8/eap8-openjdk17-builder-openshift-rhel8:latest AS builder
    
    # Set up environment variables for provisioning. 1
    ENV GALLEON_PROVISION_FEATURE_PACKS org.jboss.eap:wildfly-ee-galleon-pack,org.jboss.eap.cloud:eap-cloud-galleon-pack
    ENV GALLEON_PROVISION_LAYERS cloud-default-config
    # Specify the JBoss EAP version  2
    ENV GALLEON_PROVISION_CHANNELS org.jboss.eap.channels:eap-8.0
    
    
    # Run the assemble script to provision the server.
    RUN /usr/local/s2i/assemble
    
    # Copy the JBoss EAP 8 server from the builder image to the runtime image.
    FROM registry.redhat.io/jboss-eap-8/eap8-openjdk17-runtime-openshift-rhel8:latest AS runtime
    
    # Set appropriate ownership and permissions.
    COPY --from=builder --chown=jboss:root $JBOSS_HOME $JBOSS_HOME
    
    # Steps to add:
    # (1) COPY the WAR/EAR to $JBOSS_HOME/standalone/deployments
    #       with the jboss:root user. For example:
    #     COPY --chown=jboss:root my-app.war $JBOSS_HOME/standalone/deployments 3
    # (2) (optional) server modification. You can modify EAP server configuration:
    #
    #       * invoke management operations. For example
    #
    #        RUN $JBOSS_HOME/bin/jboss-cli.sh --commands="embed-server,/system-property=Foo:add(value=Bar)"
    #
    #        First operation must always be embed-server.
    #
    #       * copy a modified standalone.xml in $JBOSS_HOME/standalone/configuration/
    #          for example
    #
    #      COPY --chown=jboss:root standalone.xml  $JBOSS_HOME/standalone/configuration
    
    # Ensure appropriate permissions for the copied files.
    RUN chmod -R ug+rwX $JBOSS_HOME
    1
    이미지 내에서 JBoss EAP Maven 플러그인에서 사용하는 MAVEN_MIRROR_URL 환경 변수를 지정할 수 있습니다. 자세한 내용은 Artifact 저장소 미러를 참조하십시오.
    2
    마이너 릴리스에 대해 이 Dockerfile을 업데이트할 필요가 없습니다. 특정 버전을 사용하려면 GALLEON_PROVISION_CHANNELS 환경 변수에 JBoss EAP 버전을 지정합니다. 자세한 내용은 환경 변수를 참조하십시오.
    3
    컨테이너에 WAR 파일을 포함하도록 복사한 Dockerfile을 수정합니다. 예를 들면 다음과 같습니다.
    COPY --chown=jboss:root <my-app.war> $JBOSS_HOME/standalone/deployments

    <myapp.war>를 이미지에 추가하려는 웹 아카이브 경로로 바꿉니다.

  2. podman을 사용하여 애플리케이션 이미지를 빌드합니다.

    $ podman build -t my-app .

    명령이 실행되면 my-app 컨테이너 이미지를 OpenShift에 배포할 수 있습니다.

  3. 다음 옵션 중 하나에 컨테이너 이미지를 업로드합니다.

  4. 레지스트리에서 이미지를 배포할 때 Helm 차트, Operator 또는 Deployment와 같은 배포 전략을 사용합니다. 선호하는 방법을 선택하고 요구 사항에 따라 전체 이미지 URL 또는 ImageStream을 사용합니다. 자세한 내용은 OpenShift에서 JBoss EAP 애플리케이션을 빌드 및 배포하기 위해 Helm 차트 사용을 참조하십시오.

3.5. OpenID Connect를 사용하여 OpenShift에서 JBoss EAP 애플리케이션 보안

외부 OpenID 공급자를 사용하여 인증을 위임하려면 JBoss EAP 기본 OpenID Connect(OIDC) 클라이언트를 사용합니다. OIDC는 JBoss EAP와 같은 클라이언트가 OpenID 공급자가 수행한 인증을 기반으로 사용자 ID를 확인할 수 있는 ID 계층입니다.

elytron-oidc-client 하위 시스템 및 elytron-oidc-client Galleon 계층은 JBoss EAP에서 기본 OIDC 클라이언트를 제공하여 OpenID 공급자와 연결합니다. JBoss EAP는 OpenID 공급자 구성에 따라 애플리케이션의 가상 보안 도메인을 자동으로 생성합니다.

elytron-oidc-client 하위 시스템을 다음과 같은 세 가지 방법으로 구성할 수 있습니다.

  • 배포에 oidc.json 추가
  • CLI 스크립트를 실행하여 elytron-oidc-client 하위 시스템을 구성합니다.
  • OpenShift에서 JBoss EAP 서버 시작 시 elytron-oidc-client 하위 시스템을 구성하는 환경 변수를 정의합니다.
참고

다음 절차에서는 OIDC로 애플리케이션을 보호하기 위해 환경 변수를 사용하여 elytron-oidc-client 하위 시스템을 구성하는 방법을 설명합니다.

3.5.1. JBoss EAP의 OpenID Connect 구성

OpenID 공급자를 사용하여 애플리케이션을 보호하면 보안 도메인 리소스를 로컬로 구성할 필요가 없습니다. elytron-oidc-client 하위 시스템은 JBoss EAP에서 기본 OpenID Connect(OIDC) 클라이언트를 제공하여 OpenID 공급자와 연결합니다. JBoss EAP는 OpenID 공급자 구성에 따라 애플리케이션의 가상 보안 도메인을 자동으로 생성합니다.

중요

Red Hat build of Keycloak과 함께 OIDC 클라이언트를 사용합니다. JSON 웹 토큰(JWT)인 액세스 토큰을 사용하도록 구성할 수 있고 RS256, RS384, ES256, ES384 또는 ES512 서명 알고리즘을 사용하도록 구성할 수 있는 경우 다른 OpenID 공급자를 사용할 수 있습니다.

OIDC 사용을 활성화하려면 elytron-oidc-client 하위 시스템 또는 애플리케이션 자체를 구성할 수 있습니다. JBoss EAP는 다음과 같이 OIDC 인증을 활성화합니다.

  • 애플리케이션을 JBoss EAP에 배포할 때 elytron-oidc-client 하위 시스템은 배포를 검사하여 OIDC 인증 메커니즘이 필요한지 감지합니다.
  • 하위 시스템에서 elytron-oidc-client 하위 시스템 또는 애플리케이션 배포 설명자 중 하나에서 배포에 대한 OIDC 구성을 감지하면 JBoss EAP는 애플리케이션에 대한 OIDC 인증 메커니즘을 활성화합니다.
  • 하위 시스템이 두 위치에서 OIDC 구성을 감지하면 elytron-oidc-client 하위 시스템 secure-deployment 속성의 구성이 애플리케이션 배포 설명자의 구성보다 우선합니다.

3.5.2. OpenID Connect로 보안된 애플리케이션 생성

웹 애플리케이션을 생성하려면 필수 종속성 및 디렉터리 구조가 포함된 Maven 프로젝트를 생성합니다. 로그인한 사용자의 주체 및 특성에서 얻은 사용자 이름을 반환하는 서블릿이 포함된 웹 애플리케이션을 생성합니다. 로그인한 사용자가 없는 경우 서블릿은 "NO AUTHENTICATED USER" 텍스트를 반환합니다.

사전 요구 사항

프로세스

  1. mvn 명령을 사용하여 Maven 프로젝트를 설정합니다. 명령은 프로젝트에 대한 디렉터리 구조와 pom.xml 구성 파일을 생성합니다.

    구문

    $ mvn archetype:generate \
    -DgroupId=${group-to-which-your-application-belongs} \
    -DartifactId=${name-of-your-application} \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false

    예제

    $ mvn archetype:generate \
    -DgroupId=com.example.app \
    -DartifactId=simple-webapp-example \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false

  2. 애플리케이션 루트 디렉터리로 이동합니다.

    구문

    $ cd <name-of-your-application>

    예제

    $ cd simple-webapp-example

  3. 생성된 pom.xml 파일의 내용을 다음 텍스트로 바꿉니다.

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.example.app</groupId>
      <artifactId>simple-webapp-example</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <name>simple-webapp-example Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
      <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <version.maven.war.plugin>3.3.2</version.maven.war.plugin>
        <version.eap.plugin>1.0.0.Final-redhat-00014</version.eap.plugin>
        <version.server>8.0.0.GA-redhat-00009</version.server>
        <version.bom.ee>${version.server}</version.bom.ee>
      </properties>
    
    
      <repositories>
        <repository>
            <id>jboss</id>
            <url>https://maven.repository.redhat.com/ga/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
      </repositories>
    
      <pluginRepositories>
        <pluginRepository>
            <id>jboss</id>
            <url>https://maven.repository.redhat.com/ga/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
      </pluginRepositories>
    
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-eap-ee-with-tools</artifactId>
            <version>${version.bom.ee}</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
    
      <dependencies>
        <dependency>
          <groupId>jakarta.servlet</groupId>
          <artifactId>jakarta.servlet-api</artifactId>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>org.wildfly.security</groupId>
          <artifactId>wildfly-elytron-auth-server</artifactId>
        </dependency>
      </dependencies>
    
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>${version.maven.war.plugin}</version>
            </plugin>
            <plugin>
                <groupId>org.jboss.eap.plugins</groupId>
                <artifactId>eap-maven-plugin</artifactId>
                <version>${version.eap.plugin}</version>
                <configuration>
                    <channels>
                        <channel>
                            <manifest>
                                <groupId>org.jboss.eap.channels</groupId>
                                <artifactId>eap-8.0</artifactId>
                            </manifest>
                        </channel>
                    </channels>
                    <feature-packs>
                        <feature-pack>
                            <location>org.jboss.eap:wildfly-ee-galleon-pack</location>
                        </feature-pack>
                        <feature-pack>
                            <location>org.jboss.eap.cloud:eap-cloud-galleon-pack</location>
                        </feature-pack>
                    </feature-packs>
                    <layers>
                        <layer>cloud-server</layer>
                        <layer>elytron-oidc-client</layer>
                    </layers>
                    <galleon-options>
                            <jboss-fork-embedded>true</jboss-fork-embedded>
                    </galleon-options>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>package</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    </project>
    참고
  4. Java 파일을 저장할 디렉터리를 만듭니다.

    구문

    $ mkdir -p src/main/java/<path_based_on_artifactID>

    예제

    $ mkdir -p src/main/java/com/example/app

  5. 새 디렉터리로 이동합니다.

    구문

    $ cd src/main/java/<path_based_on_artifactID>

    예제

    $ cd src/main/java/com/example/app

  6. 다음 콘텐츠를 사용하여 SecuredServlet.java 파일을 생성합니다.

    package com.example.app;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.security.Principal;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Set;
    
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import org.wildfly.security.auth.server.SecurityDomain;
    import org.wildfly.security.auth.server.SecurityIdentity;
    import org.wildfly.security.authz.Attributes;
    import org.wildfly.security.authz.Attributes.Entry;
    /**
     * A simple secured HTTP servlet. It returns the user name and
     * attributes obtained from the logged-in user's Principal. If
     * there is no logged-in user, it returns the text
     * "NO AUTHENTICATED USER".
     */
    
    @WebServlet("/secured")
    public class SecuredServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            try (PrintWriter writer = resp.getWriter()) {
    
            	Principal user = req.getUserPrincipal();
            	SecurityIdentity identity = SecurityDomain.getCurrent().getCurrentSecurityIdentity();
            	Attributes identityAttributes = identity.getAttributes();
            	Set <String> keys = identityAttributes.keySet();
            	String attributes = "<ul>";
    
            	for (String attr : keys) {
            		attributes += "<li> " +  attr + " : " + identityAttributes.get(attr).toString() + "</li>";
            	}
    
            	attributes+="</ul>";
            	writer.println("<html>");
            	writer.println("  <head><title>Secured Servlet</title></head>");
            	writer.println("  <body>");
            	writer.println("    <h1>Secured Servlet</h1>");
            	writer.println("    <p>");
            	writer.print(" Current Principal '");
            	writer.print(user != null ? user.getName() : "NO AUTHENTICATED USER");
            	writer.print("'");
            	writer.print(user != null ? "\n" + attributes : "");
            	writer.println("    </p>");
            	writer.println("  </body>");
            	writer.println("</html>");
            }
        }
    
    }
  7. 애플리케이션 리소스를 보호하도록 애플리케이션의 web.xml 을 구성합니다.

    예제

    <?xml version="1.0" encoding="UTF-8"?>
    
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        metadata-complete="false">
    
        <security-constraint>
            <web-resource-collection>
                <web-resource-name>secured</web-resource-name>
                <url-pattern>/secured</url-pattern>
            </web-resource-collection>
    
            <auth-constraint>
                <role-name>Users</role-name>
            </auth-constraint>
        </security-constraint>
    
        <login-config>
            <auth-method>OIDC</auth-method>
        </login-config>
    
        <security-role>
            <role-name>*</role-name>
        </security-role>
    </web-app>

    이 예에서는 사용자가 역할이 있는 사용자만 애플리케이션에 액세스할 수 있습니다.

3.5.3. OpenShift에 애플리케이션 배포

JBoss EAP 애플리케이션 개발자는 OpenID Connect 하위 시스템을 사용하는 OpenShift에 애플리케이션을 배포하고 Red Hat build of Keycloak 서버와 통합할 수 있습니다. 아래 절차에 따라 애플리케이션을 배포합니다.

사전 요구 사항

다음 구성을 사용하여 OpenShift에서 Red Hat build of Keycloak 서버를 구성했습니다. 자세한 내용은 Red Hat build of Keycloak Operator 를 참조하십시오.

  • Cryostat라는 영역을 생성합니다.
  • demo 라는 사용자를 만듭니다.
  • demo 라는 사용자의 암호를 설정합니다. 임시OFF 로 전환하고 암호 설정을 클릭합니다. 확인 프롬프트에서 암호 설정을 클릭합니다.
  • Users 라는 역할을 생성합니다.
  • 사용자 demo 사용자 역할을 할당합니다.
  • 클라이언트 역할 필드에서 JBoss EAP에 대해 구성한 realm-management 를 선택합니다.
  • create-client 역할을 클라이언트 realm-management 에 할당합니다.

프로세스

  1. 애플리케이션 코드를 Git 리포지토리에 배포합니다.
  2. OIDC 구성이 포함된 보안을 생성합니다.

    1. 다음 콘텐츠를 사용하여 oidc-secret.yaml 이라는 파일을 생성합니다.

      apiVersion: v1
      kind: Secret
      metadata:
        name: oidc-secret
      type: Opaque
      stringData:
        OIDC_PROVIDER_NAME: rh-sso
        OIDC_USER_NAME: demo
        OIDC_USER_PASSWORD: demo
        OIDC_SECURE_DEPLOYMENT_SECRET: mysecret
    2. 다음 명령을 사용하여 보안을 생성합니다.

      $ oc apply -f oidc-secret.yaml
  3. 다음 콘텐츠를 사용하여 helm.yaml 이라는 파일을 생성합니다.

    build:
      uri: [URL TO YOUR GIT REPOSITORY]
    deploy:
      envFrom:
    	- secretRef:
        	  name: oidc-secret
  4. JBoss EAP Helm 차트를 사용하여 예제 애플리케이션을 배포합니다.

    $ helm install eap-oidc-test-app -f helm.yaml jboss-eap/eap8
  5. oidc-secret.yaml 파일에 환경 변수를 추가하여 OIDC 공급자 URL 및 애플리케이션 호스트 이름을 구성합니다.

    yaml
    stringData:
      ...
      OIDC_HOSTNAME_HTTPS: <host of the application>
      OIDC_PROVIDER_URL: https://<host of the SSO provider>/realms/JBossEAP

    OIDC_HOSTNAME_HTTPS 의 값은 다음 출력에 해당합니다.

    echo $(oc get route eap-oidc-test-app --template='{{ .spec.host }}')

    OIDC_PROVIDER_URL 값은 다음 출력에 해당합니다.

    echo https://$(oc get route sso --template='{{ .spec.host }}')/realms/JBossEAP

    OIDC_HOSTNAME_HTTP(S) 가 설정되지 않은 경우 경로 검색 시도가 수행됩니다. 경로 검색을 활성화하려면 OpenShift 사용자가 경로 리소스를 나열할 수 있어야 합니다. 예를 들어 routeview 역할을 생성하고 view 사용자와 연결하려면 다음 oc 명령을 사용합니다.

    $ oc create role <role-name> --verb=list --resource=route
    
    $ oc adm policy add-role-to-user <role-name> <user-name> --role-namespace=<your namespace>
  6. oc apply -f oidc-secret.yaml 을 사용하여 시크릿을 업데이트합니다.
  7. 애플리케이션을 다시 배포하여 OpenShift에서 새 환경 변수를 사용하는지 확인합니다.

    $ oc rollout restart deploy eap-oidc-test-app

검증

  1. 브라우저에서 https://<eap-oidc-test-app route>/ 로 이동합니다.

    Red Hat build of Keycloak 로그인 페이지로 리디렉션됩니다.

  2. 보안 서블릿에 액세스합니다.
  3. 다음 인증 정보로 로그인합니다.

    username: demo
    password: demo

    보안 주체 ID가 포함된 페이지가 나타납니다.

3.5.4. 환경 변수 기반 구성

이러한 환경 변수를 사용하여 OpenShift 이미지에서 JBoss EAP OIDC 지원을 구성합니다.

표 3.1. 환경 변수

환경 변수레거시 SSO 환경 변수설명필수 항목기본값

OIDC_PROVIDER_NAME

없음. SSO_* 환경 변수가 사용되는 경우 "rh-sso" 이름이 내부적으로 설정됩니다.

OIDC_PROVIDER_NAME 변수를 사용할 때 rh-sso 로 설정해야 합니다.

제공됨

 

OIDC_PROVIDER_URL

$SSO_URL/realms/$SSO_REALM

공급자의 URL입니다.

제공됨

 

OIDC_USER_NAME

SSO_USERNAME

동적 클라이언트 등록에는 토큰을 받으려면 사용자 이름이 필요합니다.

제공됨

 

OIDC_USER_PASSWORD

SSO_PASSWORD

동적 클라이언트 등록에는 토큰을 받으려면 사용자 암호가 필요합니다.

제공됨

 

OIDC_SECURE_DEPLOYMENT_SECRET

SSO_SECRET

secure-deployment 하위 시스템과 인증 서버 클라이언트 모두 알려져 있습니다.

없음

 

OIDC_SECURE_DEPLOYMENT_PRINCIPAL_ATTRIBUTE

SSO_PRINCIPAL_ATTRIBUTE

보안 주체 이름 값을 구성합니다.

없음

rh-sso 의 기본값은 sub (ID 토큰)입니다.

일반적인 값: preferred_username.

OIDC_SECURE_DEPLOYMENT_ENABLE_CORS

SSO_ENABLE_CORS

Single Sign-On 애플리케이션에 대해 CORS를 활성화합니다.

없음

기본값은 False입니다.

OIDC_SECURE_DEPLOYMENT_BEARER_ONLY

SSO_BEARER_ONLY

전달자 토큰만 허용하고 로깅을 지원하지 않는 배포입니다.

없음

기본값은 False입니다.

OIDC_PROVIDER_SSL_REQUIRED

NONE

기본값은 private 및 local 주소와 같은 external이지만 https는 지원하지 않습니다.

없음

외부

OIDC_PROVIDER_TRUSTSTORE

SSO_TRUSTSTORE

realm trustore 파일을 지정합니다. 설정되지 않은 경우 어댑터는 HTTPS 요청을 처리할 때 신뢰 관리자를 사용할 수 없습니다.

없음

 

OIDC_PROVIDER_TRUSTSTORE_DIR

SSO_TRUSTSTORE_DIR

영역 신뢰 저장소를 찾을 디렉터리입니다. 설정되지 않은 경우 어댑터는 HTTPS 요청을 처리할 때 신뢰 관리자를 사용할 수 없습니다.

없음

 

OIDC_PROVIDER_TRUSTSTORE_PASSWORD

SSO_TRUSTSTORE_PASSWORD

realm truststore 암호를 지정합니다. 설정되지 않은 경우 어댑터는 HTTPS 요청을 처리할 때 신뢰 관리자를 사용할 수 없습니다.

없음

 

OIDC_PROVIDER_TRUSTSTORE_CERTIFICATE_ALIAS

SSO_TRUSTSTORE_CERTIFICATE_ALIAS

realm trustore 별칭을 지정합니다. 클라이언트를 등록하려면 인증 서버와 상호 작용해야 합니다.

없음

 

OIDC_DISABLE_SSL_CERTIFICATE_VALIDATION

SSO_DISABLE_SSL_CERTIFICATE_VALIDATION

클라이언트를 등록하기 위해 인증 서버와 상호 작용할 때 인증서 검증을 비활성화합니다.

없음

 

OIDC_HOSTNAME_HTTP

HOSTNAME_HTTP

비보안 경로에 사용되는 호스트 이름입니다.

없음

경로가 검색됩니다.

OIDC_HOSTNAME_HTTPS

HOSTNAME_HTTPS

보안 경로에 사용되는 호스트 이름입니다.

없음

보안 경로가 검색됩니다.

NONE

SSO_PUBLIC_KEY

Single Sign-On 영역의 공개 키입니다. 이 옵션은 사용되지 않으며 공개 키는 OIDC 하위 시스템에서 자동으로 검색됩니다.

없음

설정되어 있으면 이 옵션이 무시되고 있다는 경고가 표시됩니다.

3.6. SAML을 사용하여 애플리케이션 보안

SAML(Security Assertion Markup Language)은 두 당사자 간에 인증 및 권한 부여 정보를 교환할 수 있는 데이터 형식 및 프로토콜 역할을 합니다. 이러한 두 당사자는 일반적으로 ID 공급자와 서비스 공급자가 포함됩니다. 이 정보는 어설션이 포함된 SAML 토큰의 형태를 취합니다. ID 공급자는 이러한 SAML 토큰을 주체에 발행하여 이러한 주체가 서비스 공급자로 인증할 수 있도록 합니다. 주체는 SAML v2에서 브라우저 기반 Single Sign-On을 활성화하는 여러 서비스 공급자와 SAML 토큰을 재사용할 수 있습니다.

Keycloak SAML 어댑터 기능 팩에서 제공하는 Galleon 계층을 사용하여 웹 애플리케이션을 보호할 수 있습니다.

Keycloak SAML 어댑터 기능 팩에 대한 자세한 내용은 SAML을 사용하여 애플리케이션 보안을 위한 Keycloak SAML 어댑터 기능 팩을 참조하십시오.

3.6.1. SAML을 사용하여 애플리케이션 보안을 위한 Keycloak SAML 어댑터 기능 팩

Keycloak SAML 어댑터 Galleon 팩은 keycloak-saml 계층을 포함하는 Galleon 기능 팩입니다. 기능 팩에 keycloak-saml 계층을 사용하여 JBoss EAP에 필요한 모듈 및 구성을 설치합니다. SAML을 사용할 때 Red Hat build of Keycloak을 SSO(Single Sign-On) ID 공급자로 사용하려면 이러한 모듈과 구성이 필요합니다. S2I(Source-to-Image)에 keycloak-saml SAML 어댑터 Galleon 계층을 사용하는 경우 Keycloak의 Red Hat 빌드와 같은 IDP(Identity Service Provider)로 자동 등록할 수 있는 SAML 클라이언트 기능을 선택적으로 사용할 수 있습니다.

3.6.2. OpenShift의 SAML 공급자로 Red Hat build of Keycloak 구성

Red Hat build of Keycloak은 SSO(Single Sign-On)로 웹 애플리케이션을 보호하기 위한 ID 및 액세스 관리 공급자입니다. OAuth 2.0 및 SAML에 대한 확장인 OpenID Connect를 지원합니다.

다음 절차에서는 SAML을 사용하여 애플리케이션을 보호하는 데 필요한 필수 단계를 간략하게 설명합니다. 자세한 내용은 Red Hat build of Keycloak 문서를 참조하십시오.

사전 요구 사항

  • Red Hat build of Keycloak에 대한 관리자 액세스 권한이 있습니다.
  • Red Hat build of Keycloak이 실행 중입니다. 자세한 내용은 Red Hat build of Keycloak Operator 를 참조하십시오.
  • oc login 명령을 사용하여 OpenShift에 로그인했습니다.

프로세스

  1. Single Sign-On 영역, 사용자 및 역할을 생성합니다.
  2. Java keytool 명령을 사용하여 키 및 인증서를 생성합니다.

    keytool -genkeypair -alias saml-app -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -storepass password -dname "CN=saml-basic-auth,OU=EAP SAML Client,O=Red Hat EAP QE,L=MB,S=Milan,C=IT" -ext ku:c=dig,keyEncipherment -validity 365
  3. 키 저장소를 JKS(Java KeyStore) 형식으로 가져옵니다.

    keytool -importkeystore -deststorepass password -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype PKCS12 -srcstorepass password
  4. OpenShift에서 키 저장소에 대한 시크릿을 생성합니다.

    $ oc create secret generic saml-app-secret --from-file=keystore.jks=./keystore.jks --type=opaque
참고

이러한 단계는 자동 SAML 클라이언트 등록 기능을 사용하는 경우에만 필요합니다. JBoss EAP에서 새 SAML 클라이언트를 client-admin 사용자로 Red Hat 빌드에 등록할 때 JBoss EAP는 새 SAML 클라이언트의 인증서를 Red Hat build of Keycloak 클라이언트 구성에 저장해야 합니다. 이를 통해 JBoss EAP는 Red Hat build of Keycloak에 공개 인증서를 저장하는 동안 개인 키를 유지할 수 있으며, 이를 통해 Red Hat build of Keycloak과의 통신에 대해 인증된 클라이언트를 설정할 수 있습니다.

3.6.3. SAML으로 보안된 애플리케이션 생성

SAML(Security Assertion Markup Language)을 사용하여 웹 애플리케이션 보안을 강화할 수 있습니다. SAML은 효과적인 사용자 인증 및 권한 부여 기능을 제공하며 SSO(Single Sign-On) 기능과 함께 웹 애플리케이션 강화를 위한 신뢰할 수 있는 선택이 가능합니다.

사전 요구 사항

프로세스

  1. mvn 명령을 사용하여 Maven 프로젝트를 설정합니다. 이 명령은 프로젝트에 대한 디렉터리 구조와 pom.xml 구성 파일을 둘 다 생성합니다.

    구문

    $ mvn archetype:generate \
    -DgroupId=${group-to-which-your-application-belongs} \
    -DartifactId=${name-of-your-application} \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false

    예제

    $ mvn archetype:generate \
    -DgroupId=com.example.app \
    -DartifactId=simple-webapp-example \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false

  2. 애플리케이션 루트 디렉터리로 이동합니다.

    구문

    $ cd <name-of-your-application>

    예제

    $ cd simple-webapp-example

  3. 생성된 pom.xml 파일의 내용을 다음 텍스트로 바꿉니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.example.app</groupId>
      <artifactId>simple-webapp-example</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <name>simple-webapp-example Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
      <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <version.maven.war.plugin>3.3.2</version.maven.war.plugin>
        <version.eap.plugin>1.0.0.Final-redhat-00014</version.eap.plugin>
        <version.server>8.0.0.GA-redhat-00009</version.server>
        <version.bom.ee>${version.server}</version.bom.ee>
      </properties>
    
      <repositories>
        <repository>
            <id>jboss</id>
            <url>https://maven.repository.redhat.com/ga/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
      </repositories>
    
      <pluginRepositories>
        <pluginRepository>
            <id>jboss</id>
            <url>https://maven.repository.redhat.com/ga/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
      </pluginRepositories>
    
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-eap-ee-with-tools</artifactId>
            <version>${version.bom.ee}</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
    
      <dependencies>
        <dependency>
          <groupId>jakarta.servlet</groupId>
          <artifactId>jakarta.servlet-api</artifactId>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>org.wildfly.security</groupId>
          <artifactId>wildfly-elytron-auth-server</artifactId>
        </dependency>
      </dependencies>
    
      <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>${version.maven.war.plugin}</version>
            </plugin>
            <plugin>
                <groupId>org.jboss.eap.plugins</groupId>
                <artifactId>eap-maven-plugin</artifactId>
                <version>${version.eap.plugin}</version>
                <configuration>
                    <channels>
                        <channel>
                            <manifest>
                                <groupId>org.jboss.eap.channels</groupId>
                                <artifactId>eap-8.0</artifactId>
                            </manifest>
                        </channel>
                    </channels>
                    <feature-packs>
                        <feature-pack>
                            <location>org.jboss.eap:wildfly-ee-galleon-pack</location>
                        </feature-pack>
                        <feature-pack>
                            <location>org.jboss.eap.cloud:eap-cloud-galleon-pack</location>
                        </feature-pack>
                        <feature-pack>
                            <location>org.keycloak:keycloak-saml-adapter-galleon-pack</location>
                        </feature-pack>
                    </feature-packs>
                    <layers>
                        <layer>cloud-server</layer>
                        <layer>keycloak-saml</layer>
                    </layers>
                    <galleon-options>
                        <jboss-fork-embedded>true</jboss-fork-embedded>
                    </galleon-options>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>package</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
      </build>
    </project>
    참고
  4. Java 파일을 저장할 디렉터리를 만듭니다.

    구문

    $ mkdir -p src/main/java/<path_based_on_artifactID>

    예제

    $ mkdir -p src/main/java/com/example/app

  5. 새 디렉터리로 이동합니다.

    구문

    $ cd src/main/java/<path_based_on_artifactID>

    예제

    $ cd src/main/java/com/example/app

  6. 다음 설정이 포함된 SecuredServlet.java 파일을 생성합니다.

    package com.example.app;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.security.Principal;
    import java.util.Set;
    
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import org.wildfly.security.auth.server.SecurityDomain;
    import org.wildfly.security.auth.server.SecurityIdentity;
    import org.wildfly.security.authz.Attributes;
    /**
     * A simple secured HTTP servlet. It returns the user name and
     * attributes obtained from the logged-in user's Principal. If
     * there is no logged-in user, it returns the text
     * "NO AUTHENTICATED USER".
     */
    
    @WebServlet("/secured")
    public class SecuredServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            try (PrintWriter writer = resp.getWriter()) {
    
            	Principal user = req.getUserPrincipal();
            	SecurityIdentity identity = SecurityDomain.getCurrent().getCurrentSecurityIdentity();
            	Attributes identityAttributes = identity.getAttributes();
            	Set <String> keys = identityAttributes.keySet();
            	String attributes = "<ul>";
    
            	for (String attr : keys) {
            		attributes += "<li> " +  attr + " : " + identityAttributes.get(attr).toString() + "</li>";
            	}
    
            	attributes+="</ul>";
            	writer.println("<html>");
            	writer.println("  <head><title>Secured Servlet</title></head>");
            	writer.println("  <body>");
            	writer.println("    <h1>Secured Servlet</h1>");
            	writer.println("    <p>");
            	writer.print(" Current Principal '");
            	writer.print(user != null ? user.getName() : "NO AUTHENTICATED USER");
            	writer.print("'");
            	writer.print(user != null ? "\n" + attributes : "");
            	writer.println("    </p>");
            	writer.println("  </body>");
            	writer.println("</html>");
            }
        }
    
    }
  7. web.xml 파일의 디렉터리 구조를 생성합니다.

    mkdir -p src/main/webapp/WEB-INF
    cd src/main/webapp/WEB-INF
  8. 애플리케이션 리소스를 보호하도록 애플리케이션의 web.xml 파일을 구성합니다.

    예제

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        metadata-complete="false">
    
        <security-constraint>
            <web-resource-collection>
                <web-resource-name>secured</web-resource-name>
                <url-pattern>/secured</url-pattern>
            </web-resource-collection>
    
            <auth-constraint>
                <role-name>user</role-name>
            </auth-constraint>
        </security-constraint>
    
        <login-config>
            <auth-method>KEYCLOAK-SAML</auth-method>
        </login-config>
    
        <security-role>
            <role-name>user</role-name>
        </security-role>
    </web-app>

    이 예에서는 사용자 역할이 있는 사용자만 애플리케이션에 액세스할 수 있습니다.

검증

애플리케이션을 생성한 후 원격 Git 리포지토리에 커밋합니다.

  1. https://github.com/your-username/simple-webapp-example 과 같은 Git 리포지토리를 생성합니다. 원격 리포지토리 및 Git에 대한 자세한 내용은 Git 시작하기 - 원격 리포지토리 정보를 참조하십시오.
  2. 애플리케이션의 루트 폴더에서 다음 Git 명령을 실행합니다.

    git init -b main
    git add pom.xml src
    git commit -m "First commit"
    git remote add origin git@github.com:your-username/simple-webapp-example.git
    git remote -v
    git push -u origin main

이러한 단계는 애플리케이션을 원격 리포지토리에 커밋하여 온라인으로 액세스할 수 있도록 합니다.

3.6.4. OpenShift에서 SAML 보안 애플리케이션 빌드 및 배포

JBoss EAP 및 SSO(Single Sign-On) Galleon 계층을 사용하여 OpenShift에서 SAML으로 보안된 애플리케이션을 빌드하고 배포할 수 있습니다.

사전 요구 사항

  • Helm이 설치되어 있어야 합니다. 자세한 내용은 Helm 설치를 참조하십시오.
  • SAML 애플리케이션 프로젝트를 생성하고 Git 리포지토리에서 액세스할 수 있도록 했습니다.
  • 관리 CLI에 이 명령을 입력하여 JBoss EAP Helm 차트 리포지토리를 설치했습니다.

    $ helm repo add jboss-eap https://jbossas.github.io/eap-charts/

프로세스

  1. 애플리케이션 코드를 Git 리포지토리에 배포합니다.
  2. 필요한 환경 변수가 포함된 OpenShift 시크릿을 생성합니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: saml-secret
    type: Opaque
    stringData:
      SSO_REALM: "saml-basic-auth"
      SSO_USERNAME: "client-admin"
      SSO_PASSWORD: "client-admin"
      SSO_SAML_CERTIFICATE_NAME: "saml-app"
      SSO_SAML_KEYSTORE: "keystore.jks"
      SSO_SAML_KEYSTORE_PASSWORD: "password"
      SSO_SAML_KEYSTORE_DIR: "/etc/sso-saml-secret-volume"
      SSO_SAML_LOGOUT_PAGE: "/simple-webapp-example"
      SSO_DISABLE_SSL_CERTIFICATE_VALIDATION: "true"
  3. 제공된 YAML 콘텐츠를 saml-secret.yaml 과 같은 파일에 저장합니다.
  4. 다음 명령을 사용하여 저장된 YAML 파일을 적용합니다.

    oc apply -f saml-secret.yaml
  5. 다음 설정이 포함된 helm.yaml 파일을 생성합니다.

    build:
      uri: [WEB ADDRESS TO YOUR GIT REPOSITORY]
    deploy:
      volumes:
        - name: saml-keystore-volume
          secret:
            secretName: saml-app-secret
      volumeMounts:
        - name: saml-keystore-volume
          mountPath: /etc/sso-saml-secret-volume
          readOnly: true
      envFrom:
        - secretRef:
            name: saml-secret
    참고

    http://www.redhat.com 과 같은 HTTP 형식으로 웹 주소를 지정합니다. maven 미러를 사용하는 경우 다음과 같이 웹 주소를 지정합니다.

    build:
      uri: [WEB ADDRESS TO YOUR GIT REPOSITORY]
      env:
        - name: "MAVEN_MIRROR_URL"
          value: "http://..."
  6. JBoss EAP Helm 차트를 사용하여 예제 애플리케이션을 배포합니다.

    $ helm install saml-app -f helm.yaml jboss-eap/eap8
  7. saml-secret.yaml 파일에 환경 변수를 추가하여 Keycloak 서버 URL 및 애플리케이션 경로를 구성합니다.

    stringData:
      ...
      HOSTNAME_HTTPS: <saml-app application route>
      SSO_URL: https://<host of the Keycloak server>

    &lt ;saml-app 애플리케이션 route > 및 < host of the Keycloak server >를 적절한 값으로 바꿉니다.

    HOSTNAME_HTTPS 의 값은 다음 출력에 해당합니다.

    echo $(oc get route saml-app --template='{{ .spec.host }}')

    SSO_URL 의 값은 다음 출력에 해당합니다.

    echo https://$(oc get route sso --template='{{ .spec.host }}')
    참고

    이 명령을 사용할 수 없는 경우 oc get routes 를 사용하여 사용 가능한 경로를 나열하고 Keycloak 인스턴스의 Red Hat 빌드 경로를 선택합니다.

  8. oc apply -f saml-secret.yaml 을 사용하여 시크릿을 업데이트합니다.

검증

  1. 애플리케이션을 다시 배포하여 OpenShift에서 새 환경 변수를 사용하는지 확인합니다.

    $ oc rollout restart deploy saml-app
  2. 브라우저에서 애플리케이션 URL로 이동합니다. 예를 들어 https://<saml-app route>/simple-webapp-example.

    Keycloak 로그인 페이지의 Red Hat 빌드로 리디렉션됩니다.

  3. 웹 주소를 가져오려면 다음 명령을 사용하여 보안 서블릿에 액세스합니다.

    echo https://$(oc get route saml-app --template='{{ .spec.host }}')/simple-webapp-example/secured
  4. 다음 인증 정보로 로그인합니다.

    username: demo
    password: demo

    보안 주체 ID가 포함된 페이지가 표시됩니다.

이제 SAML을 사용하여 애플리케이션이 보호됩니다.

3.6.5. SSO 영역, 사용자 및 역할 생성

Red Hat build of Keycloak 환경에서 SSO(Single Sign-On) 영역을 구성하고, 사용자 역할을 정의하고, 액세스 제어를 관리할 수 있습니다. 이러한 작업을 통해 보안을 강화하고 사용자 액세스 관리를 단순화하여 인증 환경을 간소화할 수 있습니다. 이는 SSO 설정을 최적화하고 사용자 인증 프로세스를 개선하는 데 중요합니다.

사전 요구 사항

  • Red Hat build of Keycloak에 대한 관리자 액세스 권한이 있습니다.
  • Red Hat build of Keycloak이 실행 중입니다.

프로세스

  1. URL을 사용하여 Keycloak 관리 콘솔의 Red Hat 빌드에 로그인합니다. https://<SSO route>/.
  2. Red Hat build of Keycloak에 영역을 만듭니다(예: saml-basic-auth ). 나중에 이 영역을 사용하여 필요한 사용자, 역할 및 클라이언트를 생성할 수 있습니다.

    자세한 내용은 영역 생성을 참조하십시오.

  3. saml-basic-auth 영역에 역할을 생성합니다. 예를 들어 사용자.

    자세한 내용은 영역 역할 생성을 참조하십시오.

  4. 사용자를 생성합니다. 예를 들면 데모 입니다.

    자세한 내용은 사용자 생성 을 참조하십시오.

  5. 사용자의 암호를 만듭니다. 예를 들면 데모 입니다.

    암호가 임시가 아닌지 확인합니다. 자세한 내용은 사용자의 암호 설정을 참조하십시오.

  6. 로그인 액세스를 위해 사용자 역할을 데모 사용자에게 할당합니다.

    자세한 내용은 역할 매핑 할당을 참조하십시오.

  7. 사용자를 생성합니다. 예를 들어 client-admin 은 다음과 같습니다.

    JBoss EAP 서버가 시작될 때 Keycloak 서버에서 SAML 클라이언트를 생성하려면 추가 권한이 필요한 client-admin 사용자를 사용할 수 있습니다. 자세한 내용은 사용자 생성 을 참조하십시오.

  8. 사용자의 암호를 만듭니다. 예를 들어 client-admin 은 다음과 같습니다.

    암호가 임시가 아닌지 확인합니다. 자세한 내용은 사용자의 암호 설정을 참조하십시오.

  9. 클라이언트 역할 드롭다운 목록에서 realm-management 를 선택합니다.
  10. create-client,manage-clients, manage-realm 역할을 client-admin 사용자에게 할당합니다.

    자세한 내용은 역할 매핑 할당을 참조하십시오.

3.6.6. SAML 하위 시스템 구성을 위한 환경 변수

다음 변수를 이해하고 사용하여 환경 내에서 Keycloak 서버 통합을 최적화할 수 있습니다. 이렇게 하면 애플리케이션에 대한 원활하고 안전한 Keycloak 설정을 수행할 수 있습니다.

표 3.2. 환경 변수

환경 변수설명필수 항목

APPLICATION_NAME

배포 이름에서 파생된 클라이언트 이름에 접두사로 사용됩니다.

선택 사항

HOSTNAME_HTTP

HTTP OpenShift 경로에 대한 사용자 정의 호스트 이름입니다. 설정하지 않으면 경로 검색이 수행됩니다.

선택 사항

HOSTNAME_HTTPS

HTTPS OpenShift 경로에 대한 사용자 정의 호스트 이름입니다. 설정하지 않으면 경로 검색이 수행됩니다.

선택 사항

SSO_DISABLE_SSL_CERTIFICATE_VALIDATION

Keycloak 서버 인증서의 검증을 활성화하거나 비활성화하려면 true 또는 false 중에서 선택합니다. SSO 서버가 자체 서명된 인증서를 생성할 때 이를 true 로 설정하는 것이 좋습니다.

선택 사항

SSO_PASSWORD

Keycloak 영역과 상호 작용하고 클라이언트를 생성하고 등록할 수 있는 권한이 있는 사용자의 암호입니다. 예를 들어 client-admin 은 다음과 같습니다.

True

SSO_REALM

애플리케이션 클라이언트를 연결하는 SSO 영역입니다. 예를 들면 saml-basic-auth 입니다.

선택 사항

SSO_SAML_CERTIFICATE_NAME

SAML 클라이언트 키 저장소의 개인 키 및 인증서의 별칭입니다. 예를 들면 saml-app 입니다.

True

SSO_SAML_KEYSTORE

키 저장소 파일의 이름입니다. 예를 들어 keystore.jks.

True

SSO_SAML_KEYSTORE_DIR

클라이언트 키 저장소가 포함된 디렉터리입니다. 예를 들면 /etc/sso-saml-secret-volume 입니다.

True

SSO_SAML_KEYSTORE_PASSWORD

키 저장소 암호입니다. 예: 암호.

True

SSO_SAML_LOGOUT_PAGE

로그 아웃 페이지. 예를 들면 simple-webapp-example 입니다.

True

SSO_SAML_VALIDATE_SIGNATURE

서명의 유효성을 검사하려면 true 를 지정하거나 false 를 지정하여 유효성을 검사하지 않도록 합니다. 기본적으로 true입니다.

선택 사항

SSO_SECURITY_DOMAIN

undertow 및 Cryostat 하위 시스템을 보호하는 데 사용되는 보안 도메인의 이름입니다. 기본값은 keycloak 입니다.

선택 사항

SSO_TRUSTSTORE

서버 인증서가 포함된 truststore 파일 이름입니다.

선택 사항

SSO_TRUSTSTORE_CERTIFICATE_ALIAS

신뢰 저장소 내의 인증서 별칭입니다.

선택 사항

SSO_TRUSTSTORE_DIR

truststore가 포함된 디렉터리입니다.

선택 사항

SSO_TRUSTSTORE_PASSWORD

truststore 및 인증서의 암호입니다. 예를 들면 mykeystorepass.

선택 사항

SSO_URL

SSO 서버의 URL입니다. 예를 들어 < SSO 서버 액세스 경로>입니다.

True

SSO_USERNAME

Keycloak 영역과 상호 작용하고 클라이언트를 생성하고 등록할 수 있는 권한이 있는 사용자의 사용자 이름입니다. 예를 들어 client-admin 은 다음과 같습니다.

True

3.6.7. JBoss EAP 서버의 경로 검색

JBoss EAP 서버의 경로 검색 기능을 사용하여 서버의 성능을 최적화하고 지정된 네임스페이스에서 경로 구성을 간소화할 수 있습니다. 이 기능은 특히 HOSTNAME_HTTPS 변수가 지정되지 않은 경우 보다 원활한 운영 환경을 제공하기 위해 서버 효율성을 개선하는 데 중요합니다.

HOSTNAME_HTTPS 변수가 설정되지 않은 경우 JBoss EAP 서버는 경로 검색을 자동으로 시도합니다. 경로 검색을 활성화하려면 필요한 권한을 생성해야 합니다.

oc create role routeview --verb=list --resource=route -n YOUR_NAME_SPACE
oc policy add-role-to-user routeview system:serviceaccount:YOUR_NAME_SPACE:default --role-namespace=YOUR_NAME_SPACE -n YOUR_NAME_SPACE

3.6.8. 추가 리소스

3.7. 추가 리소스

4장. Helm 차트를 사용하여 OpenShift에 JBoss EAP 애플리케이션을 빌드 및 배포

Helm은 OpenShift에서 JBoss EAP 애플리케이션을 빌드, 배포 및 유지 관리할 수 있는 오픈 소스 패키지 관리자입니다. JBoss EAP 8.0에서 Helm 차트는 OpenShift 템플릿을 대체합니다.

4.1. Helm 차트 사용 사례

JBoss EAP 8.0과 함께 Helm 차트를 사용하여 다음을 수행할 수 있습니다.

  • OpenShift S2I(Source-to-Image)를 사용하여 Git 리포지토리에서 호스팅되는 Maven 프로젝트에서 애플리케이션을 빌드합니다.
  • OpenShift 클러스터(TLS 구성, 공용 경로)를 사용하여 OpenShift에 애플리케이션 이미지를 배포하여 애플리케이션을 노출합니다.
  • Helm 차트로 애플리케이션 이미지를 빌드하고 JBoss EAP Operator를 사용하여 이미지를 배포합니다.
  • 다른 방법을 사용하여 JBoss EAP의 애플리케이션 이미지를 빌드하고 Helm 차트를 사용하여 애플리케이션 이미지를 배포합니다.

4.2. OpenShift에서 JBoss EAP에 대한 Helm 차트 사용자 정의

애플리케이션의 특정 설정이 포함된 YAML 파일을 수정하여 JBoss EAP 애플리케이션의 Helm 차트를 사용자 지정할 수 있습니다.

YAML 파일에는 다음 두 가지 주요 섹션이 있습니다.

  • 빌드 구성입니다.
  • 배포 구성입니다.

YAML 보기를 통해 구성을 선택하면 OpenShift Development Console에서 직접 값 파일 파일을 편집하여 업데이트된 구성으로 Helm 릴리스를 업그레이드할 수 있습니다.

4.3. S2I를 사용하여 JBoss EAP 프로비저닝

애플리케이션 pom.xml 에서 Cryostat-maven-plugin 을 사용하여 JBoss EAP 서버를 프로비저닝합니다.

참고

build.s2i.featurePacks,build.s2i.galleonLayersbuild.s2i.channels 필드가 더 이상 사용되지 않습니다.

4.4. Helm 차트를 사용하여 JBoss EAP 애플리케이션 빌드 및 배포

빌드 및 배포 값을 구성하여 Helms 차트를 사용하여 JBoss EAP 애플리케이션을 빌드 할 수 있습니다. 빌드 구성에서 애플리케이션 코드를 호스팅하는 Git 리포지토리에 URL을 제공해야 합니다. 출력은 빌드된 애플리케이션 이미지가 포함된 ImageStreamTag 리소스입니다.

애플리케이션을 배포하려면 빌드된 애플리케이션 이미지가 포함된 ImageStreamTag 리소스를 제공해야 합니다. 출력은 OpenShift 내부 및 외부에서 애플리케이션에 액세스하는 데 사용할 수 있는 배포된 애플리케이션 및 기타 관련 리소스입니다.

사전 요구 사항

  • OpenShift 개발 콘솔에 로그인했습니다.
  • Git 리포지토리에서 호스팅되는 JBoss EAP 애플리케이션이 있습니다.
  • 애플리케이션은 Maven 프로젝트입니다.
  • org.jboss.eap.plugins:eap-maven-plugin 을 사용하여 JBoss EAP 8.0 서버를 프로비저닝하도록 애플리케이션을 구성했습니다.

프로세스

  1. 소스 리포지토리에서 애플리케이션 이미지를 빌드합니다.

    build:
      uri: <git repository URL of your application>
  2. 선택 사항: 빌드 섹션에 보안을 입력합니다.

    build:
      sourceSecret: <name of secret login to your Git repository>

검증

  • 애플리케이션이 성공적으로 배포된 경우 OpenShift 개발 콘솔의 Helm 릴리스 옆에 배포된 배지가 표시되어야 합니다.

4.5. OpenShift 개발 콘솔을 사용하여 애플리케이션 이미지 빌드

OpenShift Development Console에서 빌드 섹션을 구성하여 Helm 차트를 사용하여 JBoss EAP 애플리케이션 이미지를 빌드 할 수 있습니다.

참고

다른 메커니즘에 의해 애플리케이션 이미지를 빌드한 경우 build.enabled 필드를 false 로 설정하여 Helm 차트의 빌드 부분을 건너뛸 수 있습니다.

중요

Git 리포지토리를 참조하는 Git URL을 사용하여 build.url 필드를 지정해야 합니다.

4.6. 애플리케이션 이미지 배포

OpenShift 개발 콘솔에서 배포 설정을 구성하여 Helm 차트를 사용하여 JBoss EAP 애플리케이션을 배포할 수 있습니다.

참고

다른 메커니즘을 사용하여 애플리케이션 이미지를 빌드한 경우 build.deploy 필드를 false 로 설정하여 Helm 차트의 배포 구성을 건너뛸 수 있습니다.

4.6.1. Helm 차트의 영구 데이터 스토리지를 위한 OpenShift 볼륨

OpenShift 볼륨을 사용하면 컨테이너가 클라우드 스토리지, NFS(네트워크 파일 시스템) 또는 호스트 시스템을 비롯한 다양한 소스의 데이터를 저장하고 공유할 수 있습니다. OpenShift 패키지 관리자인 Helm 차트를 사용하여 일관되고 재현 가능한 방식으로 애플리케이션을 배포할 수 있습니다. Helm 차트에 볼륨 마운트를 추가하면 애플리케이션이 배포 간에 데이터를 유지할 수 있습니다.

4.6.2. Helm 차트를 사용하여 볼륨 마운트

다음 절차에서는 JBoss EAP 8.0에서 Helm 차트를 사용하여 시크릿 을 볼륨으로 마운트하는 방법을 설명합니다. 또한 이를 사용하여 ConfigMap 을 마운트할 수도 있습니다. 이 작업을 통해 애플리케이션은 데이터에 안전하게 액세스하고 사용할 수 있으므로 무단 액세스 또는 변조로부터 보호할 수 있습니다.

예를 들어 보안 을 볼륨으로 마운트하면 시크릿에 저장한 민감한 데이터는 보안이 마운트된 배포를 실행하는 POD에 파일로 표시됩니다.

사전 요구 사항

  • 시크릿 을 생성했습니다. 예를 들어 keystore.jks 와 같은 파일을 참조하는 Cryostat -app-secret 이라는 시크릿을 생성했습니다.
  • 컨테이너의 파일 시스템에서 시크릿을 마운트할 위치를 확인했습니다. 예를 들어 /etc/jgroups-encrypt-secre-secret-volume 디렉터리는 keystore.jks 와 같은 시크릿 파일이 마운트된 위치입니다.

프로세스

  1. deploy.volumes 필드에 볼륨을 지정하고 사용할 시크릿을 구성합니다. 볼륨 이름과 시크릿의 secretName 을 제공해야 합니다.

    volumes:
      - name: eap-jgroups-keystore-volume
        secret:
          secretName: eap-app-secret
  2. 배포 구성에서 deploy.volumeMounts 를 사용하여 파일 시스템에 볼륨을 마운트합니다.

    volumeMounts:
      - name: eap-jgroups-keystore-volume
        mountPath: /etc/jgroups-encrypt-secret-volume
        readOnly: true

Pod가 시작되면 컨테이너는 /etc/jgroups-encrypt-secret-volume/ keystore.jks 위치에 keystore.jks 파일을 마운트합니다.

추가 리소스

5장. 환경 변수 및 모델 표현식 확인

5.1. 사전 요구 사항

  • 운영 체제에서 환경 변수를 구성하는 방법에 대한 몇 가지 기본 지식이 있습니다.
  • OpenShift Container Platform에서 환경 변수를 구성하려면 다음 사전 요구 사항을 충족해야 합니다.

    • 이미 OpenShift를 설치하고 OpenShift CLI("oc")를 설정했습니다. oc에 대한 자세한 내용은 OpenShift CLI 시작하기를 참조하십시오.
    • Helm 차트를 사용하여 OpenShift에 애플리케이션을 배포했습니다. Helm 차트에 대한 자세한 내용은 JBoss EAP의 Helm 차트를 참조하십시오.

5.2. 관리 모델 표현식을 해결하기 위한 환경 변수

관리 모델 표현식을 해결하고 OpenShift Container Platform에서 JBoss EAP 8.0 서버를 시작하려면 관리 CLI(명령줄 인터페이스)에 환경 변수를 추가하거나 Java 시스템 속성을 설정할 수 있습니다. 둘 다 사용하는 경우 JBoss EAP는 환경 변수가 아닌 Java 시스템 속성을 관찰하고 사용하여 관리 모델 표현식을 확인합니다.

시스템 속성 환경 변수 매핑

이 관리 표현식 ${my.example-expr} 이 있다고 가정합니다. JBoss EAP 서버가 문제를 해결하려고 하면 my.example-expr 라는 시스템 속성을 확인합니다.

  • 서버가 이 속성을 찾으면 해당 값을 사용하여 표현식을 확인합니다.
  • 이 속성을 찾을 수 없으면 서버가 계속 검색합니다.

다음으로 서버가 시스템 속성 my.example-expr 를 찾을 수 없다고 가정하면 my.example-expr 가 모든 대문자로 자동 변경되고 영숫자가 아닌 모든 문자(_): MY_EXAMPLE_EXPR. 그런 다음 JBoss EAP는 해당 이름의 환경 변수를 확인합니다.

  • 서버가 이 변수를 발견하면 해당 값을 사용하여 표현식을 확인합니다.
  • 이 변수를 찾을 수 없으면 서버가 계속 검색합니다.
작은 정보

원래 표현식이 접두사 env. 로 시작하는 경우 JBoss EAP는 접두사를 제거하여 환경 변수를 확인한 다음 환경 변수 이름만 찾습니다. 예를 들어 env.example 표현식의 경우 JBoss EAP는 예제 환경 변수를 찾습니다.

이러한 검사 중 어느 것도 원래 표현식을 확인하기 위해 속성 또는 변수를 찾지 못하면 JBoss EAP는 표현식에 기본값이 있는지 여부를 찾습니다. 이 경우 이 기본값은 표현식을 확인합니다. 그렇지 않은 경우 JBoss EAP에서 표현식을 확인할 수 없습니다.

두 개의 서버 예

한 서버에서 JBoss EAP는 이 관리 리소스를 정의한다고 가정합니다. < socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}" > . 구성 파일을 편집하는 대신 다른 포트 오프셋으로 두 번째 서버를 실행하려면 다음 중 하나를 수행합니다.

  • 두 번째 서버에서 . /standalone.sh -D jboss.socket.binding.port-offset =100 의 값을 확인하도록 jboss.socket.binding.port-offset Java 시스템 속성을 설정합니다.
  • 두 번째 서버의 값을 확인하도록 JBOSS_SOCKET_PORT_OFFSET 환경 변수를 설정합니다. JBOSS_SOCKET_BINDING_PORT_OFFSET =100 ./standalone.sh.

5.3. OpenShift Container Platform에서 환경 변수 구성

JBoss EAP 8.0을 사용하면 관리 모델 표현식을 해결하기 위해 환경 변수를 구성할 수 있습니다. 환경 변수를 사용하여 OpenShift에서 실행 중인 JBoss EAP 서버의 구성을 조정할 수도 있습니다.

Pod 템플릿을 사용하는 리소스에 환경 변수 및 옵션을 설정합니다.

$ oc set env <object-selection> KEY_1=VAL_1 ... KEY_N=VAL_N [<set-env-options>] [<common-options>]
옵션설명

-e, --env=<KEY>=<VAL>

환경 변수에 지정된 키-값 쌍을 설정합니다.

--overwrite

기존 환경 변수 업데이트를 확인합니다.

참고

Pod 템플릿을 사용하는 Kubernetes 워크로드 리소스는 다음과 같습니다.

  • Deployment
  • ReplicaSet
  • StatefulSet
  • DaemonSet
  • 작업
  • CronJob

환경 변수를 구성한 후 JBoss EAP 관리 콘솔은 관련 포드에 대한 세부 정보에 해당 변수를 표시해야 합니다.

5.4. 환경 변수를 사용하여 관리 속성 덮어쓰기

Java 시스템 속성 또는 환경 변수를 사용하여 표현식에 정의된 관리 특성을 확인할 수 있지만 표현식을 사용하지 않는 경우에도 다른 속성을 수정할 수도 있습니다.

JBoss EAP 서버 구성을 서버 환경에 보다 쉽게 조정하려면 환경 변수를 사용하여 구성 파일을 편집하지 않고도 관리 속성의 값을 재정의할 수 있습니다. JBoss EAP 버전 8.0부터 사용할 수 있는 이 기능은 다음과 같은 이유로 유용합니다.

  • JBoss EAP는 가장 일반적인 관리 특성에 대해서만 표현식을 제공합니다. 이제 정의된 표현식이 없는 속성 값을 변경할 수 있습니다.
  • 일부 관리 속성은 JBoss EAP 서버를 미리 알 수 없는 데이터베이스 또는 구성에 저장할 수 없는 값(예: 데이터베이스 자격 증명)과 같은 다른 서비스와 연결합니다. 환경 변수를 사용하면 JBoss EAP 서버가 실행되는 동안 이러한 속성의 구성을 지연할 수 있습니다.
중요

이 기능은 JBoss EAP 버전 8.0 OpenShift 런타임 이미지부터 기본적으로 활성화됩니다. 다른 플랫폼에서 활성화하려면 WILDFLY_OVERRIDING_ENV_VARS 환경 변수를 임의의 값으로 설정해야 합니다(예: WILDFLY_OVERRIDING_ENV_VARS=1 ).

참고

유형이 LIST,OBJECT 또는 PROPERTY 인 관리 속성을 재정의할 수 없습니다.

사전 요구 사항

  • 이제 재정의할 관리 속성이 정의되어 있어야 합니다.

프로세스

환경 변수로 관리 특성을 재정의하려면 다음 단계를 완료합니다.

  1. 변경할 리소스 및 속성의 경로를 식별합니다. 예를 들어 /subsystem=undertow/server=default-server/http-listener=default 에 대해 proxy-address-forwarding 속성의 값을 true 로 설정합니다.
  2. 다음과 같이 리소스 주소와 관리 특성을 매핑하여 이 속성을 재정의하는 환경 변수의 이름을 생성합니다.

    1. 리소스 주소에서 첫 번째 슬래시( /subsystem=undertow/server=default-server/http-listener=default )를 하위 시스템=undertow/server=default-server/http-listener=default 로 제거합니다.
    2. 두 개의 밑줄(__)과 속성 이름을 추가합니다(예: subsystem=undertow/server=default-listener=default__proxy-address-forwarding ).
    3. 영숫자가 아닌 모든 문자를 밑줄(_)로 바꾸고 SUBSYSTEM_UNDERTOW_SERVER_DEFAULT_SERVER_HTTP_LISTENER_DEFAULT__PROXY_ADDRESS_FORWARDING 의 전체 코드 행을 삽입합니다.
  3. 환경 값 SUBSYSTEM_UNDERTOW_SERVER_SERVER_HTTP_LISTENER_DEFAULT__PROXY_ADDRESS_FORWARDING=true 를 설정합니다.
참고

이러한 값은 실제 구성 값으로 교체해야 하는 예입니다.

6장. Maven 플러그인을 사용하여 JBoss EAP 서버 프로비저닝

JBoss EAP Maven 플러그인을 사용하면 필요한 기능을 서버에 제공하는 Galleon 계층만 포함하여 요구 사항에 따라 서버를 구성할 수 있습니다.

6.1. JBoss EAP Maven 플러그인

JBoss EAP Maven 플러그인은 Galleon 트리밍 기능을 사용하여 서버의 크기와 메모리 공간을 줄입니다. JBoss EAP Maven 플러그인은 JBoss EAP CLI 스크립트 파일의 실행을 지원하여 서버 구성을 사용자 지정할 수 있습니다. CLI 스크립트에는 서버 구성을 위한 CLI 명령 목록이 포함되어 있습니다.

Index of /ga/org/jboss/eap/plugins/eap-maven-plugin 에서 사용할 수 있는 Maven 리포지토리에서 최신 Maven 플러그인 버전을 검색할 수 있습니다. Maven 프로젝트에서 pom.xml 파일에는 JBoss EAP Maven 플러그인의 구성이 포함되어 있습니다.

JBoss EAP Maven 플러그인은 서버를 프로비저닝하고 WAR와 같은 패키지 애플리케이션을 Maven 실행 중에 프로비저닝된 서버에 배포합니다. 애플리케이션이 배포되는 프로비저닝된 서버는 대상/서버 디렉터리에 있습니다. JBoss EAP Maven 플러그인에서는 다음과 같은 기능도 제공합니다.

참고

대상/서버의 서버는 지원되지 않으며 디버깅 또는 개발 목적으로만 사용할 수 있습니다.

  • org.jboss.eap:wildfly-ee-galleon-packorg.jboss.eap.cloud:eap-cloud-galleon-pack 기능 팩 과 일부 계층을 사용하여 서버 구성 파일을 사용자 정의할 수 있습니다.
  • CLI 스크립트 명령을 서버에 적용합니다.
  • 키 저장소 파일과 같은 서버 설치에 추가 파일을 추가할 수 있습니다.

6.2. Maven을 사용하여 자카르타 EE 10 애플리케이션 생성

액세스할 때 "Hello World!"를 출력하는 애플리케이션을 생성합니다.

사전 요구 사항

  • JDK 17을 설치했습니다.
  • Maven 3.6 이상을 설치했습니다. 자세한 내용은 Apache Maven 다운로드를 참조하십시오.

프로세스

  1. Maven 프로젝트를 설정합니다.

    $ mvn archetype:generate \
    -DgroupId=GROUP_ID \
    -DartifactId=ARTIFACT_ID \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false

    여기서 GROUP_ID 는 프로젝트의 groupId 이고 ARTIFACT_ID 는 프로젝트의 artifactId 입니다.

  2. jboss-eap-ee BOM에서 Jakarta EE 아티팩트의 버전을 자동으로 관리하도록 Maven을 구성하려면 pom.xml 파일의 < dependencyManagement > 섹션에 BOM을 추가합니다. 예를 들면 다음과 같습니다.

    <dependencyManagement>
      <dependencies>
        <dependency>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-eap-ee</artifactId>
            <version>8.0.0.GA-redhat-00009</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    참고
    • < version>A.B.C-redhat-XXXXX</version > 여기서 A.B.C 는 릴리스 번호이고 XXXXX 는 JBoss EAP 인스턴스의 빌드 번호입니다. JBoss EAP 릴리스에 대한 자세한 내용은 Red Hat Maven 리포지토리를 참조하십시오. 모든 JBoss EAP 릴리스에서 릴리스 및 빌드 번호를 사용할 수 있습니다. https://maven.repository.redhat.com/earlyaccess/all/org/jboss/bom/jboss-eap-ee/.
  3. 다음 예와 같이 BOM에서 관리하는 서블릿 API 아티팩트를 프로젝트 pom.xml 파일의 < dependencies > 섹션에 추가합니다.

    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
    </dependency>
  4. 다음 내용으로 Java 파일 TestServlet.java 를 만들고 파일을 APPLICATION_ROOT/src/main/java/com/example/simple/ 디렉터리에 저장합니다.

    package com.example.simple;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    @WebServlet(urlPatterns = "/hello")
    public class TestServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
            PrintWriter writer = resp.getWriter();
            writer.println("Hello World!");
            writer.close();
        }
    }

이제 이 애플리케이션을 JBoss EAP에 배포하거나 이 애플리케이션을 업데이트하여 Maven 플러그인을 사용하여 사용자 지정 프로비저닝된 JBoss EAP 서버에 배포할 수 있습니다.

6.3. Maven 플러그인을 사용하여 JBoss EAP 서버 프로비저닝

애플리케이션의 pom.xml 을 업데이트하여 Maven 플러그인과 함께 패키지하고 사용자 지정 프로비저닝된 JBoss EAP 서버에 배포합니다. 그런 다음 OpenShift의 사용자 지정 프로비저닝 JBoss EAP 서버에서 실행되는 애플리케이션을 배포할 수 있습니다.

사전 요구 사항

  • JBoss EAP Maven 플러그인 및 JBoss EAP Maven 아티팩트가 로컬 또는 원격 Maven 리포지토리에서 액세스할 수 있는지 확인합니다.
  • JDK 17을 설치했습니다.
  • Maven이 설치되어 있어야 합니다. 자세한 내용은 Apache Maven 다운로드를 참조하십시오.

    참고

    JDK 17 및 Maven 3.8.5 또는 이전 Maven 버전을 사용하는 경우 최신 Maven WAR 플러그인을 사용합니다.

  • Jakarta EE 10 애플리케이션을 위한 Maven 프로젝트를 생성했습니다. 자세한 내용은 Maven을 사용하여 자카르타 EE 10 애플리케이션 생성을 참조하십시오.

프로세스

  1. pom.xml 파일에 다음 콘텐츠를 추가하여 원격 리포지토리에서 JBoss EAP BOM 및 JBoss EAP Maven 플러그인을 검색하도록 Maven을 구성합니다.

    <repositories>
        <repository>
            <id>jboss</id>
            <url>https://maven.repository.redhat.com/ga/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>jboss</id>
            <url>https://maven.repository.redhat.com/ga/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
  2. pom.xml 파일의 & lt;build > 요소에 다음 내용을 추가합니다. JBoss EAP Maven 플러그인의 최신 버전을 지정해야 합니다. 예를 들면 다음과 같습니다.

    <plugins>
        <plugin>
            <groupId>org.jboss.eap.plugins</groupId>
            <artifactId>eap-maven-plugin</artifactId>
            <version>1.0.0.Final-redhat-00014</version> 1
            <configuration>
                <channels>
                    <channel>
                        <manifest>
                            <groupId>org.jboss.eap.channels</groupId> 2
                            <artifactId>eap-8.0</artifactId>
                        </manifest>
                    </channel>
                </channels>
                <feature-packs>
                    <feature-pack>
                        <location>org.jboss.eap:wildfly-ee-galleon-pack</location> 3
                    </feature-pack>
                    <feature-pack>
                        <location>org.jboss.eap.cloud:eap-cloud-galleon-pack</location> 4
                    </feature-pack>
                </feature-packs>
                <layers>
                    <layer>cloud-server</layer> 5
                </layers>
                <runtime-name>ROOT.war</runtime-name> 6
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>package</goal> 7
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    1
    <version>1.0.0.Final-redhat-00014</version >은 JBoss EAP Maven 플러그인의 예제 버전입니다. JBoss EAP Maven 플러그인 릴리스에 대한 자세한 내용은 Red Hat Maven 리포지토리를 참조하십시오. https://maven.repository.redhat.com/earlyaccess/all/org/jboss/eap/plugins/eap-maven-plugin/.
    2
    이는 JBoss EAP 서버 아티팩트가 정의된 JBoss EAP 8.0 채널을 지정합니다.
    3
    JBoss EAP 채널에서 이 기능 팩의 버전을 검색할 수 있습니다. Galleon 기능 팩에 는 트리밍 JBoss EAP 서버 프로비저닝을 위한 클라우드 서버와 같은 Galleon 계층이 포함되어 있습니다.
    4
    이 기능 팩은 클라우드의 서버 Galleon 계층을 조정합니다. 이 기능 팩을 사용하여 OpenShift용 애플리케이션을 빌드해야 합니다.
    5
    이 Galleon 계층은 클라우드에서 JBoss EAP 애플리케이션을 실행할 때 필요한 기능을 서버에 프로비저닝합니다.
    6
    이 구성 옵션을 사용하면 HTTP 루트 컨텍스트에 배포를 등록할 수 있습니다.
    7
    이 플러그인 목표를 사용하면 서버를 프로비저닝하고, 애플리케이션을 배포하며, 사용자 지정 구성된 CLI 스크립트를 적용하고, 사용자 지정 콘텐츠를 서버 설치에 복사할 수 있습니다.
  3. 애플리케이션을 패키징합니다.

    $ mvn package

    디렉터리 target/server 에는 디버깅 또는 개발 목적에 사용할 준비가 된 서버 및 애플리케이션이 포함되어 있습니다. JBoss EAP S2I 빌드 컨텍스트에서 JBoss EAP maven-plugin에서 프로비저닝한 서버는 /opt/server 위치의 JBoss EAP 이미지에 설치됩니다. 자세한 내용은 OpenShift에서 S2I(Source-to-Image)를 사용하여 애플리케이션 이미지 빌드 를 참조하십시오.

참고

디버깅이 활성화된 (-X 옵션)와 함께 mvn package 명령을 사용하는 경우 -Dorg.slf4j.simpleLogger.log.com.networknt.schema=off 를 포함하여 스키마 검증 중에 과도한 디버그 로깅을 방지합니다.

검증

  • 프로비저닝된 하위 시스템 및 애플리케이션 배포가 포함된 생성된 서버 구성 파일 target/server/standalone/configuration/standalone.xml 을 확인할 수 있습니다.

배포가 포함된 JBoss EAP 서버가 프로비저닝되었습니다.

6.4. Galleon 프로비저닝 파일

프로비저닝 파일은 galleon 하위 디렉터리에 저장할 수 있는 이름이 provisioning.xml 인 XML 파일입니다. 이를 사용하는 것은 JBoss EAP Maven 플러그인에서 기능 팩 및 계층을 구성하는 대안입니다. provisioning.xml 파일을 구성하여 프로비저닝 프로세스를 미세 조정할 수 있습니다.

다음 코드는 cloud-server 계층을 기반으로 JBoss EAP 서버를 프로비저닝하는 데 사용할 수 있는 프로비저닝 파일 콘텐츠를 보여줍니다.

참고

JBoss EAP 기능 팩에는 버전이 없으며 Maven 플러그인의 구성된 채널에서 버전이 검색됩니다.

<?xml version="1.0" ?>
<installation xmlns="urn:jboss:galleon:provisioning:3.0">
    <feature-pack location="org.jboss.eap:wildfly-ee-galleon-pack:">1
        <default-configs inherit="false"/>2
        <packages inherit="false"/>3
    </feature-pack>
    <feature-pack location="org.jboss.eap.cloud:eap-cloud-galleon-pack:
">4
        <default-configs inherit="false"/>
        <packages inherit="false"/>
    </feature-pack>
    <config model="standalone" name="standalone.xml">5
        <layers>
            <include name="cloud-server"/>
        </layers>
    </config>
    <options>6
        <option name="optional-packages" value="passive+"/>
    </options>
</installation>
1
이 요소는 JBoss EAP 채널에서 검색된 JBoss EAP 기능 팩을 프로비저닝하도록 프로비저닝 프로세스에 지시합니다.
2
이 요소는 기본 구성을 제외하도록 프로비저닝 프로세스에 지시합니다. JBoss EAP 서버 설치에서 standalone.xmlstandalone-ha.xml 과 같은 기본 구성을 검색할 수 있습니다. JBoss EAP Maven 플러그인에서 JBoss EAP 서버를 프로비저닝하는 경우 구성된 Galleon 사용자를 기반으로 단일 서버 구성을 생성합니다. 옵션을 false 로 설정하면 추가 서버 구성이 생성되지 않습니다. inherit=true 설정은 default-configs패키지 둘 다에서 지원되지 않습니다.
3
이 요소는 기본 패키지를 제외하도록 프로비저닝 프로세스에 지시합니다.
4
이 요소는 JBoss EAP 클라우드 기능 팩을 프로비저닝하도록 프로비저닝 프로세스에 지시합니다. 하위 요소는 프로세스에서 기본 구성 및 기본 패키지를 제외하도록 지시합니다.
5
이 요소는 사용자 정의 독립 실행형 구성을 생성하도록 프로비저닝 프로세스에 지시합니다. 이 구성에는 JBoss EAP 기능 팩에 정의된 클라우드 서버 기본 계층과 JBoss EAP 클라우드 기능 팩에 의해 OpenShift에 맞게 조정된 클라우드 서버 기본 계층이 포함됩니다.
6
이 요소는 JBoss EAP 모듈 프로비저닝을 최적화하도록 프로비저닝 프로세스에 지시합니다.

6.5. Maven 플러그인 구성 속성

다음 구성 매개변수 목록을 설정하여 Cryostat -maven-plugin Maven 플러그인 을 구성할 수 있습니다.

표 6.1. Maven 플러그인 구성 속성

이름유형설명

채널

list

채널 YAML 파일 참조 목록입니다. 채널 파일에는 JBoss EAP 서버 아티팩트의 버전이 포함되어 있습니다. 채널 YAML 파일을 식별하는 방법은 다음 두 가지가 있습니다.

  • 채널 분류기를 사용하여 Maven 리포지토리에 채널 YAML 파일 아티팩트를 배포하는 경우 Maven 좌표인 groupId,artifactId 및 optional 버전을 사용하여 식별할 수 있습니다. version이 설정되지 않은 경우 최신 채널 버전을 사용합니다. 예를 들면 다음과 같습니다.
<channels>
  <channel>
    <manifest>
      <groupId>org.jboss.eap.channels</groupId>
      <artifactId>eap-8.0</artifactId>
    </manifest>
  </channel>
</channels>
  • URL을 사용하여 채널 YAML 파일을 검색할 수 있습니다. 예를 들면 다음과 같습니다.
<channels>
  <channel>
    <manifest>
      <url>file:///foo/my-manifest.yaml</url>
    </manifest>
  </channel>
</channels>

excluded-layers

list

제외할 Galleon 계층 목록입니다. feature-pack-location 또는 feature packs가 설정된 경우 사용할 수 있습니다. 제외할 쉼표로 구분된 계층 목록을 제공하려면 wildfly.provisioning.layers.excluded 시스템 속성을 사용합니다.

extra-server-content-dirs

list

콘텐츠가 프로비저닝된 서버에 복사되는 디렉터리 목록입니다. 디렉터리의 절대 경로 또는 상대 경로를 사용할 수 있습니다. 상대 경로는 프로젝트 기본 디렉터리를 기준으로 해야 합니다.

feature-packs

list

계층과 결합할 수 있는 설치 기능 팩 구성 목록입니다. wildfly.provisioning.feature-packs 시스템 속성을 사용하여 쉼표로 구분된 기능 팩 목록을 제공합니다.

filename

문자열

배포할 애플리케이션의 파일 이름입니다. 기본값은 ${project.build.finalName}.${project.packaging} 입니다. 예외의 경우 Cryostat 패키징 으로 인해 .jar 확장이 발생합니다. 예를 들어, 전사 패키징 중에 $[project.packaging] 의 값은 war 이고 Cryostat 패키징 중 $[project.packaging] 값은 Cryostat입니다. 이는 유효한 extension이 아닙니다. 이 경우 .jar 확장이 필요합니다.

galleon-options

map

서버를 프로비저닝할 때 특정 Galleon 옵션을 설정할 수 있습니다. 동일한 Maven 세션에서 다수의 서버를 빌드하는 경우 jboss-fork-embedded 옵션을 true 로 설정해야 합니다. 예를 들면 다음과 같습니다.

<galleon-options>
  <jboss-fork-embedded>true</jboss-fork-embedded>
</galleon-options>

레이어

list

프로비저닝할 Galleon 계층 목록입니다. feature-pack-location 또는 feature packs가 설정된 경우 사용할 수 있습니다. wildfly.provisioning.layers 시스템 속성을 사용하여 쉼표로 구분된 계층 목록을 제공합니다.

layers-configuration-file-name

문자열

계층에서 생성된 구성 파일의 이름입니다. 기본값은 standalone.xml 입니다. 계층이 구성되지 않은 경우 이 매개변수를 설정할 수 없습니다.

log-provisioning-time

boolean

프로비저닝이 끝날 때 프로비저닝 시간을 기록할지 여부를 지정합니다. 기본값은 false입니다.

name

문자열

배포에 사용되는 이름입니다.

오프라인 프로비저닝

boolean

플러그인이 아티팩트를 확인할 때 오프라인 모드를 사용할지 여부를 지정합니다. 오프라인 모드에서 플러그인은 아티팩트 확인을 위해 로컬 Maven 리포지토리를 사용합니다. 기본값은 false입니다.

overwrite-provisioned-server

boolean

provisioningDir 에서 참조된 기존 서버를 삭제하고 새 서버를 프로비저닝하려면 true 로 설정합니다. 그렇지 않은 경우 false 로 설정합니다. 기본값은 false입니다.

packaging-scripts

list

실행할 CLI 스크립트 및 명령 목록입니다. 스크립트 파일이 절대적이지 않은 경우 프로젝트 기본 디렉터리를 기준으로 해야 합니다. 다음과 같은 방법으로 CLI 실행을 구성합니다.

<packaging-scripts>
  <packaging-script>
    <scripts>
      <script>../scripts/script1.cli</script>
    </scripts>
    <commands>
      <command>/system-property=foo:add(value=bar)</command>
    </commands>
    <properties-files>
      <property-file>my-properties.properties</property-file>
    </properties-files>
    <java-opts>
      <java-opt>-Xmx256m</java-opt>
    </java-opts>
    <!-- Expressions resolved during server execution -->
    <resolve-expressions>false</resolve-expressions>
  </packaging-script>
</packaging-scripts>

provisioning-dir

문자열

서버를 프로비저닝할 디렉터리의 경로입니다. 이는 절대 경로이거나 buildDir 과 관련된 경로일 수 있습니다. 기본적으로 서버는 target/server 디렉터리에 프로비저닝됩니다. 기본값은 server 입니다.

provisioning-file

파일

사용할 provisioning.xml 파일의 경로입니다. 기능 팩 구성 항목 및 계층 구성 항목이 설정된 경우 사용할 수 없습니다. 프로비저닝 파일 경로가 절대적이지 않은 경우 프로젝트 기본 디렉터리를 기준으로 해야 합니다. 기본값은 ${project.basedir}/galleon/provisioning.xml 입니다.

record-provisioning-state

boolean

프로비저닝 상태를 .galleon 디렉터리에 기록할지 여부를 지정합니다. 기본값은 false입니다.

runtime-name

문자열

배포의 runtime-name입니다. 기본값은 배포 파일 이름(예: myapp.war )입니다. 이 인수를 ROOT.war 로 설정하여 HTTP 루트 컨텍스트에 배포를 등록할 수 있습니다.

server-config

문자열

배포 중에 사용할 서버 구성의 이름입니다. layers-configuration-file-name 이 설정된 경우 layer-configuration-file-name에서 참조하는 구성 내에 배포가 배포됩니다. 기본값은 standalone.xml 입니다.

skip

boolean

목표를 건너뛰려면 true 로 설정합니다. 그렇지 않은 경우 false 로 설정합니다. 기본값은 false입니다.

stdout

문자열

생성된 CLI 프로세스에 대해 stdoutstderr 을 처리하는 방법을 나타냅니다. 값이 정의되지 않은 경우 stderrstdout 으로 리디렉션됩니다. 기본적으로 stdoutstderr 스트림은 현재 프로세스에서 상속됩니다. 다음 옵션에서 설정을 하나로 변경할 수 있습니다.

  • nonestderrstdout 을 사용하지 않음을 나타냅니다.
  • system.out 또는 System.err 을 사용하여 현재 프로세스로 리디렉션합니다.
  • 다른 모든 값은 파일의 경로로 간주되며 stdoutstderr 은 여기에 기록됩니다.

6.6. JBoss EAP 8.0에서 Cryo stat-datasources-galleon-pack 에 대한 지원을 활성화하는 방법

Cryo stat-data-sources-galleon-pack Galleon 기능 팩을 사용하면 데이터베이스에 연결할 수 있는 JBoss EAP 8.0 서버를 프로비저닝할 수 있습니다.

참고

일부 데이터베이스는 지원되지 않습니다.

또한 이 기능 팩은 JBoss EAP 8.0 Galleon 기능 팩과 함께 프로비저닝할 수 있는 다양한 데이터베이스에 대한 JDBC 드라이버 및 데이터 소스를 제공합니다. 이 기능 팩에 정의된 Galleon 계층은 데코레이터 계층입니다. 즉, JBoss EAP 기본 계층 외에도 프로비저닝해야 합니다.

중요

datasources-web-server 기본 계층은 기능 팩이 정의된 Galleon 계층을 프로비저닝할 때 사용할 최소 기본 계층입니다.

6.7. 지원되는 드라이버 및 데이터 소스

Galleon 기능 팩이 지원하는 각 데이터베이스에 대해 서로에 따라 빌드되는 Galleon 계층을 제공합니다.

  • postgresql-driver
  • postgresql-datasource
  • mssqlserver-datasource
  • mssqlserver-driver
  • oracle-datasource
  • oracle-driver

표 6.2. 지원되는 드라이버 및 데이터 소스

레이어설명

postgresql-driver

이렇게 하면 드라이버의 JBoss EAP 모듈이 설치되고 서버 구성의 데이터 소스 하위 시스템에 드라이버 리소스를 추가합니다.

postgresql-datasource

이는 데이터 소스를 추가하기 위해 postgresql-driver Galleon 계층을 기반으로 빌드됩니다.

참고
  • 기능 팩에 특정 드라이버 버전이 포함되어 있지 않습니다. 서버를 프로비저닝하기 전에 드라이버 버전을 지정해야 합니다.

    예제

    POSTGRESQL_DRIVER_VERSION="42.2.19"

  • 드라이버별 환경 변수는 특정 드라이버 설명서 내에 정의됩니다.

6.8. JBoss EAP Maven 플러그인을 사용하여 JDBC 드라이버 및 데이터 소스와 함께 서버 프로비저닝

Galleon 기능 팩을 사용하여 OpenShift에서 JBoss EAP 서버를 프로비저닝할 수 있습니다.

참고

이 절차에서는 JBoss EAP 8.0용 OpenShift에서 JBoss EAP 서버를 프로비저닝하는 방법만 보여줍니다.

사전 요구 사항

  • 이미 OpenShift를 설치하고 OpenShift CLI("oc")를 설정했습니다. 자세한 내용은 OpenShift CLI 시작하기를 참조하십시오.
  • JBoss EAP maven 플러그인 사용 방법에 대한 기본 지식이 있습니다. 자세한 내용은 JBoss EAP Maven 플러그인을 참조하십시오.

프로세스

  • 데이터 소스 기능 팩의 Maven 좌표(GroupId 및 artifactId)를 JBoss EAP maven 플러그인 구성에 추가합니다.

    <channels>
      <channel>
        <groupId>org.jboss.eap.channels</groupId>
        <artifactId>eap-8.0</artifactId>
      </channel>
    </channels>
    <feature-packs>
      <feature-pack>
        <location>org.jboss.eap:wildfly-ee-galleon-pack</location>
      </feature-pack>
      <feature-pack>
        <location>org.jboss.eap.cloud:eap-cloud-galleon-pack</location>
      </feature-pack>
      <feature-pack>
        <location>org.jboss.eap:eap-datasources-galleon-pack</location>
      </feature-pack>
    </feature-packs>
    <layers>
      <!-- Base layer -->
      <layer>jaxrs-server</layer>
        <!-- The postgresql datasource layer -->
      <layer>postgresql-datasource</layer>
    </layers>

7장. JBoss EAP 서버 및 애플리케이션 구성

OpenShift 이미지용 JBoss EAP는 Java 애플리케이션과의 기본 사용을 위해 사전 구성되어 있습니다. 그러나 이미지 내부에 JBoss EAP 인스턴스를 구성할 수 있습니다. 권장되는 방법은 OpenShift S2I 프로세스를 사용하고 Helm 차트에서 환경 변수를 설정하여 JVM을 조정하는 것입니다.

중요

컨테이너를 다시 시작하거나 종료할 때 실행 중인 컨테이너에 대한 구성 변경 사항이 손실됩니다.

여기에는 기존 JBoss EAP 설치에 포함된 스크립트를 사용하여 수행된 구성 변경(예: add-user.sh 또는 관리 CLI)이 포함됩니다.

OpenShift S2I 프로세스를 환경 변수와 함께 사용하여 OpenShift EAP 내부의 JBoss EAP 인스턴스 구성을 변경하는 것이 좋습니다.

7.1. JVM 기본 메모리 설정

다음 환경 변수를 사용하여 자동으로 계산된 JVM 설정을 수정할 수 있습니다. 이러한 변수는 유효한 컨테이너 메모리 제한을 정의할 때 기본 메모리 크기가 자동으로 계산될 때만 사용됩니다.

환경 변수설명

JAVA_INITIAL_MEM_RATIO

이 환경 변수는 더 이상 사용되지 않습니다. JVM 인수 -XX:InitialRAMPercentage 에 해당합니다. 이는 기본적으로 지정되지 않으며 향후 릴리스에서 제거됩니다. 대신 JAVA_OPTS 에서 --XX:InitialRAMPercentage 를 직접 지정해야 합니다.

참고

자동 계산을 비활성화하려면 JAVA_INITIAL_MEM_RATIO=0 을 설정할 필요가 없습니다. 이 환경 변수에 기본값이 제공되지 않기 때문입니다.

JAVA_MAX_MEM_RATIO

-XX:MaxRAMPercentage JVM 옵션을 구성하는 환경 변수입니다. 최대 힙 크기를 Java VM에 사용할 수 있는 총 메모리의 백분율로 설정합니다. 기본값은 80%입니다. JAVA_MAX_MEM_RATIO=0 을 설정하면 이 기본값이 비활성화됩니다.

JAVA_OPTS

JVM에 추가 옵션을 제공하는 환경 변수(예: JAVA_OPTS=-Xms512m -Xmx1024m)

참고

-Xms 값을 설정하면 -XX:InitialRAMPercentage 옵션이 무시됩니다. -Xmx 값을 설정하면 -XX:MaxRAMPercentage 옵션이 무시됩니다.

JAVA_MAX_INITIAL_MEM

이 환경 변수는 더 이상 사용되지 않습니다. JAVA_OPTS 를 사용하여'-Xms 옵션을 제공합니다(예: JAVA_OPTS=-Xms256m)

7.2. JVM 가비지 컬렉션 설정

OpenShift의 EAP 이미지에는 가비지 컬렉션 및 가비지 컬렉션 로깅 모두에 대한 설정이 포함되어 있습니다.

가비지 컬렉션 설정

-XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError

가비지 컬렉션 로깅 설정

-Xlog:gc*:file=/opt/server/standalone/log/gc.log:time,uptimemillis:filecount=5,filesize=3M

7.3. JVM 환경 변수

이러한 환경 변수를 사용하여 OpenShift 이미지의 EAP에서 JVM을 구성합니다.

표 7.1. JVM 환경 변수

변수 이름예제기본값JVM 설정설명

JAVA_OPTS

-verbose:class

기본값이 없음

multiple

java 명령에 전달할 JVM 옵션입니다.

JAVA_OPTS_APPEND 를 사용하여 추가 JVM 설정을 구성합니다. JAVA_OPTS 를 사용하는 경우 일부 구성 불가능한 기본값이 서버 JVM 설정에 추가되지 않습니다. 이러한 설정을 명시적으로 추가해야 합니다.

JAVA_OPTS 를 사용하면 기본적으로 컨테이너 스크립트에서 추가한 특정 설정이 비활성화됩니다. 비활성화된 설정은 다음과 같습니다.

  • -XX:MetaspaceSize=96M
  • -Djava.net.preferIPv4Stack=true
  • -Djboss.modules.system.pkgs=jdk.nashorn.api,com.sun.crypto.provider
  • -Djava.awt.headless=true

JAVA_OPTS 를 사용하여 추가 설정을 구성하는 경우 이러한 기본값을 추가합니다.

JAVA_OPTS_APPEND

-Dsome.property=value

기본값이 없음

multiple

JAVA_OPTS 에서 생성된 옵션에 추가하기 위해 사용자 지정 Java 옵션

JAVA_MAX_MEM_RATIO

50

80

-Xmx

JAVA_OPTS-Xmx 옵션이 지정되지 않은 경우 이 변수를 사용합니다. 이 변수의 값은 컨테이너의 제한 사항에 따라 기본 최대 힙 메모리 크기를 계산하는 데 사용됩니다. 메모리 제약 조건 없이 컨테이너에서 이 변수를 사용하면 변수에 적용되지 않습니다. 이 변수가 메모리 제약 조건이 있는 컨테이너에 사용되는 경우 -Xmx 값은 컨테이너 사용 가능한 메모리의 지정된 비율로 설정됩니다. 기본값인 50 은 사용 가능한 메모리의 50%가 상한값으로 사용됨을 의미합니다. 최대 메모리 계산을 건너뛰려면 이 변수의 값을 0 으로 설정합니다. no -Xmx 옵션은 JAVA_OPTS 에 추가됩니다.

JAVA_INITIAL_MEM_RATIO

25

-Xms

-Xms

JAVA_OPTS-Xms 옵션이 지정되지 않은 경우 이 변수를 사용합니다. 이 변수의 값은 최대 힙 메모리를 기반으로 기본 초기 힙 메모리 크기를 계산하는 데 사용됩니다. 메모리 제약 조건 없이 컨테이너에서 이 변수를 사용하면 변수에 적용되지 않습니다. 이 변수가 메모리 제약 조건이 있는 컨테이너에 사용되는 경우 -Xms 값은 -Xmx 메모리의 지정된 비율로 설정됩니다. 기본값인 25 는 최대 메모리의 25%가 초기 힙 크기로 사용됨을 의미합니다. 초기 메모리 계산을 건너뛰려면 이 변수의 값을 0 으로 설정합니다. no -Xms 옵션은 JAVA_OPTS 에 추가됩니다.

JAVA_MAX_INITIAL_MEM

4096

4096

-Xms

JAVA_MAX_INITIAL_MEM 환경 변수가 더 이상 사용되지 않으며 JAVA_OPTS 를 사용하여 -Xms 옵션을 제공합니다. 예를 들어 JAVA_OPTS=-Xms256m

JAVA_DIAGNOSTICS

true

false(비활성화됨)

-Xlog:gc:utctime -XX:NativeMemoryTracking=summary

이벤트가 발생할 때 표준 출력에 진단 정보를 포함하려면 이 변수의 값을 true 로 설정합니다. JAVA_DIAGNOSTICS 가 이미 true 로 정의된 환경에서 이 변수가 true 로 정의되면 진단이 여전히 포함됩니다.

DEBUG

true

false

-agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n

원격 디버깅을 활성화합니다.

DEBUG_PORT

8787

8787

-agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n

디버깅에 사용되는 포트를 지정합니다.

GC_MIN_HEAP_FREE_RATIO

20

10

-XX:MinHeapFreeRatio

확장을 방지하기 위해 가비지 컬렉션 후 사용 가능한 최소 힙 백분율입니다.

GC_MAX_HEAP_FREE_RATIO

40

20

-XX:MaxHeapFreeRatio

축소를 방지하기 위해 가비지 컬렉션 후 사용 가능한 최대 힙 백분율입니다.

GC_TIME_RATIO

4

4

-XX:GCTimeRatio

가비지 컬렉션 외부에서 보낸 시간(예: 애플리케이션 실행 시 소요된 시간)을 가비지 수집에 소비한 시간으로 지정합니다.

GC_ADAPTIVE_SIZE_POLICY_WEIGHT

90

90

-XX:AdaptiveSizePolicyWeight

현재 가비지 컬렉션 시간과 이전 가비지 컬렉션 시간에 지정된 가중치입니다.

GC_METASPACE_SIZE

20

96

-XX:MetaspaceSize

초기 메타 공간 크기입니다.

GC_MAX_METASPACE_SIZE

100

기본값이 없음

-XX:MaxMetaspaceSize

최대 메타 공간 크기입니다.

GC_CONTAINER_OPTIONS

-XX:+UserG1GC

-XX:-UseParallelGC

-XX:-UseParallelGC

사용할 Java 가비지 컬렉션을 지정합니다. 변수 값은 JRE(Java Runtime Environment) 명령줄 옵션을 사용하여 지정됩니다. 지정된 JRE 명령이 기본값을 덮어씁니다.

다음 환경 변수는 더 이상 사용되지 않습니다.

  • JAVA_OPTIONS: JAVA_OPTS 를 사용합니다.
  • INITIAL_HEAP_PERCENT: JAVA_INITIAL_MEM_RATIO 를 사용합니다.
  • CONTAINER_HEAP_PERCENT: JAVA_MAX_MEM_RATIO 를 사용합니다.

7.4. 기본 데이터 소스

JBoss EAP 8.0에서는 데이터 소스 ExampleDS 를 사용할 수 없습니다.

일부 빠른 시작에는 이 데이터 소스가 필요합니다.

  • cmt
  • 스레드 실행

고객이 개발한 애플리케이션에는 ExampleDS 데이터 소스도 필요할 수 있습니다.

기본 데이터 소스가 필요한 경우 JBoss EAP 서버를 프로비저닝할 때 이를 포함하도록 ENABLE_GENERATE_DEFAULT_DATASOURCE 환경 변수를 사용합니다.

ENABLE_GENERATE_DEFAULT_DATASOURCE=true
참고

이 환경 변수는 cloud-default-config galleon 계층을 사용하는 경우에만 작동합니다.

8장. OpenShift용 JBoss EAP의 기능 트리밍

서버를 트리밍하면 프로비저닝된 서버의 보안 노출을 줄이거나 메모리 풋프린트를 줄여 마이크로 서비스 컨테이너에 더 적합할 수 있습니다.

JBoss EAP가 포함된 이미지를 빌드할 때 이미지에 포함할 JBoss EAP 기능 및 하위 시스템을 제어할 수 있습니다. S2I(Source-to-Image) 빌드 프로세스 중에 새 애플리케이션을 생성할 때 JBoss EAP Maven 플러그인을 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 Maven 플러그인을 사용하여 JBoss EAP 서버 프로비저닝을 참조하십시오.

참고

S2I 빌드 프로세스 중에 JBoss EAP Maven 플러그인 대신 다음 환경 변수를 사용할 수 있습니다.

  • GALLEON_PROVISION_FEATURE_PACKS
  • GALLEON_PROVISION_LAYERS
  • GALLEON_PROVISION_CHANNELS

8.1. 사용 가능한 JBoss EAP 계층

Red Hat은 OpenShift에서 JBoss EAP 서버 프로비저닝을 사용자 지정할 수 있는 기본 및 데코레이터 계층을 제공합니다. 기본 계층은 핵심 기능을 제공하며 데코레이터 계층은 기본 계층을 향상시킵니다.

다음 Jakarta EE 사양은 프로비저닝 계층에서 지원되지 않습니다.

  • Jakarta ServerProgresss 2.3
  • Jakarta Enterprise Cryostats 3.2
  • Jakarta XML Web Services 2.3

8.1.1. 기본 계층

각 기본 계층에는 일반적인 서버 사용자 사례에 대한 핵심 기능이 포함되어 있습니다.

datasources-web-server

이 계층에는 서블릿 컨테이너와 데이터 소스를 구성하는 기능이 포함됩니다.

다음은 데이터 소스-web-server 에 기본적으로 포함된 JBoss EAP 하위 시스템입니다.

  • core-management
  • 데이터 소스
  • deployment-scanner
  • ee
  • elytron
  • io
  • jca
  • jmx
  • logging
  • 이름 지정
  • request-controller
  • security-manager
  • 트랜잭션
  • Cryostat

다음 Jakarta EE 사양이 이 계층에서 지원됩니다.

  • Jakarta JSON Processing 1.1
  • Jakarta JSON Binding 1.0
  • Jakarta Servlet 4.0
  • Jakarta Expression Language 3.0
  • Jakarta 서버 페이지 2.3
  • Jakarta 표준 태그 라이브러리 1.2
  • Jakarta Concurrency 1.1
  • Jakarta Annotations 1.3
  • Jakarta XML Binding 2.3
  • 기타 언어 1.0에 대한 Jakarta 디버깅 지원
  • Jakarta 트랜잭션 1.3
  • Jakarta Connectors 1.7

jaxrs-server

이 계층은 다음 JBoss EAP 하위 시스템을 사용하여 datasources-web-server 계층을 향상시킵니다.

  • jaxrs
  • weld
  • jpa

이 계층은 또한 로컬 캐싱이 있는 Infinispan 기반 두 번째 수준 엔터티를 컨테이너에 추가합니다.

다음 Jakarta EE 사양은 데이터 소스-web-server 계층에서 지원되는 것 외에도 이 계층에서 지원됩니다.

  • 자카르타 컨텍스트 및 종속성 2.0
  • Jakarta Cryostat Validation 2.0
  • Jakarta Interceptors 1.2
  • Jakarta RESTful Web Services 2.1
  • Jakarta Persistence 2.2

cloud-server

이 계층은 다음 JBoss EAP 하위 시스템을 사용하여 jaxrs-server 계층을 향상시킵니다.

  • resource-adapters
  • messaging-activemq (원격 브로커 메시징, 임베디드 메시징이 아님)

이 계층은 또한 jaxrs-server 계층에 다음과 같은 관찰 기능도 추가합니다.

  • 기본 상태
  • 기본 지표

다음 Jakarta EE 사양은 jaxrs-server 계층에서 지원되는 것 외에도 이 계층에서 지원됩니다.

  • Jakarta Security 1.0

cloud-default-config

이 계층은 standalone-ha.xml 을 기반으로 서버 구성으로 서버를 프로비저닝하고 하위 시스템 구성 messaging-activemq 를 포함합니다. 반대로 modclustercore-management 하위 시스템 구성은 포함되지 않습니다. 이는 클라우드에서 사용하도록 구성되어 있습니다. 또한 모든 JBoss EAP 서버 JBoss 모듈이 설치됩니다.

ee-core-profile-server

ee-core-profile-server 계층은 Jakarta EE 10 Core Profile을 사용하여 서버를 프로비저닝합니다. Core Profile은 핵심 JBoss EAP 서버 기능과 자카르타 EE API를 모두 제공하는 사용자에게 경량화된 소규모 프로필을 제공합니다. ee-core-profile-server 계층은 클라우드 네이티브 애플리케이션 및 마이크로 서비스와 같은 소규모 런타임에 가장 적합합니다.

8.1.2. 데코레이터 계층

데코레이터 계층은 단독으로 사용되지 않습니다. 추가 기능을 제공하기 위해 기본 계층으로 하나 이상의 데코레이터 계층을 구성할 수 있습니다.

관찰 기능

이 데코레이터 계층은 프로비저닝된 서버에 다음과 같은 관찰 기능을 추가합니다.

  • 기본 상태
  • 기본 지표
참고

이 계층은 cloud-server 계층에 빌드됩니다. 이 계층을 cloud-server 계층에 추가할 필요가 없습니다.

web-clustering

이 계층은 프로비저닝된 서버에 내장된 Infinispan 기반 웹 세션 클러스터링을 추가합니다.

8.2. JBoss EAP에서 사용자 개발 계층 프로비저닝

Red Hat에서 제공하는 프로비저닝 계층 외에도 개발하는 사용자 지정 계층을 프로비저닝할 수 있습니다.

프로세스

  1. Galleon Maven 플러그인을 사용하여 사용자 지정 계층을 빌드합니다.

    자세한 내용은 Maven 프로젝트 준비를 참조하십시오.

  2. 사용자 지정 계층을 액세스 가능한 Maven 리포지토리에 배포합니다.
  3. 사용자 정의 Galleon 기능 팩 환경 변수를 사용하여 S2I 이미지 빌드 프로세스 중에 Galleon 기능 팩 및 계층을 사용자 지정할 수 있습니다.

    Galleon 기능 팩 및 계층을 사용자 지정하는 방법에 대한 자세한 내용은 S2I 빌드 중 사용자 지정 Galleon 기능 팩 사용 을 참조하십시오.

  4. 선택 사항: 사용자 정의 프로비저닝 파일을 생성하여 사용자 정의 계층을 참조하고 지원되는 JBoss EAP 계층을 생성하여 애플리케이션 디렉터리에 저장합니다.

    사용자 지정 프로비저닝 파일을 만드는 방법에 대한 자세한 내용은 Galleon 프로비저닝 파일을 참조하십시오.

  5. S2I 프로세스를 실행하여 OpenShift에서 JBoss EAP 서버를 프로비저닝합니다.

    자세한 내용은 S2I 빌드 중 사용자 지정 Galleon 기능 팩 사용을 참조하십시오.

8.2.1. JBoss EAP용 사용자 지정 Galleon 계층 빌드 및 사용

사용자 지정 Galleon 계층은 JBoss EAP 8.0에서 실행되도록 설계된 Galleon 기능 팩 내에 패키지됩니다.

Openshift에서는 계층(예: JBoss EAP 8.0 서버의 MariaDB 드라이버 및 데이터 소스)이 포함된 Galleon 기능 팩을 빌드하고 사용할 수 있습니다. 계층에는 서버에 설치된 콘텐츠가 포함되어 있습니다. 계층은 서버 XML 구성 파일을 업데이트하고 서버 설치에 콘텐츠를 추가할 수 있습니다.

이 섹션에서는 OpenShift에서 JBoss EAP 8.0 서버의 MariaDB 드라이버 및 데이터 소스를 프로비저닝하기 위해 계층이 포함된 Galleon 기능 팩을 빌드하고 사용하는 방법을 설명합니다.

8.2.1.1. Maven 프로젝트 준비

Galleon 기능 패키지는 Maven을 사용하여 생성됩니다. 이 절차에서는 새 Maven 프로젝트를 생성하는 단계를 설명합니다.

프로세스

  1. 다음 명령을 실행하여 새 Maven 프로젝트를 생성합니다.

    mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=pom-root -DgroupId=org.jboss.eap.demo -DartifactId=mariadb-galleon-pack -DinteractiveMode=false
  2. mariadb-galleon-pack 디렉터리로 이동하여 pom.xml 파일을 업데이트하여 Red Hat Maven 리포지토리를 포함합니다.

    <repositories>
      <repository>
        <id>redhat-ga</id>
        <name>Redhat GA</name>
        <url>https://maven.repository.redhat.com/ga/</url>
      </repository>
    </repositories>
  3. pom.xml 파일을 업데이트하여 JBoss EAP Galleon 기능 팩 및 MariaDB 드라이버에 대한 종속성을 추가합니다.

    <dependencies>
      <dependency>
        <groupId>org.jboss.eap</groupId>
        <artifactId>wildfly-ee-galleon-pack</artifactId>
        <version>8.0.0.GA-redhat-00010</version>
        <type>zip</type>
      </dependency>
      <dependency>
        <groupId>org.mariadb.jdbc</groupId>
        <artifactId>mariadb-java-client</artifactId>
        <version>2.7.2</version>
      </dependency>
    </dependencies>
    참고
  4. Galleon 기능 팩을 빌드하는 데 사용되는 Maven 플러그인을 포함하도록 pom.xml 파일을 업데이트합니다.

    <build>
      <plugins>
        <plugin>
          <groupId>org.wildfly.galleon-plugins</groupId>
          <artifactId>wildfly-galleon-maven-plugin</artifactId>
          <version>6.4.8.Final-redhat-00001</version>
          <executions>
            <execution>
              <id>mariadb-galleon-pack-build</id>
              <goals>
                <goal>build-user-feature-pack</goal>
              </goals>
              <phase>compile</phase>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>

8.2.1.2. feature-pack 콘텐츠 추가

이 절차에서는 사용자 지정 Galleon 기능 팩에 레이어를 추가하는 데 도움이 됩니다(예: MariaDB 드라이버 및 데이터 소스 계층을 포함한 기능 팩).

사전 요구 사항

프로세스

  1. 사용자 지정 feature-pack Maven 프로젝트 내에서 src/main/resources 디렉터리를 생성합니다. 예를 들면 Maven 프로젝트 준비를 참조하십시오. 이 디렉터리는 feature-pack 콘텐츠를 포함하는 루트 디렉터리입니다.
  2. src/main/resources/modules/org/mariadb/jdbc/main 디렉터리를 만듭니다.
  3. 기본 디렉터리에서 다음 콘텐츠를 사용하여 module.xml 이라는 파일을 생성합니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <module name="org.mariadb.jdbc" xmlns="urn:jboss:module:1.8">
      <resources>
        <artifact name="${org.mariadb.jdbc:mariadb-java-client}"/> 1
      </resources>
      <dependencies> 2
        <module name="java.se"/>
        <module name="jakarta.transaction.api"/>
        <module name="jdk.net"/>
      </dependencies>
    </module>
    1
    MariaDB 드라이버 groupIdartifactId. 프로비저닝 시 실제 드라이버 JAR 파일이 설치됩니다. 드라이버 버전은 pom.xml 파일에서 참조됩니다.
    2
    JBoss Modules 는 MariaDB 드라이버의 종속 항목을 모듈합니다.
  4. src/main/resources/layers/standalone/ 디렉터리를 생성합니다. 이는 Galleon 기능 팩이 정의하는 모든 계층의 루트 디렉터리입니다.
  5. src/main/resources/layers/standalone/mariadb-driver 디렉터리를 생성합니다.
  6. mariadb-driver 디렉터리에서 다음 콘텐츠를 사용하여 layer-spec.xml 파일을 생성합니다.

    <?xml version="1.0" ?>
    <layer-spec xmlns="urn:jboss:galleon:layer-spec:1.0" name="mariadb-driver">
      <feature spec="subsystem.datasources"> 1
        <feature spec="subsystem.datasources.jdbc-driver">
          <param name="driver-name" value="mariadb"/>
          <param name="jdbc-driver" value="mariadb"/>
          <param name="driver-xa-datasource-class-name" value="org.mariadb.jdbc.MariaDbDataSource"/>
          <param name="driver-module-name" value="org.mariadb.jdbc"/>
        </feature>
      </feature>
      <packages> 2
        <package name="org.mariadb.jdbc"/>
      </packages>
    </layer-spec>
    1
    org.mariadb.jdbc 모듈에서 구현하는 MariaDB 라는 JDBC 드라이버로 데이터 소스 하위 시스템 구성을 업데이트합니다.
    2
    계층이 프로비저닝될 때 설치된 드라이버 클래스가 포함된 JBoss Modules 모듈.

    mariadb-driver 계층은 JBoss Modules 모듈에서 구현하는 JDBC 드라이버의 구성으로 데이터 소스 하위 시스템을 업데이트합니다.

  7. src/main/resources/layers/standalone/mariadb-datasource 디렉터리를 생성합니다.
  8. mariadb-datasource 디렉터리에서 다음 콘텐츠를 사용하여 layer-spec.xml 파일을 생성합니다.

    <?xml version="1.0" ?>
    <layer-spec xmlns="urn:jboss:galleon:layer-spec:1.0" name="mariadb-datasource">
      <dependencies>
        <layer name="mariadb-driver"/> 1
      </dependencies>
      <feature spec="subsystem.datasources.data-source"> 2
        <param name="data-source" value="MariaDBDS"/>
        <param name="jndi-name" value="java:jboss/datasources/${env.MARIADB_DATASOURCE:MariaDBDS}"/>
        <param name="connection-url" value="jdbc:mariadb://${env.MARIADB_HOST:localhost}:${env.MARIADB_PORT:3306}/${env.MARIADB_DATABASE}"/> 3
        <param name="driver-name" value="mariadb"/>
        <param name="user-name" value="${env.MARIADB_USER}"/> 4
        <param name="password" value="${env.MARIADB_PASSWORD}"/>
      </feature>
    </layer-spec>
    1
    이 종속성은 데이터 소스가 프로비저닝될 때 MariaDB 드라이버의 프로비저닝을 적용합니다. 계층이 종속된 모든 계층은 해당 계층을 프로비저닝할 때 자동으로 프로비저닝됩니다.
    2
    MariaDBDS 라는 데이터 소스로 데이터 소스 하위 시스템 구성을 업데이트합니다.
    3
    데이터 소스의 이름, 호스트, 포트 및 데이터베이스 값은 서버가 시작될 때 설정된 MARIADB_ HOST, MARIADB_PORT, MARIADB_DATABASE. 환경 변수에서 확인됩니다.
    4
    사용자 이름 및 암호 값은 환경 변수 MARIADB_USERMARIADB_PASSWORD 에서 확인됩니다.
  9. 다음 명령을 실행하여 Galleon 기능 팩을 빌드합니다.

    mvn clean install

    target/mariadb-galleon-pack-1.0-SNAPSHOT.zip 파일이 생성됩니다.

8.2.1.3. S2I 빌드 중 사용자 정의 Galleon 기능 팩 사용

OpenShift S2I 빌드 중에 발생하는 Maven 빌드에서 사용자 지정 기능 팩을 사용할 수 있어야 합니다. 일반적으로 사용자 지정 기능 팩을 아티팩트(예: org.jboss.eap.demo:mariadb-galleon-pack:1.0-SNAPSHOT )로 배포할 수 있습니다.

참고

사용자 지정 Galleon 기능 팩 사용에 대한 JBoss EAP S2I 이미지 구성에 대한 자세한 내용은 고급 환경 변수를 사용하여 Galleon 구성 을 참조하십시오.

사전 요구 사항

  • oc 명령줄이 설치되어 있어야 합니다.
  • OpenShift 클러스터에 로그인되어 있습니다.
  • Red Hat Container 레지스트리에 대한 액세스 권한이 구성되어 있습니다. 자세한 내용은 Red Hat Container Registry 를 참조하십시오.
  • 사용자 정의 Galleon 기능 팩을 생성했습니다. 자세한 내용은 Maven 프로젝트 준비를 참조하십시오.

프로세스

  1. 다음 명령을 실행하여 MariaDB 데이터베이스를 시작합니다. 이 예에서는 MariaDB 이미지 mariadb-105-rhel7 을 사용합니다. 지원되는 최신 버전의 MariaDB 이미지를 사용해야 합니다. MariaDB 이미지에 대한 자세한 내용은 Red Hat Ecosystem Catalog 에서 참조하십시오.

    oc new-app -e MYSQL_USER=admin -e MYSQL_PASSWORD=admin -e MYSQL_DATABASE=mariadb registry.redhat.io/rhscl/mariadb-105-rhel7

    OpenShift 서비스 mariadb-101-rhel7 이 생성되고 시작됩니다.

  2. Maven 프로젝트 디렉터리 mariadb-galleon-pack:에서 다음 명령을 실행하여 사용자 지정 feature-pack Maven 빌드에서 생성된 feature-pack 아카이브에서 시크릿을 생성합니다.

    oc create secret generic mariadb-galleon-pack --from-file=target/mariadb-galleon-pack-1.0-SNAPSHOT.zip

    비밀 mariadb-galleon-pack 이 생성됩니다. S2I 빌드를 시작할 때 이 시크릿은 Pod에 feature-pack .zip 파일을 마운트하여 서버 프로비저닝 단계에서 파일을 사용할 수 있도록 합니다.

8.2.1.4. JBoss EAP 8 이미지 스트림 가져오기

아래 절차에 따라 JBoss EAP 8.0 이미지 스트림을 가져올 수 있습니다.

프로세스

  1. JBoss EAP 8.0 이미지 스트림을 가져옵니다.

    oc import-image jboss-eap-8/eap8-openjdk17-builder-openshift-rhel8:latest --from=registry.redhat.io/jboss-eap-8/eap8-openjdk17-builder-openshift-rhel8:latest
    --confirm
8.2.1.4.1. JBoss EAP maven 플러그인을 사용하여 S2I 빌드 생성

Cryostat -maven-plugin 은 JBoss EAP galleon 기능 팩, JBoss EAP 클라우드 galleon 기능 팩mariadb galleon 기능 팩에 대한 참조로 구성되어 있습니다. pom.xml 의 추출물을 참조하십시오:

<feature-packs>
  <feature-pack>
    <location>org.jboss.eap:wildfly-ee-galleon-pack</location>
  </feature-pack>
  <feature-pack>
    <location>org.jboss.eap.cloud:eap-cloud-galleon-pack</location>
  </feature-pack>
  <feature-pack>
    <location>org.jboss.eap.demo:mariadb-galleon-pack:1.0-SNAPSHOT</location>1
  </feature-pack>
</feature-packs>
<layers>
  <layer>jaxrs-server</layer>
  <layer>mariadb-datasource</layer>2
</layers>
1
mariadb feature-pack 버전이 필요합니다. JBoss EAP 8 구성된 채널에서는 해결되지 않습니다.
2
mariadb-datasource 계층입니다.

프로세스

  1. 다음 명령을 실행하여 S2I 빌드를 생성합니다.

    oc new-build eap8-openjdk17-builder-openshift-rhel8:latest~https://github.com/jboss-container-images/jboss-eap-8-openshift-image#EAP_8.0.0 \
    --context-dir=examples/eap/custom-layers/application \
    --build-secret=mariadb-galleon-pack:/tmp/demo-maven-repository/org/jboss/eap/demo/mariadb-galleon-pack/1.0-SNAPSHOT \ 1
    --name=mariadb-app-build
    1
    mariadb-galleon-pack 시크릿은 /tmp/demo-maven-repository/org/jboss/eap/demo/mariadb-galleon-pack/1.0-SNAPSHOT 디렉터리에 마운트됩니다.

추가 리소스

자세한 내용은 JBoss EAP 8.0 데모 예제 를 참조하십시오.

8.2.1.4.2. 레거시 S2I 프로비저닝 기능을 사용하여 S2I 빌드 생성

서버를 프로비저닝할 수 있도록 openshift-legacy 프로필을 사용하여 S2I 빌드를 구성할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 새 OpenShift 빌드를 생성합니다.

    oc new-build eap8-openjdk17-builder-openshift-rhel8:latest~https://github.com/jboss-container-images/jboss-eap-8-openshift-image#EAP_8.0.0 \
    --context-dir=examples/eap/custom-layers/application \
    --env=GALLEON_PROVISION_CHANNELS="org.jboss.eap.channels:eap-8.0" \ 1
    --env=GALLEON_PROVISION_FEATURE_PACKS="org.jboss.eap:wildfly-ee-galleon-pack,org.jboss.eap.cloud:eap-cloud-galleon-pack,org.jboss.eap.demo:mariadb-galleon-pack:1.0-SNAPSHOT" \ 2
    --env=GALLEON_PROVISION_LAYERS="jaxrs-server,mariadb-datasource" \ 3
    --env=GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO="/tmp/demo-maven-repository" \ 4
    --env=MAVEN_ARGS="-Popenshift-legacy" \ 5
    --build-secret=mariadb-galleon-pack:/tmp/demo-maven-repository/org/jboss/eap/demo/mariadb-galleon-pack/1.0-SNAPSHOT \ 6
    --name=mariadb-app-build
    1
    이 환경 변수는 프로비저닝 중에 JBoss EAP 8.0 채널을 사용합니다.
    2
    이 환경 변수는 JBoss EAP 8.0 기능 팩,클라우드 기능 팩mariadb 기능-팩 을 참조합니다.
    3
    이 환경 변수는 서버를 프로비저닝하는 데 사용할 Galleon 계층 세트를 참조합니다. jaxrs-server 는 기본 서버 계층이며 mariadb-datasourcemariadb 드라이버 및 새 데이터 소스를 서버 설치에 가져오는 사용자 지정 계층입니다.
    4
    이는 mariadb 기능 팩이 포함된 로컬 maven 리포지토리의 위치를 가리킵니다.
    5
    이 환경 변수는 MAVEN_ARGS 를 사용하여 openshift-legacy 프로필을 활성화합니다.
    6
    mariadb-galleon-pack 시크릿은 /tmp/demo-maven-repository/org/jboss/eap/demo/mariadb-galleon-pack/1.0-SNAPSHOT 디렉터리에 마운트됩니다.
참고

이 디렉터리 경로는 Maven 리포지토리 아티팩트 좌표를 경로 매핑으로 준수합니다.

8.2.1.4.3. 빌드 시작

새 빌드를 생성하여 mariadb-app-build 이미지를 생성할 수 있습니다.

프로세스

  1. 이전에 생성한 동일한 OpenShift 빌드에서 새 빌드를 시작하고 다음 명령을 실행합니다.

    oc start-build mariadb-app-build

    성공적으로 명령을 실행하면 mariadb-app-build 이미지가 생성됩니다.

8.2.1.4.4. 새 배포 생성

실행 중인 MariaDB 데이터베이스에 데이터 소스를 바인딩하는 데 필요한 환경 변수를 제공하여 새 배포를 생성할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 새 배포를 생성합니다.

    oc new-app --name=mariadb-app mariadb-app-build \
    --env=MARIADB_PORT=3306 \
    --env=MARIADB_USER=admin \
    --env=MARIADB_PASSWORD=admin \
    --env=MARIADB_HOST=mariadb-105-rhel7 \
    --env=MARIADB_DATABASE=mariadb  \
    --env=MARIADB_DATASOURCE=Demo 1
    1
    데모에서는 데이터 소스의 이름이 데모가 될 것으로 예상합니다.
    참고

    사용자 지정 Galleon 기능 팩 환경 변수에 대한 자세한 내용은 사용자 정의 Galleon 기능 팩 환경 변수를 참조하십시오.

  2. mariadb-app 애플리케이션을 노출하고 다음 명령을 실행합니다.

    oc expose svc/mariadb-app
  3. 새 작업을 생성하려면 다음 명령을 실행합니다.

    curl -X POST http://$(oc get route mariadb-app --template='{{ .spec.host }}')/tasks/title/foo
  4. 작업 목록에 액세스하려면 다음 명령을 실행합니다.

    curl http://$(oc get route mariadb-app --template='{{ .spec.host }}')

    추가된 작업이 브라우저에 표시됩니다.

8.2.2. 고급 환경 변수를 사용하여 Galleon 구성

고급 사용자 지정 Galleon 기능 팩 환경 변수를 사용하여 S2I 이미지 빌드 프로세스 중에 사용자 지정 Galleon 기능 팩 및 계층을 저장하는 위치를 사용자 지정할 수 있습니다. 이러한 고급 사용자 지정 Galleon 기능 팩 환경 변수는 다음과 같습니다.

  • GALLEON_DIR=<path > 기본 < project_root_dir>/galleon 디렉터리 경로를 < project_root_dir>/<GALLEON_DIR > 로 재정의합니다.
  • GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO=<path > . . 에서는 < project root dir>/galleon/repository 디렉터리 경로를 Maven 로컬 리포지토리 캐시 디렉터리에 대한 절대 경로로 재정의합니다. 이 리포지토리에는 사용자 지정 Galleon 기능 팩이 포함되어 있습니다.

Maven local-cache 파일 시스템 구성을 준수하는 하위 디렉터리 내에서 Galleon 기능 팩 아카이브 파일을 찾아야 합니다. 예를 들어 path-to-repository/org/examples/my-feature-pack/1.0.0.Final/my-feature-pack-1.0.0.Final.zip 경로 내에서 org.examples:my-feature-pack:1.0.0.Final 기능 팩:1.0.0.Final 기능 팩을 찾습니다.

<project _root>/<GALLEON_DIR> 디렉터리에 settings.xml 파일을 생성하여 Maven 프로젝트 설정을 구성할 수 있습니다. GALLEON_DIR 의 기본값은 < project_root_dir>/galleon 입니다. Maven은 파일을 사용하여 애플리케이션의 사용자 지정 Galleon 기능 팩을 프로비저닝합니다. settings.xml 파일을 생성하지 않으면 Maven은 S2I 이미지에서 생성한 기본 settings.xml 파일을 사용합니다.

중요

S2I 빌더 이미지가 로컬 Maven 리포지토리의 위치를 지정하므로 settings.xml 파일에 로컬 Maven 리포지토리 위치를 지정하지 마십시오. S2I 빌더 이미지는 S2I 빌드 프로세스 중에 이 위치를 사용합니다.

8.2.3. 사용자 정의 Galleon 기능 팩 환경 변수

다음 사용자 지정 Galleon 기능 팩 환경 변수를 사용하여 JBoss EAP S2I 이미지 사용 방법을 사용자 지정할 수 있습니다.

표 8.1. 사용자 지정 Galleon 기능 팩 환경 변수에 대한 설명

환경 변수설명

GALLEON_DIR=<path>

여기서 <path >는 애플리케이션 프로젝트의 루트 디렉터리를 기준으로 하는 디렉터리입니다. & lt;path > 디렉터리에는 settings.xml 파일 및 로컬 Maven 리포지토리 캐시와 같은 선택적 Galleon 사용자 정의 콘텐츠가 포함되어 있습니다. 이 캐시에는 사용자 지정 Galleon 기능 팩이 포함되어 있습니다.

디렉터리의 기본값은 galleon 입니다.

GALLEON_CUSTOM_FEATURE_PACKS_MAVEN_REPO=<path>

<path >는 사용자 지정 기능 팩을 포함하는 Maven 로컬 리포지토리 디렉터리의 절대 경로입니다. 디렉터리의 기본값은 galleon/repository 입니다.

GALLEON_PROVISION_FEATURE_PACKS=<list_of_galleon_feature_packs>

여기서 < list_of_galleon_feature_packs >은 Maven 좌표로 식별되는 사용자 지정 Galleon 기능 팩의 쉼표로 구분된 목록입니다. 나열된 기능 팩은 빌더 이미지에 있는 JBoss EAP 8.0 서버 버전과 호환되어야 합니다.

GALLEON_PROVISION_LAYERS 환경 변수를 사용하여 서버에 대해 사용자 지정 기능 팩에 정의된 Galleon 계층을 설정할 수 있습니다.

9장. OpenShift Container Platform에 Jboss EAP 애플리케이션 배포

9.1. OpenShift에서 애플리케이션 배포를 자동화하는 JBoss EAP operator

EAP Operator는 OpenShift API를 확장하는 JBoss EAP별 컨트롤러입니다. EAP Operator를 사용하여 복잡한 상태 저장 애플리케이션의 인스턴스를 생성, 구성, 관리 및 원활하게 업그레이드할 수 있습니다.

EAP 운영자는 클러스터에서 여러 JBoss EAP Java 애플리케이션 인스턴스를 관리합니다. 또한 복제본을 축소하고 종료를 위해 Pod를 정리하기 전에 모든 트랜잭션이 완료되었는지 확인하여 애플리케이션 클러스터에서 안전한 트랜잭션 복구를 보장합니다. EAP Operator는 Jakarta Enterprise Cryostat 원격 및 트랜잭션 복구 처리를 적절하게 처리하기 위해 StatefulSet 을 사용합니다. StatefulSet 은 Pod를 다시 시작한 후에도 영구 스토리지 및 네트워크 호스트 이름 안정성을 보장합니다.

OpenShift 클러스터 관리자가 Operator를 검색, 설치 및 업그레이드하는 데 사용할 수 있는 OperatorHub를 사용하여 EAP Operator를 설치해야 합니다.

OpenShift Container Platform 4에서는 OLM(Operator Lifecycle Manager)을 사용하여 모든 Operator 및 여러 클러스터에서 실행되는 관련 서비스의 라이프사이클을 설치, 업데이트 및 관리할 수 있습니다.

OLM은 OpenShift Container Platform 4에서 기본적으로 실행됩니다. 클러스터 관리자는 클러스터에서 실행되는 operator에 대한 액세스 권한을 설치, 업그레이드 및 부여할 수 있습니다. OpenShift Container Platform 웹 콘솔은 클러스터 관리자가 Operator를 설치할 수 있는 관리 화면을 제공하고, 특정 프로젝트에 클러스터에 사용 가능한 Operator 카탈로그를 사용할 수 있는 액세스 권한을 부여합니다.

Operator 및 OLM에 대한 자세한 내용은 OpenShift 설명서 를 참조하십시오.

9.1.1. 웹 콘솔을 사용하여 EAP Operator 설치

JBoss EAP 클러스터 관리자는 OpenShift Container Platform 웹 콘솔을 사용하여 Red Hat OperatorHub에서 EAP Operator를 설치할 수 있습니다. 그런 다음 EAP Operator를 하나 이상의 네임 스페이스에 가입하여 클러스터의 개발자가 사용할 수 있도록 할 수 있습니다.

웹 콘솔을 사용하여 EAP Operator를 설치하기 전에 알아야 할 몇 가지 사항은 다음과 같습니다.

  • 설치 모드: 클러스터의 모든 네임스페이스(기본값) 를 선택하여 Operator를 모든 네임스페이스에 설치하거나 사용 가능한 경우 개별 네임스페이스를 선택하여 선택한 네임스페이스에만 Operator를 설치합니다.
  • 업데이트 채널: EAP Operator를 여러 채널을 통해 사용할 수 있는 경우 구독할 채널을 선택할 수 있습니다. 예를 들어, stable 채널에서 배치하려면 (사용 가능한 경우) 목록에서 해당 채널을 선택합니다.
  • 승인 전략: 자동 또는 수동 업데이트를 선택할 수 있습니다. EAP Operator에 대해 자동 업데이트를 선택하는 경우 새 버전의 Operator를 사용할 수 있는 경우 OLM(Operator Lifecycle Manager)은 실행 중인 EAP Operator 인스턴스를 자동으로 업그레이드합니다. 수동 업데이트를 선택하면 최신 버전의 Operator가 사용 가능할 때 OLM에서 업데이트 요청을 생성합니다. 그런 다음 Operator가 새 버전으로 업데이트되도록 업데이트 요청을 수동으로 승인해야 합니다.
참고

다음 절차는 OpenShift Container Platform 웹 콘솔의 수정 사항에 따라 변경될 수 있습니다. 가장 정확한 최신 절차는 최신 버전의 OpenShift Container Platform 가이드의 Operator 작업 섹션에서 웹 콘솔을 사용하여 OperatorHub에서 설치 섹션을 참조하십시오.

사전 요구 사항

  • cluster-admin 권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 OperatorOperatorHub 로 이동합니다.
  2. 아래로 스크롤하거나 키워드로 필터링 상자에 EAP 를 입력하여 EAP Operator를 찾습니다.
  3. JBoss EAP Operator를 선택하고 설치를 클릭합니다.
  4. Create Operator Subscription 페이지에서 다음을 수행합니다.

    1. 다음 명령 중 하나를 선택합니다.

      • 클러스터의 모든 네임스페이스(기본값) 는 기본 openshift-operators 네임스페이스에 Operator를 설치하여 클러스터의 모든 네임스페이스를 감시하고 사용할 수 있게 합니다. 이 옵션을 항상 사용할 수있는 것은 아닙니다.
      • 클러스터의 특정 네임스페이스 는 선택한 특정 단일 네임스페이스에 Operator를 설치합니다. Operator는 이 단일 네임스페이스에서만 사용할 수 있습니다.
    2. Update Channel을 선택합니다.
    3. 앞에서 설명한 대로 자동 또는 수동 승인 전략을 선택합니다.
  5. 서브스크립션을 클릭하여 이 OpenShift Container Platform 클러스터에서 선택한 네임스페이스에서 EAP Operator를 사용할 수 있도록 합니다.

    1. 수동 승인 전략을 선택한 경우 설치 계획을 검토하고 승인할 때까지 서브스크립션의 업그레이드 상태가 Upgrading 으로 유지됩니다. 설치 계획 페이지에서 설치 계획을 승인한 후 서브스크립션 업그레이드 상태가 Up to date 로 이동합니다.
    2. 자동 승인 전략을 선택한 경우 업그레이드 상태가 개입 없이 최신 상태로 이동합니다.
  6. 서브스크립션의 업그레이드 상태가 최신 버전이면 Operator설치된 Operator를 선택하여 CSV(EAP ClusterServiceVersion)가 표시되고 해당 상태가 관련 네임스페이스에 InstallSucceeded 로 변경되었는지 확인합니다.

    참고

    All namespaces…​ 설치 모드의 경우 openshift-operators 네임스페이스에 표시되는 상태가 InstallSucceeded 입니다. 다른 네임스페이스에서 상태가 Copied 입니다. . . Status 필드가 InstallSucceeded 로 변경되지 않는 경우 문제를 보고하는 워크로드 → Pod 페이지에서 openshift-operators 프로젝트(또는 특정 네임스페이스…​ 설치 모드가 선택된 경우 기타 관련 네임스페이스)의 모든 Pod 의 로그를 확인합니다.

9.1.2. CLI를 사용하여 EAP Operator 설치

JBoss EAP 클러스터 관리자는 OpenShift Container Platform CLI를 사용하여 Red Hat OperatorHub에서 EAP Operator를 설치할 수 있습니다. 그런 다음 EAP Operator를 하나 이상의 네임 스페이스에 가입하여 클러스터의 개발자가 사용할 수 있도록 할 수 있습니다.

CLI를 사용하여 OperatorHub에서 EAP Operator를 설치할 때 oc 명령을 사용하여 Subscription 오브젝트를 생성합니다.

사전 요구 사항

  • cluster-admin 권한이 있는 계정을 사용하여 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.
  • 로컬 시스템에 oc 툴을 설치했습니다.

프로세스

  1. OperatorHub에서 클러스터에서 사용할 수 있는 Operator 목록을 확인합니다.

    $ oc get packagemanifests -n openshift-marketplace | grep eap
    NAME        CATALOG               AGE
    ...
    eap         Red Hat Operators     43d
    ...
  2. 서브스크립션 오브젝트 YAML 파일(예: Cryostat -operator-sub.yaml)을 생성하여 네임스페이스를 EAP Operator에 서브스크립션합니다. 다음은 Subscription 오브젝트 YAML 파일의 예입니다.

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: eap
      namespace: openshift-operators
    spec:
      channel: stable
      installPlanApproval: Automatic
      name: eap 1
      source:  redhat-operators 2
      sourceNamespace: openshift-marketplace
    1
    등록할 Operator의 이름입니다.
    2
    EAP Operator는 redhat-operators CatalogSource에서 제공합니다.

    채널 및 승인 전략에 대한 자세한 내용은 이 절차의 웹 콘솔 버전을 참조하십시오.

  3. YAML 파일에서 Subscription 오브젝트를 생성합니다.

    $ oc apply -f eap-operator-sub.yaml
    $ oc get csv -n openshift-operators
    NAME                  DISPLAY     VERSION   REPLACES   PHASE
    eap-operator.v1.0.0   JBoss EAP   1.0.0                Succeeded

    EAP Operator가 성공적으로 설치되었습니다. 이 시점에서 OLM은 EAP Operator를 알고 있습니다. Operator의 ClusterServiceVersion (CSV)이 대상 네임스페이스에 표시되고 EAP Operator에서 제공하는 API를 생성할 수 있습니다.

9.1.3. EAP Operator를 사용하여 OpenShift에 Java 애플리케이션 배포

EAP Operator는 OpenShift에서 Java 애플리케이션 배포를 자동화하는 데 도움이 됩니다. EAP Operator API에 대한 자세한 내용은 EAP Operator: API 정보를 참조하십시오.

사전 요구 사항

  • EAP Operator를 설치했습니다. EAP Operator 설치에 대한 자세한 내용은 웹 콘솔을 사용하여 EAP Operator 설치 및 CLI를 사용하여 EAP Operator 설치를 참조하십시오.
  • JBoss EAP for OpenShift S2I(Source-to-Image) 빌드 이미지를 사용하여 사용자 애플리케이션의 Docker 이미지를 빌드했습니다.
  • 애플리케이션의 CRD(CustomResourceDefinition) 파일이 이를 참조하는 경우 Secret 오브젝트를 생성했습니다. 새 Secret 오브젝트 생성에 대한 자세한 내용은 보안 생성을 참조하십시오.
  • 애플리케이션의 CRD 파일이 이를 참조하는 경우 ConfigMap 을 생성했습니다. ConfigMap 생성에 대한 자세한 내용은 ConfigMap 생성을 참조하십시오.
  • 이렇게 하려면 standalone.xml 파일에서 ConfigMap 을 생성했습니다. standalone.xml 파일에서 ConfigMap 을 생성하는 방법에 대한 자세한 내용은 standalone.xml 파일에서 ConfigMap 생성을 참조하십시오.
참고

ConfigMap 에서 standalone.xml 파일을 제공하는 것은 JBoss EAP 8.0에서 지원되지 않습니다.

프로세스

  1. 웹 브라우저를 열고 OperatorHub에 로그인합니다.
  2. Java 애플리케이션에 사용할 프로젝트 또는 네임스페이스를 선택합니다.
  3. Installed Operator 로 이동하여 JBoss EAP operator 를 선택합니다.
  4. 개요 탭에서 인스턴스 생성 링크를 클릭합니다.
  5. 애플리케이션 이미지 세부 정보를 지정합니다.

    애플리케이션 이미지는 Java 애플리케이션이 포함된 Docker 이미지를 지정합니다. 이미지는 JBoss EAP for OpenShift S2I(Source-to-Image) 빌드 이미지를 사용하여 빌드해야 합니다. applicationImage 필드가 imagestreamtag에 해당하는 경우 이미지에 대한 모든 변경으로 애플리케이션의 자동 업그레이드가 트리거됩니다.

    다음 참조 중 하나로 OpenShift 애플리케이션 이미지에 대한 JBoss EAP를 제공할 수 있습니다.

    • 이미지 이름: mycomp/myapp
    • 태그: mycomp/myapp:1.0
    • A digest: mycomp/myapp:@sha256:0af38bc38be93116b6a1d86a9c78bd14cd527121970899d719baf78e5dc7bfd2
    • imagestreamtag: my-app:latest
  6. 애플리케이션 크기를 지정합니다. 예를 들면 다음과 같습니다.

    spec:
      replicas:2
  7. env 사양 을 사용하여 애플리케이션 환경을 구성합니다. 환경 변수는 POSTGRESQL_SERVICE_HOST 또는 POSTGRESQL_USER와 같은 Secret 오브젝트에서 직접 가져올 수 있습니다. 예를 들면 다음과 같습니다.

    spec:
      env:
      - name: POSTGRESQL_SERVICE_HOST
        value: postgresql
      - name: POSTGRESQL_SERVICE_PORT
        value: '5432'
      - name: POSTGRESQL_DATABASE
        valueFrom:
          secretKeyRef:
            key: database-name
            name: postgresql
      - name: POSTGRESQL_USER
        valueFrom:
          secretKeyRef:
            key: database-user
            name: postgresql
      - name: POSTGRESQL_PASSWORD
        valueFrom:
          secretKeyRef:
            key: database-password
            name: postgresql
  8. 애플리케이션 배포와 관련된 다음 선택적 구성을 완료합니다.

    • 서버 데이터 디렉터리에 대한 스토리지 요구 사항을 지정합니다. 자세한 내용은 애플리케이션용 영구 스토리지 구성을 참조하십시오.
    • WildFlyServerSpec 에서 생성한 시크릿 이름을 지정하여 애플리케이션을 실행하는 Pod의 볼륨으로 마운트합니다. 예를 들면 다음과 같습니다.

      spec:
        secrets:
          - my-secret

      Secret/etc/secrets/<secret name >에 마운트되며 각 키/값은 파일로 저장됩니다. 파일 이름은 키이고 콘텐츠는 값입니다. 시크릿 은 Pod 내부에 볼륨으로 마운트됩니다. 다음 예제에서는 키 값을 찾는 데 사용할 수 있는 명령을 보여줍니다.

      $ ls /etc/secrets/my-secret/
      my-key  my-password
      $ cat /etc/secrets/my-secret/my-key
      devuser
      $ cat /etc/secrets/my-secret/my-password
      my-very-secure-pasword
      참고

      Secret 오브젝트를 수정하면 프로젝트 불일치가 발생할 수 있습니다. 기존 Secret 오브젝트를 수정하는 대신 Red Hat은 이전 오브젝트와 동일한 콘텐츠를 사용하여 새 오브젝트를 생성하는 것이 좋습니다. 그런 다음 필요에 따라 콘텐츠를 업데이트하고 operator CR(사용자 정의 리소스)의 참조를 old에서 new로 변경할 수 있습니다. 이는 새 CR 업데이트로 간주되며 Pod가 다시 로드됩니다.

    • WildFlyServerSpec 에서 생성한 ConfigMap 의 이름을 지정하여 애플리케이션을 실행하는 Pod의 볼륨으로 마운트합니다. 예를 들면 다음과 같습니다.

      spec:
        configMaps:
        - my-config

      ConfigMap/etc/configmaps/<configmap name >에 마운트되며 각 키/값은 파일로 저장됩니다. 파일 이름은 키이고 콘텐츠는 값입니다. ConfigMap 은 Pod 내부에 볼륨으로 마운트됩니다. 키 값을 찾으려면 다음을 수행합니다.

      $ ls /etc/configmaps/my-config/
      key1 key2
      $ cat /etc/configmaps/my-config/key1
      value1
      $ cat /etc/configmaps/my-config/key2
      value2
      참고

      ConfigMap 을 수정하면 프로젝트 불일치가 발생할 수 있습니다. 기존 ConfigMap 을 수정하는 대신 Red Hat은 이전 ConfigMap 과 동일한 콘텐츠를 사용하여 새 ConfigMap을 생성하는 것이 좋습니다. 그런 다음 필요에 따라 콘텐츠를 업데이트하고 operator CR(사용자 정의 리소스)의 참조를 old에서 new로 변경할 수 있습니다. 이는 새 CR 업데이트로 간주되며 Pod가 다시 로드됩니다.

    • 고유한 독립 실행형 ConfigMap 을 사용하도록 선택하는 경우 ConfigMap 의 이름과 standalone.xml 파일의 키를 제공합니다.

        standaloneConfigMap:
          name: clusterbench-config-map
          key: standalone.xml
      참고

      JBoss EAP 8.0에서는 standalone.xml 파일에서 ConfigMap 을 생성할 수 없습니다.

    • OpenShift에서 기본 HTTP 경로 생성을 비활성화하려면 disableHTTPRoutetrue 로 설정합니다.

      spec:
        disableHTTPRoute: true

9.1.3.1. 시크릿 생성

애플리케이션의 CRD(CustomResourceDefinition) 파일이 Secret 을 참조하는 경우 EAP Operator를 사용하여 OpenShift에 애플리케이션을 배포하기 전에 Secret 을 생성해야 합니다.

프로세스

  • 시크릿 을 생성하려면 다음을 수행합니다.
$ oc create secret generic my-secret --from-literal=my-key=devuser --from-literal=my-password='my-very-secure-pasword'

9.1.3.2. configMap 생성

애플리케이션의 CRD(CustomResourceDefinition) 파일이 spec.ConfigMaps 필드의 ConfigMap을 참조하는 경우 EAP Operator를 사용하여 OpenShift에 애플리케이션을 배포하기 전에 ConfigMap을 생성해야 합니다.

프로세스

  • configmap을 생성하려면 다음을 수행합니다.
 $ oc create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
configmap/my-config created

9.1.3.3. standalone.xml File에서 configMap 생성

OpenShift S2I(Source-to-Image)용 JBoss EAP에서 제공하는 애플리케이션 이미지에서 사용하지 않고 고유한 JBoss EAP 독립 실행형 구성을 생성할 수 있습니다. standalone.xml 파일은 Operator가 액세스할 수 있는 ConfigMap 에 배치해야 합니다.

참고

ConfigMap 에서 standalone.xml 파일을 제공하는 것은 JBoss EAP 8.0에서 지원되지 않습니다.

프로세스

  • standalone.xml 파일에서 ConfigMap 을 생성하려면 다음을 수행합니다.
 $ oc create configmap clusterbench-config-map --from-file examples/clustering/config/standalone.xml
configmap/clusterbench-config-map created

9.1.3.4. 애플리케이션의 영구 스토리지 구성

애플리케이션에 Pod를 다시 시작할 때마다 유지해야 하는 트랜잭션 또는 메시징 로그와 같은 일부 데이터에 대한 영구 스토리지가 필요한 경우 스토리지 사양을 구성합니다. 스토리지 사양이 비어 있으면 애플리케이션의 각 Pod에서 EmptyDir 볼륨이 사용됩니다. 그러나 해당 Pod가 중지된 후에는 이 볼륨이 유지되지 않습니다.

프로세스

  1. JBoss EAP 독립 실행형 데이터 디렉터리를 저장하기 위한 리소스 요구 사항을 구성하려면 volumeClaimTemplate 을 지정합니다. 템플릿의 이름은 JBoss EAP의 이름에서 파생됩니다. 해당 볼륨은 ReadWriteOnce 액세스 모드로 마운트됩니다.

    spec:
      storage:
        volumeClaimTemplate:
          spec:
            resources:
              requests:
                storage: 3Gi

    이 스토리지 요구 사항을 충족하는 영구 볼륨은 /eap/standalone/data 디렉터리에 마운트됩니다.

9.1.4. EAP Operator를 사용하여 애플리케이션 메트릭 보기

EAP Operator를 사용하여 OpenShift에 배포된 애플리케이션의 지표를 볼 수 있습니다.

클러스터 관리자가 프로젝트에서 지표 모니터링을 활성화하면 EAP Operator가 OpenShift 콘솔에 지표를 자동으로 표시합니다.

사전 요구 사항

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 모니터링메트릭 으로 이동합니다.
  2. 메트릭 화면에서 텍스트 상자에 애플리케이션 이름을 입력하여 애플리케이션을 선택합니다. 애플리케이션의 메트릭이 화면에 표시됩니다.

9.1.5. 웹 콘솔을 사용하여 EAP Operator 설치 제거

클러스터에서 EAP Operator를 삭제하거나 제거할 수 있습니다. 서브스크립션을 삭제하여 서브스크립션된 네임스페이스에서 제거할 수 있습니다. EAP Operator의 CSV(ClusterServiceVersion) 및 배포를 제거할 수도 있습니다.

참고

데이터 일관성과 안전성을 보장하기 위해 EAP Operator를 제거하기 전에 클러스터의 Pod 수를 0으로 축소합니다.

웹 콘솔을 사용하여 EAP Operator를 설치 제거할 수 있습니다.

주의

전체 wildflyserver 정의(oc delete wildflyserver <deployment_name>)를 삭제하기로 결정한 경우, 완료되지 않은 트랜잭션과 관계없이 Pod가 시작되지 않고 Pod가 종료됩니다. 이 작업을 수행하는 완료되지 않은 작업에서는 나중에 시작하는 데이터 변경 사항이 차단될 수 있습니다. 이 wildflyserver 를 사용한 트랜잭션 엔터프라이즈 빈 원격 호출과 관련된 다른 JBoss EAP 인스턴스에 대한 데이터 변경도 차단될 수 있습니다.

프로세스

  1. Operator설치된 Operator 페이지에서 JBoss EAP 를 선택합니다.
  2. Operator 상세 정보 페이지 오른쪽에 있는 작업 드롭다운 메뉴에서 Operator 제거를 선택합니다.
  3. Operator 서브스크립션 제거 창에서 프롬프트가 표시되면 설치와 관련된 모든 구성 요소를 제거하려는 경우 선택적으로 선택한 네임스페이스 Operator 완전히 제거 확인란을 선택합니다. 이렇게 하면 CSV가 제거되어 Operator와 연결된 Pod, 배포, CRD(사용자 정의 리소스 정의) 및 CR(사용자 정의 리소스)이 제거됩니다.
  4. 제거를 클릭합니다. EAP Operator는 실행을 중지하고 더 이상 업데이트를 수신하지 않습니다.

9.1.6. CLI를 사용하여 JBoss EAP Operator 설치 제거

클러스터에서 EAP Operator를 삭제하거나 설치 제거할 수 있습니다. 서브스크립션을 삭제하여 서브스크립션된 네임스페이스에서 제거할 수 있습니다. EAP Operator의 CSV(ClusterServiceVersion) 및 배포를 제거할 수도 있습니다.

참고

데이터 일관성과 안전성을 보장하기 위해 EAP Operator를 제거하기 전에 클러스터의 Pod 수를 0으로 축소합니다.

명령줄을 사용하여 EAP Operator를 설치 제거할 수 있습니다.

명령줄을 사용하는 경우 대상 네임스페이스에서 서브스크립션 및 CSV를 삭제하여 Operator를 제거합니다.

주의

전체 wildflyserver 정의(oc delete wildflyserver <deployment_name>)를 삭제하기로 결정한 경우, 완료되지 않은 트랜잭션과 관계없이 Pod가 시작되지 않고 Pod가 종료됩니다. 이 작업을 수행하는 완료되지 않은 작업에서는 나중에 시작하는 데이터 변경 사항이 차단될 수 있습니다. 이 wildflyserver 를 사용한 트랜잭션 엔터프라이즈 빈 원격 호출과 관련된 다른 JBoss EAP 인스턴스에 대한 데이터 변경도 차단될 수 있습니다.

프로세스

  1. currentCSV 필드에서 EAP Operator 서브스크립션의 현재 버전을 확인합니다.

    $ oc get subscription eap-operator -n openshift-operators -o yaml | grep currentCSV
      currentCSV: eap-operator.v1.0.0
  2. EAP Operator의 서브스크립션을 삭제합니다.

    $ oc delete subscription eap-operator -n openshift-operators
    subscription.operators.coreos.com "eap-operator" deleted
  3. 이전 단계의 currentCSV 값을 사용하여 대상 네임스페이스에서 EAP Operator의 CSV를 삭제합니다.

    $ oc delete clusterserviceversion eap-operator.v1.0.0 -n openshift-operators
    clusterserviceversion.operators.coreos.com "eap-operator.v1.0.0" deleted

9.1.7. 안전한 트랜잭션 복구를 위한 JBoss EAP operator

JBoss EAP Operator는 애플리케이션 클러스터를 종료하기 전에 데이터 일관성을 보장합니다. 이를 위해 Operator는 복제본을 축소하고 종료를 위해 Pod를 정리 로 표시하기 전에 모든 트랜잭션이 완료되었는지 확인합니다.

즉, 데이터 불일치 없이 배포를 안전하게 제거하려면 먼저 Pod 수를 0으로 축소한 다음 모든 Pod가 종료될 때까지 기다린 다음 wildflyserver 인스턴스만 삭제해야 합니다.

주의

전체 wildflyserver 정의(oc delete wildflyserver <deployment_name>)를 삭제하기로 결정한 경우, 완료되지 않은 트랜잭션과 관계없이 Pod가 시작되지 않고 Pod가 종료됩니다. 이 작업을 수행하는 완료되지 않은 작업에서는 나중에 시작하는 데이터 변경 사항이 차단될 수 있습니다. 이 wildflyserver 를 사용한 트랜잭션 엔터프라이즈 빈 원격 호출과 관련된 다른 JBoss EAP 인스턴스에 대한 데이터 변경도 차단될 수 있습니다.

스케일다운 프로세스가 Pod 상태(oc get pod <pod_name>)가 여전히 Running 으로 표시됩니다. Pod는 이를 대상으로 하는 원격 엔터프라이즈 빈 호출을 포함하여 완료되지 않은 모든 트랜잭션을 완료해야 합니다.

스케일 다운 프로세스의 상태를 모니터링하려면 wildflyserver 인스턴스의 상태를 관찰합니다. 자세한 내용은 스케일다운 프로세스 모니터링을 참조하십시오. 스케일 다운 중 Pod 상태에 대한 자세한 내용은 스케일 다운 중 Pod 상태를 참조하십시오.

9.1.7.1. 안정적인 네트워크 호스트 이름을 위한 상태 저장 세트

wildflyserver를 관리하는 EAP Operator는 JBoss EAP 포드를 관리하는 기본 오브젝트로 StatefulSet 을 생성합니다.

StatefulSet 은 상태 저장 애플리케이션을 관리하는 워크로드 API 오브젝트입니다. Pod 세트 배포 및 스케일링을 관리하고 이러한 Pod의 순서 및 고유성을 보장합니다.

StatefulSet 을 사용하면 클러스터의 Pod의 이름이 사전 정의된 순서로 지정됩니다. 또한 Pod 종료가 동일한 순서를 따릅니다. 예를 들어, pod-1은 추론적인 결과가 있는 트랜잭션을 가지고 있으므로 SCALING_DOWN_RECOVERY_DIRTY 의 상태에 있습니다. pod-0이 SCALING_DOWN_CLEAN 상태인 경우에도 pod-1 전에는 종료되지 않습니다. pod-1이 정리 되고 종료될 때까지 pod-0은 SCALING_DOWN_CLEAN 상태로 유지됩니다. 그러나 pod-0이 SCALING_DOWN_CLEAN 상태에 있더라도 새 요청이 수신되지 않으며 거의 유휴 상태입니다.

참고

StatefulSet 의 복제본 크기를 줄이거나 Pod 자체를 삭제하는 것은 효과가 없으며 이러한 변경 사항이 취소됩니다.

9.1.7.2. 스케일 다운 프로세스 모니터링

스케일 다운 프로세스의 상태를 모니터링하려면 wildflyserver 인스턴스의 상태를 관찰해야 합니다. 스케일 다운 중 다양한 Pod 상태에 대한 자세한 내용은 스케일 다운 중 Pod 상태를 참조하십시오.

프로세스

  • 축소 프로세스의 상태를 확인하려면 다음을 수행합니다.

    oc describe wildflyserver <name>
    • WildFlyServer.Status.Scalingdown PodWildFlyServer.Status.Replicas 필드에는 활성 및 비활성 Pod의 전체 상태가 표시됩니다.
    • Scalingdown Pods 필드에는 모든 완료되지 않은 트랜잭션이 완료될 때 종료될 Pod 수가 표시됩니다.
    • WildFlyServer.Status.Replicas 필드에는 실행 중인 현재 Pod 수가 표시됩니다.
    • WildFlyServer.Spec.Replicas 필드에는 ACTIVE 상태의 Pod 수가 표시됩니다.
    • 축소할 Pod가 없는 경우 WildFlyServer.Status.ReplicasWildFlyServer.Spec.Replicas 필드의 Pod 수가 동일합니다.
9.1.7.2.1. 스케일 다운 중 Pod 상태

다음 표에서는 확장 중에 다양한 Pod 상태를 설명합니다.

표 9.1. Pod 상태 설명

Pod 상태설명

활성 상태

Pod는 활성 상태이며 요청을 처리합니다.

SCALING_DOWN_RECOVERY_INVESTIGATION

Pod를 축소하려고 합니다. 스케일 다운 프로세스는 JBoss EAP의 트랜잭션 상태에 대해 조사 중입니다.

SCALING_DOWN_RECOVERY_DIRTY

JBoss EAP에는 일부 불완전한 트랜잭션이 포함되어 있습니다. Pod를 정리할 때까지 종료할 수 없습니다. 트랜잭션 복구 프로세스는 JBoss EAP에서 주기적으로 실행되며 트랜잭션이 완료될 때까지 대기합니다.

SCALING_DOWN_CLEAN

Pod는 트랜잭션 축소 처리로 처리되며 클러스터에서 제거되도록 정리 되어 있습니다.

9.1.7.3. 논리적인 결과를 사용하여 트랜잭션 중 축소

트랜잭션 결과를 알 수 없는 경우 자동 트랜잭션 복구를 수행할 수 없습니다. 그런 다음 수동으로 트랜잭션을 복구해야합니다.

사전 요구 사항

  • Pod의 상태는 SCALING_DOWN_RECOVERY_DIRTY 에 있습니다.

프로세스

  1. CLI를 사용하여 JBoss EAP 인스턴스에 액세스합니다.
  2. 트랜잭션 오브젝트 저장소의 모든 추론 트랜잭션 레코드를 해결합니다. 자세한 내용은 JBoss EAP의 트랜잭션 관리에서 Recovering Heuristic Outcomes 를 참조하십시오.
  3. Enterprise Cryostat 클라이언트 복구 폴더에서 모든 레코드를 제거합니다.

    1. Pod enterprise Cryostat 클라이언트 복구 디렉터리에서 모든 파일을 제거합니다.

      $JBOSS_HOME/standalone/data/ejb-xa-recovery
      oc exec <podname> rm -rf $JBOSS_HOME/standalone/data/ejb-xa-recovery
  4. Pod 상태가 SCALING_DOWN_CLEAN 으로 변경되고 Pod가 종료됩니다.

9.1.7.4. 트랜잭션 로그에 JDBC 스토리지를 사용하도록 트랜잭션 하위 시스템 구성

시스템이 트랜잭션 로그 를 저장할 파일 시스템을 제공하지 않는 경우 JBoss EAP S2I 이미지를 사용하여 JDBC 개체 저장소를 구성합니다.

중요

JBoss EAP가 부팅 가능한 JAR로 배포되면 S2I 환경 변수를 사용할 수 없습니다. 이 경우 Galleon 계층을 생성하거나 CLI 스크립트를 구성하여 필요한 구성을 변경해야 합니다.

JDBC 오브젝트 저장소는 TX_DATABASE_PREFIX_MAPPING 환경 변수를 사용하여 설정할 수 있습니다. 이 변수는 DB_SERVICE_PREFIX_MAPPING 과 동일한 구조를 갖습니다.

사전 요구 사항

  • 환경 변수 값을 기반으로 데이터 소스를 생성했습니다.
  • 데이터베이스와 JDBC 개체 저장소를 통해 통신하는 트랜잭션 관리자 간에 일관된 데이터 읽기 및 쓰기 권한이 있어야 합니다. 자세한 내용은 JDBC 데이터 소스 구성을참조하십시오.

프로세스

  • S2I 환경 변수를 통해 JDBC 오브젝트 저장소를 설정하고 구성합니다.

    예제

    # Narayana JDBC objectstore configuration via s2i env variables
    - name: TX_DATABASE_PREFIX_MAPPING
      value: 'PostgresJdbcObjectStore-postgresql=PG_OBJECTSTORE'
    - name: POSTGRESJDBCOBJECTSTORE_POSTGRESQL_SERVICE_HOST
      value: 'postgresql'
    - name: POSTGRESJDBCOBJECTSTORE_POSTGRESQL_SERVICE_PORT
      value: '5432'
    - name: PG_OBJECTSTORE_JNDI
      value: 'java:jboss/datasources/PostgresJdbc'
    - name: PG_OBJECTSTORE_DRIVER
      value: 'postgresql'
    - name: PG_OBJECTSTORE_DATABASE
      value: 'sampledb'
    - name: PG_OBJECTSTORE_USERNAME
      value: 'admin'
    - name: PG_OBJECTSTORE_PASSWORD
      value: 'admin'

검증

  • standalone.xml 구성 파일 oc rsh <podname> cat /opt/server/standalone/ standalone.xml 을 확인하여 데이터 소스 구성 및 트랜잭션 하위 시스템 구성 을 모두 확인할 수 있습니다.

    예상 출력:

    <datasource jta="false" jndi-name="java:jboss/datasources/PostgresJdbcObjectStore" pool-name="postgresjdbcobjectstore_postgresqlObjectStorePool"
        enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
        <connection-url>jdbc:postgresql://postgresql:5432/sampledb</connection-url>
        <driver>postgresql</driver>
        <security>
            <user-name>admin</user-name>
            <password>admin</password>
        </security>
    </datasource>
    
    <!-- under subsystem urn:jboss:domain:transactions -->
    <jdbc-store datasource-jndi-name="java:jboss/datasources/PostgresJdbcObjectStore">
         <!-- the pod name was named transactions-xa-0 -->
        <action table-prefix="ostransactionsxa0"/>
        <communication table-prefix="ostransactionsxa0"/>
        <state table-prefix="ostransactionsxa0"/>
    </jdbc-store>

추가 리소스

  • 관리 콘솔 또는 관리 CLI를 사용하여 데이터 소스 생성에 대한 자세한 내용은 JBoss EAP 구성 가이드의 데이터 소스 생성 을 참조하십시오.

9.1.8. 수평 Pod 자동 스케일러 HPA를 사용하여 Pod 자동 스케일링

EAP Operator를 사용하면 수평 Pod 자동 스케일러 HPA를 사용하여 해당 EAP 애플리케이션에 속하는 Pod에서 수집한 메트릭을 기반으로 EAP 애플리케이션의 규모를 자동으로 늘리거나 줄일 수 있습니다.

참고

HPA를 사용하면 Pod를 축소할 때 트랜잭션 복구가 계속 처리됩니다.

프로세스

  1. 리소스를 구성합니다.

    apiVersion: wildfly.org/v1alpha1
    kind: WildFlyServer
    metadata:
      name: eap-helloworld
    spec:
      applicationImage: 'eap-helloworld:latest'
      replicas: 1
      resources:
        limits:
          cpu: 500m
          memory: 2Gi
        requests:
          cpu: 100m
          memory: 1Gi
    중요

    자동 스케일링이 예상대로 작동하려면 Pod에서 컨테이너의 리소스 제한 및 요청을 지정해야 합니다.

  2. Horizontal Pod 자동 스케일러를 생성합니다.

    oc autoscale wildflyserver/eap-helloworld --cpu-percent=50 --min=1 --max=10

검증

  • 복제본을 확인하여 HPA 동작을 확인할 수 있습니다. 워크로드 증가 또는 감소에 따라 복제본 수가 증가 또는 감소합니다.
oc get hpa -w
NAME               REFERENCE                        TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
eap-helloworld   WildFlyServer/eap-helloworld   217%/50%   1         10        1          4s
eap-helloworld   WildFlyServer/eap-helloworld   217%/50%   1         10        4          17s
eap-helloworld   WildFlyServer/eap-helloworld   133%/50%   1         10        8          32s
eap-helloworld   WildFlyServer/eap-helloworld   133%/50%   1         10        10         47s
eap-helloworld   WildFlyServer/eap-helloworld   139%/50%   1         10        10         62s
eap-helloworld   WildFlyServer/eap-helloworld   180%/50%   1         10        10         92s
eap-helloworld   WildFlyServer/eap-helloworld   133%/50%   1         10        10         2m2s

9.1.9. Jarkarta Enterprise beans Remoting on OpenShift

9.1.9.1. Jakarta Enterprise Cryostats remoting on openShift

JBoss EAP가 OpenShift의 다른 JBoss EAP 클러스터 간에 엔터프라이즈급 remoting 호출을 올바르게 사용하려면 OpenShift에서 엔터프라이즈 empty 원격 구성 옵션을 이해해야 합니다.

참고

OpenShift에 배포할 때 EAP Operator 사용을 고려하십시오. EAP Operator는 엔터프라이즈 빈 원격 설정 및 트랜잭션 복구 처리를 적절하게 처리하기 위해 StatefulSet 을 사용합니다. StatefulSet 은 Pod를 다시 시작한 후에도 영구 스토리지 및 네트워크 호스트 이름 안정성을 보장합니다.

트랜잭션 전파를 통한 엔터프라이즈VLAN 원격 호출을 사용하여 JBoss EAP 인스턴스에 연결할 때 네트워크 호스트 이름 안정성이 필요합니다. 포드가 다시 시작되는 경우에도 동일한 호스트 이름으로 JBoss EAP 인스턴스에 연결할 수 있어야 합니다. 상태 저장 구성 요소인 트랜잭션 관리자는 지속된 트랜잭션 데이터를 특정 JBoss EAP 인스턴스에 바인딩합니다. 트랜잭션 로그는 특정 JBoss EAP 인스턴스에 바인딩되므로 동일한 인스턴스에서 완료해야 합니다.

JDBC 트랜잭션 로그 저장소를 사용할 때 데이터 손실을 방지하려면 데이터베이스에서 데이터 일치 읽기 및 쓰기를 제공하는지 확인합니다. 데이터베이스가 여러 인스턴스로 수평으로 확장될 때 일관된 데이터 읽기 및 쓰기가 중요합니다.

enterprise Cryostat 원격 호출자에는 원격 호출을 구성하는 두 가지 옵션이 있습니다.

엔터프라이즈 빈 원격 호출 구성 방법에 따라 대상 노드의 주소를 나타내는 값을 재구성해야 합니다.

참고

원격 호출의 대상 엔터프라이즈 빈 이름은 첫 번째 포드의 DNS 주소여야 합니다.

StatefulSet 동작은 Pod의 순서에 따라 다릅니다. Pod의 이름은 사전 정의된 순서로 지정됩니다. 예를 들어 애플리케이션을 3개의 복제본으로 스케일링하는 경우 Pod에 name -server-0 , Cryostat-server -1 , Cryostat -server -2 와 같은 이름이 있습니다.

EAP Operator는 특정 DNS 호스트 이름이 포드에 할당되도록 하는 헤드리스 서비스도 사용합니다. 애플리케이션에서 EAP Operator를 사용하는 경우 헤드리스 서비스가 이름(예: Cryostat -server-headless )으로 생성됩니다. 이 경우 첫 번째 Pod의 DNS 이름은 Cryostat -server-0.eap-server-headless 입니다.

hostname -server-0.eap-server-headless 를 사용하면 엔터프라이즈 콩 호출이 클러스터에 연결된 모든 EAP 인스턴스에 도달할 수 있습니다. 부트스트랩 연결은 다음 단계로 EAP 클러스터의 구조를 수집하는 Jakarta Enterprise Cryostats 클라이언트를 초기화하는 데 사용됩니다.

9.1.9.1.1. OpenShift에서 Jakarta Enterprise Cryostat 구성

엔터프라이즈 빈 재모팅을 위해 호출자 역할을 하는 JBoss EAP 서버를 구성해야 합니다. 대상 서버는 엔터프라이즈 빈 원격 호출을 수신할 수 있는 권한이 있는 사용자를 구성해야 합니다.

사전 요구 사항

프로세스

  1. 엔터프라이즈 empty 원격 호출을 수신할 수 있는 권한을 사용하여 대상 서버에 사용자를 생성합니다.

    $JBOSS_HOME/bin/add-user.sh
  2. 호출자 JBoss EAP 애플리케이션 서버를 구성합니다.

    1. 사용자 지정 구성 기능을 사용하여 $JBOSS_HOME/standalone/configuration 에 Cryostat -config.xml 파일을 만듭니다. 자세한 내용은 사용자 지정 구성 을 참조하십시오.
    2. wildfly.config.url 속성을 사용하여 호출자 JBoss EAP 애플리케이션 서버를 구성합니다.

      JAVA_OPTS_APPEND="-Dwildfly.config.url=$JBOSS_HOME/standalone/configuration/eap-config.xml"
      참고

      구성에 다음 예제를 사용하는 경우 구성한 사용자 이름 및 암호로 >> PASTE_…​_HERE <<를 사용자 이름 및 암호로 바꿉니다.

      설정 예

      <configuration>
         <authentication-client xmlns="urn:elytron:1.0">
            <authentication-rules>
               <rule use-configuration="jta">
                  <match-abstract-type name="jta" authority="jboss" />
               </rule>
            </authentication-rules>
            <authentication-configurations>
               <configuration name="jta">
                  <sasl-mechanism-selector selector="DIGEST-MD5" />
                  <providers>
                     <use-service-loader />
                  </providers>
                  <set-user-name name="PASTE_USER_NAME_HERE" />
                  <credentials>
                     <clear-password password="PASTE_PASSWORD_HERE" />
                  </credentials>
                  <set-mechanism-realm name="ApplicationRealm" />
               </configuration>
            </authentication-configurations>
         </authentication-client>
      </configuration>

10장. 문제 해결

Pod는 여러 가지 이유로 다시 시작할 수 있지만 JBoss EAP 포드 재시작의 일반적인 원인에는 특히 메모리 부족 문제가 발생할 수 있습니다. OpenShift Pod 제거에 대한 자세한 내용은 OpenShift 설명서를 참조하십시오.

10.1. Pod 재시작 문제 해결

기본적으로 OpenShift 템플릿용 JBoss EAP는 메모리 부족 문제와 같은 상황이 발생하면 영향을 받는 컨테이너를 자동으로 재시작하도록 구성됩니다. 다음 단계는 메모리 부족 및 기타 Pod 재시작 문제를 진단하고 해결하는 데 도움이 될 수 있습니다.

  1. 문제가 발생한 Pod의 이름을 가져옵니다.

    Pod 이름과 각 Pod가 다음 명령을 사용하여 재시작한 횟수를 확인할 수 있습니다.

    $ oc get pods
  2. 포드가 재시작된 이유를 진단하기 위해 이전 포드의 JBoss EAP 로그 또는 OpenShift 이벤트를 검사할 수 있습니다.

    1. 이전 포드의 JBoss EAP 로그를 보려면 다음 명령을 사용합니다.

      oc logs --previous POD_NAME
    2. OpenShift 이벤트를 보려면 다음 명령을 사용합니다.

      $ oc get events
  3. 리소스 문제로 인해 포드를 다시 시작한 경우 OpenShift 포드 구성을 수정하여 리소스 요청 및 제한을 늘릴 수 있습니다. Pod 컴퓨팅 리소스 구성에 대한 자세한 내용은 OpenShift 설명서를 참조하십시오.

10.2. JBoss EAP 관리 CLI를 사용한 문제 해결

JBoss EAP 관리 CLI, EAP_HOME/bin/jboss-cli.sh 는 문제 해결을 위해 컨테이너 내에서 액세스할 수 있습니다.

중요

JBoss EAP 관리 CLI를 사용하여 실행 중인 포드에서 구성을 변경하지 않는 것이 좋습니다. 컨테이너를 다시 시작하면 실행 중인 컨테이너에서 관리 CLI를 사용하여 변경한 구성은 손실됩니다.

OpenShift용 JBoss EAP를 구성하려면 JBoss EAP 서버 및 애플리케이션 구성을 참조하십시오.

  1. 먼저 실행 중인 포드에 대한 원격 쉘 세션을 엽니다.

    $ oc rsh POD_NAME
  2. 원격 쉘 세션에서 다음 명령을 실행하여 JBoss EAP 관리 CLI를 시작합니다.

    $ /opt/server/bin/jboss-cli.sh

10.3. JBoss EAP 8의 버전 1.0.0에서 1.1.0으로 Helm 차트를 업데이트할 때 오류 문제 해결

Helm 차트를 JBoss EAP 8의 최신 버전으로 업그레이드할 때 오류가 발생할 수 있습니다. Helm 차트를 업그레이드하기 전에 변경할 수 없는 필드를 수정하면 업그레이드 중에 다음 오류 메시지가 표시될 수 있습니다.

UPGRADE FAILED: cannot patch "<helm-release-name>" with kind Deployment: Deployment.apps "<helm-release-name>" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app.kubernetes.io/instance":"<helm-release-name>", "app.kubernetes.io/name":"<helm-release-name>"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable

이 오류를 해결하려면 helm upgrade <helm-release-name> 명령을 실행하기 전에 oc delete deployment <helm-release-name > 명령을 실행하여 배포 리소스를 삭제합니다.

11장. OpenShift Container Platform에 대한 참조 정보

이 섹션의 콘텐츠는 이 애플리케이션 이미지의 엔지니어링 문서에서 파생됩니다. 콘텐츠는 개발 목적 및 제품 문서의 범위를 벗어나는 테스트를 위한 참조로 제공됩니다.

11.1. 정보 환경 변수

다음 환경 변수는 이미지에 정보를 제공하도록 설계되었으며 사용자가 수정하지 않아야 합니다.

표 11.1. 정보 환경 변수

변수 이름설명 및 값

JBOSS_IMAGE_NAME

이미지 이름입니다.

값:

  • jboss-eap-8/eap8-openjdk17-builder-openshift-rhel8 (JDK 17 / RHEL 8)

JBOSS_IMAGE_VERSION

이미지 버전입니다.

값: 이미지 버전 번호입니다. 최신 값은 Red Hat Container Catalog를 참조하십시오.

JBOSS_MODULES_SYSTEM_PKGS

애플리케이션에서 사용할 수 있는 JBoss EAP 시스템 모듈 패키지 쉼표로 구분된 목록입니다.

값: jdk.nashorn.api

STI_BUILDER

jee 프로젝트 유형에 대한 OpenShift S2I 지원을 제공합니다.

값: jee

11.2. 구성 환경 변수

다시 빌드하지 않고도 이미지를 조정하도록 다음 환경 변수를 구성할 수 있습니다.

참고

여기에 나열되지 않은 다른 환경 변수는 JBoss EAP 설명서 를 참조하십시오.

표 11.2. 구성 환경 변수

변수 이름설명

CLI_GRACEFUL_SHUTDOWN

0이 아닌 길이 값으로 설정하면 이미지가 TERM 신호로 종료되지 않으며 JBoss EAP 관리 CLI를 사용하여 shutdown 명령을 실행해야 합니다.

예제 value: true

CONTAINER_HEAP_PERCENT

최대 Java 힙 크기를 사용 가능한 컨테이너 메모리의 백분율로 설정합니다.

예제 값: 0.5

CUSTOM_INSTALL_DIRECTORIES

S2I 프로세스 중 이미지의 아티팩트 설치 및 구성에 사용되는 쉼표로 구분된 디렉터리 목록입니다.

값 예: custom,shared

DEFAULT_JMS_CONNECTION_FACTORY

이 값은 Jakarta Messaging 연결 팩토리에 대한 기본 JNDI 바인딩을 지정하는 데 사용됩니다(예: jms-connection-factory='java:jboss/DefaultJMSConnectionFactory' ).

예제 값: java:jboss/DefaultJMSConnectionFactory

ENABLE_ACCESS_LOG

표준 출력 채널에 대한 액세스 메시지 로깅을 활성화합니다.

액세스 메시지의 로깅은 다음 방법을 사용하여 구현됩니다.

  • JBoss EAP 6.4 OpenShift 이미지는 사용자 지정 JBoss Web Access Log Valve를 사용합니다.
  • OpenShift 이미지용 JBoss EAP는 JBoss EAP 7.4 개발 가이드 의 Cryostat AccessLogHandler 를 사용합니다.

기본값은 false입니다.

INITIAL_HEAP_PERCENT

초기 Java 힙 크기를 최대 힙 크기의 백분율로 설정합니다.

예제 값: 0.5

JAVA_OPTS_APPEND

서버 시작 옵션.

예제 값: -Dfoo=bar

JBOSS_MODULES_SYSTEM_PKGS_APPEND

JBOSS_MODULES_SYSTEM_PKGS 환경 변수에 추가할 쉼표로 구분된 패키지 이름 목록입니다.

예시 값: org.jboss.byteman

JGROUPS_CLUSTER_PASSWORD

Cryostat 클러스터에 참여할 수 있도록 노드를 인증하는 데 사용되는 암호입니다. ASYM_ENCRYPT Cryostat 클러스터 트래픽 암호화 프로토콜을 사용하는 경우 필수 항목입니다. 설정되지 않은 경우 인증이 비활성화되어 클러스터 통신이 암호화되지 않고 경고가 발행됩니다. SYM_ENCRYPT Cryostat 클러스터 트래픽 암호화 프로토콜을 사용하는 경우 선택 사항입니다.

예제 값: mypassword

JGROUPS_ENCRYPT_KEYSTORE

SYM_ENCRYPT Cryostat 클러스터 트래픽 암호화 프로토콜을 사용할 때 지정된 생성된 시크릿 내의 키 저장소 파일 이름입니다. 설정되지 않은 경우 클러스터 통신이 암호화되지 않고 경고가 표시됩니다.

예제 값: jgroups.jceks

JGROUPS_ENCRYPT_KEYSTORE_DIR

키 저장소가 포함된 시크릿이 마운트되는 디렉터리 경로입니다.

값 예: /etc/jgroups-encrypt-secret-volume

JGROUPS_ENCRYPT_NAME

SYM_ENCRYPT Cryostat 클러스터 트래픽 암호화 프로토콜을 사용하는 경우 서버의 인증서와 연결된 이름입니다. 설정되지 않은 경우 클러스터 통신이 암호화되지 않고 경고가 표시됩니다.

예제 값: jgroups

JGROUPS_ENCRYPT_PASSWORD

SYM_ENCRYPT Cryostat 클러스터 트래픽 암호화 프로토콜을 사용하는 경우 키 저장소 및 인증서에 액세스하는 데 사용되는 암호입니다. 설정되지 않은 경우 클러스터 통신이 암호화되지 않고 경고가 표시됩니다.

예제 값: mypassword

JGROUPS_ENCRYPT_PROTOCOL

클러스터 트래픽의 암호화에 사용할 Cryostat 프로토콜입니다. SYM_ENCRYPT 또는 ASYM_ENCRYPT 일 수 있습니다.

기본값은 SYM_ENCRYPT 입니다.

예제 값: ASYM_ENCRYPT

JGROUPS_PING_PROTOCOL

노드 검색에 사용할 Cryostat 프로토콜입니다. dns.DNS_PING 또는 kubernetes.KUBE_PING 일 수 있습니다.

MQ_SIMPLE_DEFAULT_PHYSICAL_DESTINATION

이전 버전과의 호환성을 위해 큐/ MyQueuetopic/ MyTopic 대신 MyQueue 및 My Topic을 물리적 대상 이름 기본값으로 사용하려면 true 로 설정합니다.

OPENSHIFT_DNS_PING_SERVICE_NAME

DNS 검색 메커니즘을 위해 서버에서 ping 포트를 노출하는 서비스의 이름입니다.

예제 값: Cryostat-app-ping

OPENSHIFT_DNS_PING_SERVICE_PORT

DNS 검색 메커니즘에 대한 ping 포트의 포트 번호입니다. 지정하지 않으면 서비스의 SRV 레코드에서 포트 번호를 검색하거나 기본 8888 이 사용됩니다.

기본값은 8888 입니다.

OPENSHIFT_KUBE_PING_LABELS

Kubernetes 검색 메커니즘에 대한 클러스터링 라벨 선택기입니다.

예제 값: app=eap-app

OPENSHIFT_KUBE_PING_NAMESPACE

Kubernetes 검색 메커니즘을 위한 프로젝트 네임스페이스 클러스터링.

예제 값: myproject

SCRIPT_DEBUG

true 로 설정하면 -x 옵션을 사용하여 Bash 스크립트가 실행되도록 하여 명령과 해당 인수를 실행할 때 인쇄합니다.

11.3. 노출된 포트

표 11.3. 노출된 포트

포트 번호설명

8443

HTTPS

11.4. 데이터 소스

데이터 소스는 일부 환경 변수의 값에 따라 자동으로 생성됩니다.

가장 중요한 환경 변수는 데이터 소스에 대한 JNDI 매핑을 정의하므로 DB_SERVICE_PREFIX_MAPPING 입니다. 이 변수에 허용되는 값은 쉼표로 구분된 POOLNAME-DATABASETYPE=PREFIX트립 릿 목록입니다.

  • POOLNAME 은 데이터 소스에서 풀 이름으로 사용됩니다.
  • DATABASETYPE 은 사용할 데이터베이스 드라이버입니다.
  • PREFIX 는 데이터 소스를 구성하는 데 사용되는 환경 변수의 이름에 사용되는 접두사입니다.

11.4.1. 데이터 소스에 대한 JNDI 매핑

DB_SERVICE_PREF IX_MAPPING 환경 변수에 정의된 각POOLNAME-DATABASETYPE=PREFIX 트리트에 대해 시작 스크립트는 이미지를 실행할 때 실행되는 별도의 데이터 소스를 생성합니다.

참고

DB_SERVICE_PREFIX_MAPPING 의 첫 번째 부분은 소문자여야 합니다.

DATABASETYPE 은 데이터 소스에 대한 드라이버를 결정합니다.

드라이버 구성에 대한 자세한 내용은 모듈, 드라이버 및 일반 배포를 참조하십시오. JDK 8 이미지에는 기본적으로 postgresqlmysql 에 대한 드라이버가 있습니다.

주의

POOLNAME 매개변수에는 특수 문자를 사용하지 마십시오.

데이터베이스 드라이버

OpenShift 이미지용 JBoss EAP와 함께 Red Hat 제공 내부 데이터 소스 드라이버 사용 지원이 더 이상 사용되지 않습니다. 데이터베이스 벤더에서 얻은 JDBC 드라이버를 JBoss EAP 애플리케이션에 사용하는 것이 좋습니다.

다음 내부 데이터 소스는 더 이상 OpenShift 이미지용 JBoss EAP와 함께 제공되지 않습니다.

  • MySQL
  • PostgreSQL

드라이버 설치에 대한 자세한 내용은 모듈, 드라이버 및 일반 배포를 참조하십시오.

JBoss EAP를 사용한 JDBC 드라이버 구성에 대한 자세한 내용은 JBoss EAP 구성 가이드의 JDBC 드라이버 를 참조하십시오.

프로비저닝된 서버에 추가하려는 경우 이러한 드라이버 및 데이터 소스를 설치하기 위해 사용자 지정 계층을 만들 수도 있습니다.

11.4.1.1. 데이터 소스 구성 환경 변수

다른 데이터 소스 속성을 구성하려면 다음 환경 변수를 사용합니다.

중요

다음 변수 이름의 POOLNAME, DATABASETYPEPREFIX 값을 적절한 값으로 교체해야 합니다. 이러한 대체 가능한 값은 이 섹션과 Datasources 섹션에 설명되어 있습니다.

변수 이름설명

POOLNAME_DATABASETYPE_SERVICE_HOST

데이터 소스의 connection-url 속성에 사용할 데이터베이스 서버의 호스트 이름 또는 IP 주소를 정의합니다.

예제 값: 192.168.1.3

POOLNAME_DATABASETYPE_SERVICE_PORT

데이터 소스에 대한 데이터베이스 서버의 포트를 정의합니다.

예제 값: 5432

PREFIX_BACKGROUND_VALIDATION

true 데이터베이스 연결로 설정하면 사용하기 전에 백그라운드 스레드에서 주기적으로 유효성을 검사합니다. 기본값은 false 입니다. 즉 validate-on-match 메서드는 기본적으로 활성화되어 있습니다.

PREFIX_BACKGROUND_VALIDATION_MILLIS

백그라운드 유효성 검사 데이터베이스 연결 유효성 검사 메커니즘이 활성화된 경우 검증 빈도(밀리초)를 지정합니다(PREFIX_BACKGROUND_VALIDATION 변수가 true로 설정됨). 기본값은 10000 입니다.

PREFIX_CONNECTION_CHECKER

사용 중인 특정 데이터베이스에 대한 연결의 유효성을 검사하는 데 사용되는 연결 검사 클래스를 지정합니다.

예: org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker

PREFIX_DATABASE

데이터 소스의 데이터베이스 이름을 정의합니다.

예제 값: myDatabase

PREFIX_DRIVER

데이터 소스에 대한 Java 데이터베이스 드라이버를 정의합니다.

예시 값: postgresql

PREFIX_EXCEPTION_SORTER

치명적인 데이터베이스 연결 예외 이후 적절하게 감지 및 정리하는 데 사용되는 예외 분류기 클래스를 지정합니다.

예제 값: org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter

PREFIX_JNDI

데이터 소스에 대한 JNDI 이름을 정의합니다. 기본값은 java:jboss/datasources/POOLNAME_DATABASETYPE 입니다. 여기서 POOLNAMEDATABASETYPE 은 위에서 설명한 트리트에서 가져옵니다. 이 설정은 생성된 기본 JNDI 이름을 재정의하려는 경우에 유용합니다.

예제 값: java:jboss/datasources/test-postgresql

PREFIX_JTA

비 XA 데이터 소스에 대한 Jakarta 트랜잭션 옵션을 정의합니다. XA 데이터 소스는 이미 Jakarta 트랜잭션입니다.

기본값은 true 입니다.

PREFIX_MAX_POOL_SIZE

데이터 소스에 대한 최대 풀 크기 옵션을 정의합니다.

예제 값: 20

PREFIX_MIN_POOL_SIZE

데이터 소스에 대한 최소 풀 크기 옵션을 정의합니다.

예제 값: 1

PREFIX_NONXA

데이터 소스를 비 XA 데이터 소스로 정의합니다. 기본값은 false입니다.

PREFIX_PASSWORD

데이터 소스의 암호를 정의합니다.

예: password

PREFIX_TX_ISOLATION

데이터 소스에 대한 java.sql.Connection 트랜잭션 격리 수준을 정의합니다.

예제 값: TRANSACTION_READ_UNCOMMITTED

PREFIX_URL

데이터 소스에 대한 연결 URL을 정의합니다.

예제 값: jdbc:postgresql://localhost:5432/postgresdb

PREFIX_USERNAME

데이터 소스의 사용자 이름을 정의합니다.

예제 값: admin

11.4.1.2. 예

이 예제에서는 DB_SERVICE_PREFIX_MAPPING 환경 변수의 값이 데이터 소스 생성에 어떤 영향을 미치는지 보여줍니다.

11.4.1.2.1. 단일 매핑

test-postgresql=TEST 값을 고려하십시오.

이렇게 하면 java:jboss/datasources/test_postgresql 이름을 사용하여 데이터 소스가 생성됩니다. 또한 password 및 username과 같은 모든 필수 설정은 Cryostat _ 접두사(예: Cryostat_ USERNAME 및 Cryostat _ PASSWORD )를 사용하여 환경 변수로 제공되어야 합니다.

11.4.1.2.2. 여러 매핑

여러 데이터 소스 매핑을 지정할 수 있습니다.

참고

항상 여러 데이터 소스 매핑을 쉼표로 구분합니다.

DB_SERVICE_PREFIX_MAPPING 환경 변수에 대해 다음 값을 고려하십시오. cloud-postgresql=CLOUD,test-mysql=TEST_MYSQL.

이렇게 하면 다음 두 데이터 소스가 생성됩니다.

  1. java:jboss/datasources/test_mysql
  2. java:jboss/datasources/cloud_postgresql

그런 다음 MySQL 데이터 소스의 사용자 이름 및 암호(예: Cryostat _MYSQL_ USERNAME )와 같은 항목을 구성하기 위해 Cryostat_MYSQL 접두사를 사용할 수 있습니다. PostgreSQL 데이터 소스의 경우 CLOUD_ 접두사를 사용합니다(예: CLOUD_USERNAME ).

11.5. 클러스터링

11.5.1. Cryostat 검색 메커니즘 구성

OpenShift에서 JBoss EAP 클러스터링을 활성화하려면 kubernetes.KUBE_PING 또는 dns.DNS_PING 검색 메커니즘을 사용하도록 JBoss EAP 구성에서 Cryostat 프로토콜 스택을 구성합니다.

사용자 지정 standalone.xml 구성 파일을 사용할 수 있지만 환경 변수를 사용하여 이미지 빌드에서 Cryostat를 구성하는 것이 좋습니다.

아래 명령은 환경 변수를 사용하여 OpenShift 이미지용 JBoss EAP에 대한 검색 메커니즘을 구성합니다.

중요

Helm 차트를 사용하여 OpenShift 이미지용 JBoss EAP 상단에 애플리케이션을 배포하는 경우 기본 검색 메커니즘은 dns.DNS_PING 입니다.

dns.DNS_PINGkubernetes.KUBE_PING 검색 메커니즘은 서로 호환되지 않습니다. 검색을 위해 dns.DNS_PING 메커니즘을 사용하고 kubernetes.KUBE_PING 메커니즘을 사용하여 두 개의 독립적인 하위 클러스터에서 슈퍼클러스터를 구성할 수 없습니다. 마찬가지로 롤링 업그레이드를 수행할 때 소스 및 대상 클러스터 둘 다 검색 메커니즘이 동일해야 합니다.

11.5.1.1. KUBE_PING 구성

KUBE_PING Cryostat 검색 메커니즘을 사용하려면 다음을 수행합니다.

  1. KUBE_PING 을 검색 메커니즘으로 사용하도록 Cryostat 프로토콜 스택을 구성해야 합니다.

    JGROUPS_PING_PROTOCOL 환경 변수를 kubernetes.KUBE_PING 으로 설정하여 이 작업을 수행할 수 있습니다.

    JGROUPS_PING_PROTOCOL=kubernetes.KUBE_PING
  2. KUBERNETES_NAMESPACE 환경 변수를 OpenShift 프로젝트 이름으로 설정해야 합니다. 예를 들면 다음과 같습니다.

    KUBERNETES_NAMESPACE=PROJECT_NAME
  3. KUBERNETES_LABELS 환경 변수를 설정해야 합니다. 이는 서비스 수준에서 설정된 라벨 과 일치해야 합니다. 설정되지 않으면 애플리케이션 외부의 Pod(네임스페이스에 있음)가 참여하려고 합니다. 예를 들면 다음과 같습니다.

    KUBERNETES_LABELS=application=APP_NAME
  4. Kubernetes의 REST API에 액세스할 수 있도록 pod가 실행 중인 서비스 계정에 권한을 부여해야 합니다. 이 작업은 OpenShift CLI를 사용하여 수행됩니다. 다음 예제에서는 현재 프로젝트 네임스페이스의 default 서비스 계정을 사용합니다.

    oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)

    프로젝트 네임스페이스 에서 Cryostat-service-account 사용:

    oc policy add-role-to-user view system:serviceaccount:$(oc project -q):eap-service-account -n $(oc project -q)
    참고

    서비스 계정에 정책을 추가하는 방법에 대한 자세한 내용은 OpenShift에서 애플리케이션 배포를 참조하십시오.

11.5.1.2. DNS_PING 구성

DNS_PING Cryostat 검색 메커니즘을 사용하려면 다음을 수행합니다.

  1. DNS_PING 을 검색 메커니즘으로 사용하도록 Cryostat 프로토콜 스택을 구성해야 합니다.

    JGROUPS_PING_PROTOCOL 환경 변수를 dns.DNS_PING:로 설정하여 이 작업을 수행할 수 있습니다.

    JGROUPS_PING_PROTOCOL=dns.DNS_PING
  2. OPENSHIFT_DNS_PING_SERVICE_NAME 환경 변수는 클러스터의 ping 서비스 이름으로 설정해야 합니다.

    OPENSHIFT_DNS_PING_SERVICE_NAME=PING_SERVICE_NAME
  3. OPENSHIFT_DNS_PING_SERVICE_PORT 환경 변수는 ping 서비스가 노출되는 포트 번호로 설정해야 합니다. DNS_PING 프로토콜은 SRV 레코드에서 포트를 식별하려고 합니다. 그렇지 않으면 기본값은 8888 입니다.

    OPENSHIFT_DNS_PING_SERVICE_PORT=PING_PORT
  4. ping 포트를 노출하는 ping 서비스를 정의해야 합니다. 이 서비스는 헤드리스(ClusterIP=None)여야 하며 다음이 있어야 합니다.

    1. 포트의 이름은 이어야 합니다.
    2. 서비스에 service.alpha.kubernetes.io/tolerate-unready-endpointspublishNotReadyAddresses 속성을 true 로 설정해야 합니다.

      참고
      • service.alpha.kubernetes.io/tolerate-unready-endpointspublishNotReadyAddresses 속성을 모두 사용하여 ping 서비스가 이전 OpenShift 릴리스와 최신 OpenShift 릴리스에서 작동하도록 합니다.
      • 이러한 주석을 생략하면 각 노드가 시작 중에 자체 "1 클러스터"를 형성합니다. 그런 다음 다른 노드가 시작된 후 다른 노드가 감지되지 않으므로 각 노드는 시작 후 클러스터를 다른 노드의 클러스터에 병합합니다.
      kind: Service
      apiVersion: v1
      spec:
          publishNotReadyAddresses: true
          clusterIP: None
          ports:
          - name: ping
            port: 8888
          selector:
              deploymentConfig: eap-app
      metadata:
          name: eap-app-ping
          annotations:
              service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
              description: "The JGroups ping port for clustering."
참고

DNS_PING 은 서비스 계정을 수정할 필요가 없으며 기본 권한을 사용하여 작동합니다.

11.5.2. 클러스터 트래픽을 암호화하도록 Cryostat 구성

OpenShift에서 JBoss EAP에 대한 클러스터 트래픽을 암호화하려면 SYM_ENCRYPT 또는 ASYM_ENCRYPT 프로토콜을 사용하도록 JBoss EAP 구성에서 Cryostat 프로토콜 스택을 구성해야 합니다.

사용자 지정 standalone.xml 구성 파일을 사용할 수 있지만 환경 변수를 사용하여 이미지 빌드에서 Cryostat를 구성하는 것이 좋습니다.

아래 명령은 환경 변수를 사용하여 OpenShift 이미지의 JBoss EAP의 클러스터 트래픽 암호화 프로토콜을 구성합니다.

중요

SYM_ENCRYPTASYM_ENCRYPT 프로토콜은 서로 호환되지 않습니다. 클러스터 트래픽 암호화를 위해 SYM_ENCRYPT 프로토콜을 사용하고 다른 하나는 A SYM_ENCRYPT 프로토콜을 사용하여 두 개의 독립적인 하위 클러스터로 구성할 수 없습니다. 마찬가지로 롤링 업그레이드를 수행할 때 소스 및 대상 클러스터 모두에서 프로토콜을 동일해야 합니다.

11.5.2.1. SYM_ENCRYPT 구성

SYM_ENCRYPT 프로토콜을 사용하여 Cryostat 클러스터 트래픽을 암호화하려면 다음을 수행합니다.

  1. SYM_ENCRYPT 를 암호화 프로토콜로 사용하도록 Cryostat 프로토콜 스택을 구성해야 합니다.

    JGROUPS_ENCRYPT_PROTOCOL 환경 변수를 SYM_ENCRYPT 로 설정하여 이 작업을 수행할 수 있습니다.

    JGROUPS_ENCRYPT_PROTOCOL=SYM_ENCRYPT
  2. JGROUPS_ENCRYPT_KEYSTORE_DIR 환경 변수는 키 저장소를 포함하는 시크릿이 마운트된 디렉터리 경로로 설정해야 합니다. 예를 들면 다음과 같습니다.

    JGROUPS_ENCRYPT_KEYSTORE_DIR=/etc/jgroups-encrypt-secret-volume
  3. JGROUPS_ENCRYPT_KEYSTORE 환경 변수는 지정된 시크릿 내에서 키 저장소 파일의 이름으로 설정해야 합니다. 설정되지 않은 경우 클러스터 통신이 암호화되지 않고 경고가 표시됩니다. 예를 들면 다음과 같습니다.

    JGROUPS_ENCRYPT_KEYSTORE=jgroups.jceks
  4. JGROUPS_ENCRYPT_NAME 환경 변수를 서버 인증서와 연결된 이름으로 설정해야 합니다. 설정되지 않은 경우 클러스터 통신이 암호화되지 않고 경고가 표시됩니다. 예를 들면 다음과 같습니다.

    JGROUPS_ENCRYPT_NAME=jgroups
  5. JGROUPS_ENCRYPT_PASSWORD 환경 변수는 키 저장소 및 인증서에 액세스하는 데 사용되는 암호로 설정해야 합니다. 설정되지 않은 경우 클러스터 통신이 암호화되지 않고 경고가 표시됩니다. 예를 들면 다음과 같습니다.

    JGROUPS_ENCRYPT_PASSWORD=mypassword

11.5.2.2. ASYM_ENCRYPT 구성

참고

JBoss EAP 8.0에는 새로운 버전의 ASYM_ENCRYPT 프로토콜이 포함되어 있습니다. 이전 버전의 프로토콜은 더 이상 사용되지 않습니다. JGROUPS_CLUSTER_PASSWORD 환경 변수를 지정하면 더 이상 사용되지 않는 프로토콜 버전이 사용되며 Pod 로그에 경고가 표시됩니다.

ASYM_ENCRYPT 프로토콜을 사용하여 Cryostat 클러스터 트래픽을 암호화하려면 ASYM_ENCRYPT 를 암호화 프로토콜로 지정하고 elytron 하위 시스템에 구성된 키 저장소를 사용하도록 구성합니다.

-e JGROUPS_ENCRYPT_PROTOCOL="ASYM_ENCRYPT" \
-e JGROUPS_ENCRYPT_NAME="encrypt_name" \
-e JGROUPS_ENCRYPT_PASSWORD="encrypt_password" \
-e JGROUPS_ENCRYPT_KEYSTORE="encrypt_keystore" \
-e JGROUPS_CLUSTER_PASSWORD="cluster_password"

11.5.3. Pod 스케일링 고려 사항

Cryostat의 검색 메커니즘을 기반으로 시작 노드는 기존 클러스터 코디네이터 노드를 검색합니다. 코디네이터 노드가 지정된 시간 내에 없으면 시작 노드는 해당 노드가 첫 번째 멤버라고 가정하고 코디네이터 상태를 차지합니다.

여러 노드가 동시에 시작되면 여러 파티션이 있는 분할 클러스터를 생성하는 첫 번째 멤버가 있다고 가정합니다. 예를 들어 DeploymentConfig API를 사용하여 0에서 2개의 Pod로 확장하면 분할 클러스터가 생성될 수 있습니다. 이 상황을 방지하려면 첫 번째 Pod를 시작한 다음 필요한 Pod 수로 확장해야합니다.

참고

기본적으로 JBoss EAP Operator는 Pod 생성을 순서대로 시작하는 StatefulSet API(즉, 하나씩)를 사용하므로 분할 클러스터를 생성하지 못합니다.

11.6. 기본 상태 점검

OpenShift 이미지용 JBoss EAP는 기본적으로 OpenShift에 포함된 실시간 및 준비 상태 프로브를 구현합니다. 자세한 내용은 OpenShift Container Platform 개발자 가이드의 활성 상태 프로브 및 준비 상태 프로브를 참조하십시오.

다음 표는 이러한 상태 점검을 전달하는 데 필요한 값을 보여줍니다. 상태가 아래 값과 다른 경우 검사에 실패하고 이미지의 재시작 정책에 따라 이미지가 다시 시작됩니다.

표 11.4. 활성 및 준비 상태 점검

수행됨 테스트활성준비

서버 상태

모든 상태

실행 중

부팅 오류

없음

없음

배포 상태 [a]

N/A 또는 실패 항목 없음

N/A 또는 실패 항목 없음

기본 상태 점검

UP

UP

[a] N/A는 배포가 없는 경우에만 유효한 상태입니다.

11.7. 메시징

11.7.1. 외부 Red Hat AMQ 브로커 구성

외부 Red Hat AMQ 브로커에 연결하기 위해 환경 변수를 사용하여 OpenShift 이미지의 JBoss EAP를 구성할 수 있습니다.

11.8. 보안 도메인

새 보안 도메인을 구성하려면 사용자가 CloudEvent DOMAIN_NAME 환경 변수를 정의해야 합니다.

그러면 환경 변수 뒤에 이름이 지정된 보안 도메인이 생성됩니다. 사용자는 다음 환경 변수를 정의하여 도메인을 사용자 지정할 수도 있습니다.

표 11.5. 보안 도메인

변수 이름설명

SECDOMAIN_NAME

추가 보안 도메인을 정의합니다.

예제 값: myDomain

SECDOMAIN_PASSWORD_STACKING

정의된 경우 password-stacking 모듈 옵션이 활성화되고 useFirstPass 로 설정됩니다.

예제 value: true

SECDOMAIN_LOGIN_MODULE

사용할 로그인 모듈입니다.

기본값은 UsersRoles

SECDOMAIN_USERS_PROPERTIES

사용자 정의가 포함된 속성 파일의 이름입니다.

기본값은 users.properties

SECDOMAIN_ROLES_PROPERTIES

역할 정의가 포함된 속성 파일의 이름입니다.

기본값은 roles.properties

11.9. HTTPS 환경 변수

변수 이름설명

HTTPS_NAME

HTTPS_PASSWORDHTTPS_KEYSTORE 와 함께 정의된 경우 HTTPS를 활성화하고 SSL 이름을 설정합니다.

keytool -genkey 명령으로 생성한 경우 키 저장소의 별칭 이름으로 지정된 값이어야 합니다.

예제 값: example.com

HTTPS_PASSWORD

HTTPS_NAMEHTTPS_KEYSTORE 와 함께 정의된 경우 HTTPS를 활성화하고 SSL 키 암호를 설정합니다.

예제 값: passw0rd

HTTPS_KEYSTORE

HTTPS_PASSWORDHTTPS_NAME 과 함께 정의된 경우 HTTPS를 활성화하고 SSL 인증서 키 파일을 EAP_HOME/standalone/configuration아래의 상대 경로로 설정합니다.

값 예: ssl.key

11.10. 관리 환경 변수

표 11.6. 관리 환경 변수

변수 이름설명

ADMIN_USERNAME

이 및 ADMIN_PASSWORD 둘 다 정의된 경우 JBoss EAP 관리 사용자 이름에 사용됩니다.

예제 값: Cryo statadmin

ADMIN_PASSWORD

지정된 ADMIN_USERNAME 의 암호입니다.

예제 값: passw0rd

11.11. S2I

이미지에는 S2I 스크립트와 Maven이 포함됩니다. Maven은 현재 OpenShift의 JBoss EAP 기반 컨테이너(또는 관련/하위 이미지)에 배포되어야 하는 애플리케이션의 빌드 도구로만 지원됩니다.

현재 WAR 배포만 지원됩니다.

11.11.1. 사용자 정의 설정

이미지에 대한 사용자 지정 구성 파일을 추가할 수 있습니다. configuration/ 디렉토리에 배치된 모든 파일이 EAP_HOME/standalone/configuration/ 에 복사됩니다. 예를 들어 이미지에 사용되는 기본 구성을 재정의하려면 사용자 지정 standalone.xmlconfiguration/ 디렉터리에 추가하기만 하면 됩니다. 이러한 배포 예제는 예제를 참조하십시오.

11.11.1.1. 사용자 정의 모듈

사용자 지정 모듈을 추가할 수 있습니다. modules/ 디렉터리의 모든 파일이 EAP_HOME/modules/ 에 복사됩니다. 이러한 배포 예제는 예제를 참조하십시오.

11.11.2. 배포 Artifacts

기본적으로 소스 대상 디렉터리의 아티팩트가 배포됩니다. 다른 디렉터리에서 배포하려면 BuildConfig 정의에 ARTIFACT_DIR 환경 변수를 설정합니다. ARTIFACT_DIR 은 쉼표로 구분된 목록입니다. 예: ARTIFACT_DIR=app1/target,app2/target,app3/target

11.11.3. 아티팩트 저장소 미러

Maven의 리포지토리에는 다양한 유형의 빌드 아티팩트 및 종속성(예: 모든 프로젝트 JAR, 라이브러리 JAR, 플러그인 또는 기타 프로젝트별 아티팩트)이 있습니다. S2I 빌드를 수행하는 동안 아티팩트를 다운로드할 위치도 지정합니다. 중앙 리포지토리를 사용하는 것 외에도 조직에서 로컬 사용자 정의 미러 저장소를 배포하는 것이 일반적인 방법입니다.

미러를 사용하면 다음과 같은 이점이 있습니다.

  • 동기화된 미러의 가용성은 지리적으로 더 빠르고 빠릅니다.
  • 리포지토리 콘텐츠를 보다 효과적으로 제어할 수 있는 기능.
  • 공용 서버 및 리포지토리에 의존할 필요 없이 다양한 팀(개발자, CI)에서 아티팩트를 공유할 수 있습니다.
  • 빌드 시간이 개선되었습니다.

종종 저장소 관리자는 미러에 대한 로컬 캐시 역할을 할 수 있습니다. 리포지토리 관리자가 이미 배포되어 https://10.0.0.1:8443/repository/internal/ 에서 외부에서 연결할 수 있다고 가정하면 S2I 빌드는 다음과 같이 애플리케이션의 빌드 구성에 MAVEN_MIRROR_URL 환경 변수를 제공하여 이 관리자를 사용할 수 있습니다.

  1. MAVEN_MIRROR_URL 변수를 적용할 빌드 구성의 이름을 식별합니다.

    oc get bc -o name
    buildconfig/eap
  2. MAVEN_MIRROR_URL 환경 변수를 사용하여 build 구성을 업데이트합니다.

    oc env bc/eap MAVEN_MIRROR_URL="https://10.0.0.1:8443/repository/internal/"
    buildconfig "eap" updated
  3. 설정을 확인합니다.

    oc env bc/eap --list
    # buildconfigs eap
    MAVEN_MIRROR_URL=https://10.0.0.1:8443/repository/internal/
  4. 애플리케이션의 새 빌드를 예약합니다.
참고

애플리케이션 빌드 중에 Maven 종속성은 기본 공용 리포지토리가 아니라 리포지토리 관리자에서 가져옵니다. 또한 빌드가 완료되면 빌드 중에 검색 및 사용된 모든 종속 항목으로 미러가 채워집니다.

11.11.3.1. 보안 아티팩트 저장소 미러 URL

Maven 리포지토리를 통해 "man-in-the-middle" 공격을 방지하려면 JBoss EAP에서 아티팩트 리포지토리 미러 URL에 대한 보안 URL을 사용해야 합니다.

URL은 보안 http("https") 및 보안 포트를 지정해야 합니다.

기본적으로 비보안 URL을 지정하면 오류가 반환됩니다. -Dinsecure.repositories=WARN 속성을 사용하여 이 동작을 재정의할 수 있습니다.

11.11.4. 스크립트

run
이 스크립트는 standalone.xml 구성으로 JBoss EAP를 구성하고 시작하는 openshift-launch.sh 스크립트를 사용합니다.
assemble
이 스크립트는 Maven을 사용하여 소스를 빌드하고 패키지(WAR)를 생성한 다음 EAP_HOME/standalone/deployments 디렉터리로 이동합니다.

11.11.5. 사용자 지정 스크립트

JBoss EAP가 시작되기 전에 포드를 시작할 때 실행할 사용자 지정 스크립트를 추가할 수 있습니다.

CLI 스크립트를 포함하여 Pod를 시작할 때 실행할 유효한 스크립트를 추가할 수 있습니다.

이미지에서 JBoss EAP를 시작할 때 스크립트를 포함하여 두 가지 옵션을 사용할 수 있습니다.

  • postconfigure.sh로 실행할 configmap을 마운트합니다.
  • nominated 설치 디렉터리에 install.sh 스크립트를 추가합니다.

11.11.5.1. 사용자 정의 스크립트를 실행하기 위한 configmap 마운트

런타임 시 사용자 지정 스크립트를 기존 이미지(즉, 이미 빌드된 이미지)에 마운트하려는 경우 configmap을 마운트합니다.

configmap을 마운트하려면 다음을 수행합니다.

  1. postconfigure.sh에 포함할 콘텐츠로 configmap을 생성합니다.

    예를 들어 프로젝트 루트 디렉터리에 확장 이라는 디렉터리를 생성하여 postconfigure.shextensions.cli 스크립트를 포함하고 다음 명령을 실행합니다.

    $ oc create configmap jboss-cli --from-file=postconfigure.sh=extensions/postconfigure.sh --from-file=extensions.cli=extensions/extensions.cli
  2. 배포 컨트롤러(dc)를 통해 configmap을 Pod에 마운트합니다.

    $ oc set volume dc/eap-app --add --name=jboss-cli -m /opt/server/extensions -t configmap --configmap-name=jboss-cli --default-mode='0755' --overwrite

postconfigure.sh

#!/usr/bin/env bash
set -x
echo "Executing postconfigure.sh"
$JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/extensions.cli

extensions.cli의 예

embed-server --std-out=echo  --server-config=standalone.xml
:whoami
quit

11.11.5.2. install.sh를 사용하여 사용자 지정 스크립트 실행

빌드 시 스크립트를 이미지의 일부로 포함하려면 install.sh를 사용합니다.

install.sh를 사용하여 사용자 정의 스크립트를 실행하려면 다음을 수행합니다.

  1. s2i 빌드 중에 사용할 프로젝트의 git 리포지토리에서 .s2i 라는 디렉터리를 생성합니다.
  2. s2i 디렉터리 내에서 다음 콘텐츠를 사용하여 environment라는 파일을 추가합니다.

    $ cat .s2i/environment
    CUSTOM_INSTALL_DIRECTORIES=extensions
  3. extensions 이라는 디렉터리를 만듭니다.
  4. extensions 디렉토리에서 다음과 유사한 콘텐츠를 사용하여 postconfigure.sh 파일을 만듭니다(사용자 환경에 적합한 코드로 자리 표시자 코드를 교체).

    $ cat extensions/postconfigure.sh
    #!/usr/bin/env bash
    echo "Executing patch.cli"
    $JBOSS_HOME/bin/jboss-cli.sh --file=$JBOSS_HOME/extensions/some-cli-example.cli
  5. extensions 디렉토리에서 다음과 유사한 내용으로 파일 install.sh를 만듭니다 ( 자리 표시자 코드를 환경에 적합한 코드로 교체).

    $ cat extensions/install.sh
    #!/usr/bin/env bash
    set -x
    echo "Running $PWD/install.sh"
    injected_dir=$1
    # copy any needed files into the target build.
    cp -rf ${injected_dir} $JBOSS_HOME/extensions

11.11.6. 환경 변수

환경 변수를 s2i build 명령에 제공하여 빌드 실행 방식에 영향을 미칠 수 있습니다. 제공할 수 있는 환경 변수는 다음과 같습니다.

표 11.7. s2i 환경 변수

변수 이름설명

ARTIFACT_DIR

이 디렉터리의 .war,.ear .jar 파일이 deployments/ 디렉터리에 복사됩니다.

예제 값: target

ENABLE_GENERATE_DEFAULT_DATASOURCE

선택 사항: 값이 true 인 경우 서버는 기본 데이터 소스를 사용하여 프로비저닝됩니다. 그렇지 않으면 기본 데이터 소스가 포함되지 않습니다.

GALLEON_PROVISION_LAYERS

선택 사항: 지정된 계층을 프로비저닝하도록 S2I 프로세스에 지시합니다. 값은 하나의 기본 계층과 임의의 수의 데코레이터 계층을 포함하여 프로비저닝할 쉼표로 구분된 계층 목록입니다.

예제 값: jaxrs

GALLEON_PROVISION_CHANNELS

이는 쉼표로 구분된 JBoss EAP 채널 매니페스트 목록입니다. JBoss EAP 채널 매니페스트는 groupid:artifactId:[version] 로 식별됩니다.

참고

버전은 선택 사항이므로 최신 채널 매니페스트가 검색됩니다. JBoss EAP 8.0의 경우 이 채널 org.jboss.eap.channels:eap-8.0 을 사용합니다.

GALLEON_PROVISION_FEATURE_PACKS

환경 변수를 빌드하여 S2I 이미지의 사용자 지정 Galleon 기능 팩을 지정합니다. 예: org.jboss.eap:wildfly-ee-galleon-pack:[version],org.jboss.eap.cloud:eap-cloud-galleon-pack:[version].

참고

GALLEON_PROVISION_CHANNELS=org.jboss.eap.channels:eap-8.0 을 설정하면 기능 팩 버전이 필요하지 않습니다.

HTTP_PROXY_HOST

Maven을 사용할 HTTP 프록시의 호스트 이름 또는 IP 주소입니다.

예제 값: 192.168.1.1

HTTP_PROXY_PORT

Maven에서 사용할 HTTP 프록시의 TCP 포트입니다.

값 예: 8080

HTTP_PROXY_USERNAME

HTTP_PROXY_PASSWORD 와 함께 제공된 경우 HTTP 프록시에 대한 인증 정보를 사용합니다.

예제 값: myusername

HTTP_PROXY_PASSWORD

HTTP_PROXY_USERNAME 과 함께 제공된 경우 HTTP 프록시에 대한 인증 정보를 사용합니다.

예제 값: mypassword

HTTP_PROXY_NONPROXYHOSTS

제공된 경우 구성된 HTTP 프록시는 이러한 호스트를 무시합니다.

예제 값: some.example.org|*.example.net

MAVEN_ARGS

빌드 중에 Maven에 제공된 인수를 재정의합니다.

예: -e -Popenshift -DskipTests -Dcom.redhat.xpaas.repo.redhatga 패키지

MAVEN_ARGS_APPEND

빌드 중에 Maven에 제공된 사용자 인수를 추가합니다.

예제 값: -Dfoo=bar

MAVEN_MIRROR_URL

구성할 Maven 미러/repository 관리자의 URL입니다.

예제 값: https://10.0.0.1:8443/repository/internal/

지정된 URL은 안전해야 합니다. 자세한 내용은 Secure artifact repository 미러 URL을 참조하십시오.

MAVEN_CLEAR_REPO

선택적으로 빌드 후 로컬 Maven 리포지토리를 지웁니다.

이미지에 있는 서버가 로컬 캐시에 강하게 연결된 경우 캐시가 삭제되지 않고 경고가 출력됩니다.

예제 value: true

APP_DATADIR

정의된 경우 데이터 파일이 복사되는 소스의 디렉터리입니다.

예제 값: mydata

DATA_DIR

$APP_DATADIR 의 데이터가 복사되는 이미지의 디렉터리입니다.

예시 값: EAP_HOME/data

11.12. 지원되지 않는 트랜잭션 복구 시나리오

  • OpenShift에서는 JTS 트랜잭션이 지원되지 않습니다.
  • OpenShift에서 XTS 트랜잭션은 지원되지 않습니다.
  • 일부 타사에서 트랜잭션 완료 및 충돌 복구 흐름에 사용하는 XATerminator 인터페이스는 OpenShift에서 지원되지 않습니다.
  • JBoss Remoting 을 통해 배포되지 않는 트랜잭션은 지원되지 않습니다.
참고

JBoss Remoting 을 통해 전파되는 트랜잭션은 EAP Operator를 사용하여 지원됩니다.

11.13. 포함된 JBoss 모듈

아래 표에는 OpenShift용 JBoss EAP에 JBoss 모듈이 포함되어 있습니다.

표 11.8. 포함된 JBoss 모듈

JBoss 모듈

org.jboss.as.clustering.common

org.jboss.as.clustering.jgroups

org.jboss.as.ee

org.jgroups

org.openshift.ping

net.oauth.core

11.14. EAP Operator: API 정보

EAP Operator는 다음 API를 도입합니다.

11.14.1. WildFlyServer

WildFlyServer 는 사용자 지정 JBoss EAP 리소스를 정의합니다.

표 11.9. WildFlyServer

필드설명스키마필수 항목

메타데이터

표준 오브젝트의 메타데이터

ObjectMeta v1 meta

false

spec

JBoss EAP 배포의 원하는 동작에 대한 사양 입니다.

WildFlyServerSpec

true

status

최근 관찰된 JBoss EAP 배포 상태. 읽기 전용입니다.

WildFlyServerStatus

false

11.14.2. WildFlyServerList

WildFlyServerList 는 JBoss EAP 배포 목록을 정의합니다.

표 11.10. 표

필드설명스키마필수 항목

메타데이터

표준 목록의 메타데이터

metav1.ListMeta

false

items

WildFlyServer목록

WildFlyServer

true

11.14.3. WildFlyServerSpec

WildFlyServerSpec 은 JBoss EAP 리소스의 원하는 동작 사양입니다.

/opt/jboss/wildfly/standalone/data에서 스토리지에 지정된 볼륨을 마운트하는 Pod 사양과 함께 StatefulSet 을 사용합니다.

표 11.11. WildFlyServerSpec

필드설명스키마필수 항목

applicationImage

배포할 애플리케이션 이미지의 이름

string

false

replicas

애플리케이션에 필요한 복제본 수

int32]

true

standaloneConfigMap

ConfigMap 에서 독립 실행형 구성을 읽는 방법을 지정하는 사양입니다.

StandaloneConfigMapSpec

false

resources

Stateful Set의 요청 또는 제한을 지정하는 resources 사양입니다. 생략하면 네임스페이스 기본값이 사용됩니다.

resources

false

SecurityContext

Stateful Set에서 생성한 Pod 컨테이너에 대한 권한 및 액세스 제어 설정을 정의하는 security Context 사양입니다. 생략하면 기본 권한이 사용됩니다. 자세한 내용은 securityContext를 참조하십시오.

*corev1.SecurityContext

false

스토리지

스토리지 사용 방법을 지정하는 스토리지 사양입니다. 생략하면 EmptyDir 이 사용됩니다( pod 재시작 시 데이터를 유지하지 않음)

StorageSpec

false

serviceAccountName

JBoss EAP Pod를 실행하는 데 사용할 ServiceAccount의 이름

string

false

envFrom

configMap 또는 secret의 컨테이너에 있는 환경 변수 목록

corev1.EnvFromSource

false

env

컨테이너에 존재하는 환경 변수 목록

corev1.EnvVar

false

secrets

컨테이너에 볼륨으로 마운트할 시크릿 이름 목록입니다. 각 보안은 /etc/secrets/<secret name>에 읽기 전용 볼륨으로 마운트됩니다.

string

false

configMaps

컨테이너에 볼륨으로 마운트할 ConfigMap 이름 목록입니다. 각 ConfigMap/etc/configmaps/<config map name>에 읽기 전용 볼륨으로 마운트됩니다.

string

false

disableHTTPRoute

애플리케이션 서비스의 HTTP 포트에 대한 경로 생성 비활성화(삭제된 경우 false)

boolean

false

sessionAffinity

동일한 클라이언트 IP의 연결이 매번 동일한 JBoss EAP 인스턴스/Pod에 전달되는 경우(삭제된 경우 false)

boolean

false

11.14.4. Resources

리소스는 WildflyServer 리소스에 대해 구성된 리소스를 정의합니다. Resources 필드가 정의되지 않았거나 Request 또는 Limits 가 비어 있으면 이 리소스는 StatefulSet 에서 제거됩니다. 이 리소스에 대한 설명은 표준 컨테이너 리소스 이며 corev1.ResourceRequirements의 스키마를 사용합니다.

11.14.5. StorageSpec

StorageSpecWildFlyServer 리소스에 대해 구성된 스토리지를 정의합니다. EmptyDirvolumeClaimTemplate 이 정의되지 않은 경우 기본 EmptyDir 이 사용됩니다.

EAP Operator는 JBoss EAP에서 자체 데이터를 유지하기 위해 사용하는 standalone/data 디렉터리 전용 볼륨을 마운트하기 위해 이 StorageSpec 의 정보를 사용하여 StatefulSet 을 구성합니다. 예를 들어 트랜잭션 로그입니다. EmptyDir 을 사용하는 경우 데이터를 Pod를 다시 시작해도 데이터가 유지되지 않습니다. JBoss EAP에 배포된 애플리케이션이 트랜잭션을 사용하는 경우 Pod를 다시 시작할 때 동일한 영구 볼륨을 재사용할 수 있도록 volumeClaimTemplate 을 지정합니다.

표 11.12. 표

필드설명스키마필수 항목

emptyDir

EmptyDirVolumeSource 를 JBoss EAP StatefulSet에서 사용합니다.

corev1.EmptyDirVolumeSource

false

volumeClaimTemplate

JBoss EAP 독립 실행형 데이터 디렉터리를 저장하기 위한 리소스 요구 사항을 구성하는 PersistentVolumeClaim 사양입니다. 템플릿의 이름은 WildFlyServer 이름에서 파생됩니다. 해당 볼륨은 ReadWriteOnce 액세스 모드로 마운트됩니다.

corev1.PersistentVolumeClaim

false

11.14.6. StandaloneConfigMapSpec

StandaloneConfigMapSpecConfigMap 에서 JBoss EAP 독립 실행형 구성을 읽을 수 있는 방법을 정의합니다. 생략하면 JBoss EAP는 이미지의 standalone.xml 구성을 사용합니다.

표 11.13. StandaloneConfigMapSpec

필드설명스키마필수 항목

name

독립 실행형 구성 XML 파일이 포함된 ConfigMap 의 이름입니다.

string

true

key

값이 독립 실행형 구성 XML 파일인 ConfigMap 의 키입니다. 생략하면 spec에서 standalone.xml 키를 찾습니다.

string

false

11.14.7. WildFlyServerStatus

WildFlyServerStatus 는 JBoss EAP 배포의 가장 최근 관찰된 상태입니다. 읽기 전용입니다.

표 11.14. WildFlyServerStatus

필드설명스키마필수 항목

replicas

애플리케이션의 실제 복제본 수

int32

true

선택기

HorizontalPodAutoscaler에서 사용하는 Pod 선택기

string

true

호스트

애플리케이션 HTTP 서비스로 라우팅하는 호스트

string

true

pods

Pod 상태

PodStatus

true

scalingdownPods

축소 프로세스 축소 중인 Pod 수

int32

true

11.14.8. PodStatus

PodStatus 는 JBoss EAP 애플리케이션을 실행하는 Pod의 가장 최근 관찰된 상태입니다.

표 11.15. PodStatus

필드설명스키마필수 항목

name

Pod 이름

string

true

podIP

Pod에 할당된 IP 주소

string

true

상태

축소 프로세스의 Pod 상태. 상태는 기본적으로 ACTIVE이며, 이는 요청을 제공하는 것을 의미합니다.

string

false





2024-02-08에 최종 업데이트된 문서

법적 공지

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.