OpenShift에 AMQ Broker 배포


Red Hat AMQ Broker 7.12

AMQ Broker 7.12와 함께 사용하는 경우

초록

OpenShift Container Platform에 AMQ Broker를 설치하고 배포하는 방법을 알아봅니다.

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

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

1장. OpenShift Container Platform의 AMQ Broker 소개

Red Hat AMQ Broker 7.12는 OCP(OpenShift Container Platform) 4.13, 4.14, 4.15, 4.16 및 4.17에서 사용할 수 있는 컨테이너화된 이미지로 사용할 수 있습니다.

AMQ Broker는 Apache ActiveMQ Artemis를 기반으로 합니다. JMS와 호환되는 메시지 브로커를 제공합니다. 초기 브로커 Pod를 설정한 후 OpenShift Container Platform 기능을 사용하여 중복을 빠르게 배포할 수 있습니다.

1.1. 버전 호환성 및 지원

OpenShift Container Platform 이미지 버전 호환성에 대한 자세한 내용은 다음을 참조하십시오.

참고

OpenShift Container Platform에 AMQ Broker의 모든 배포는 이제 RHEL 8 기반 이미지를 사용합니다.

1.2. 지원되지 않는 기능

  • 외부 클라이언트는 AMQ Broker에서 제공하는 토폴로지 정보를 사용할 수 없습니다.

    AMQ Core Protocol JMS Client 또는 AMQ JMS Client가 OpenShift Container Platform 클러스터의 브로커에 연결하는 경우 브로커는 현재 브로커에 대한 연결이 끊어진 경우 클라이언트의 장애 조치 목록 역할을 하는 클러스터의 다른 브로커 각각에 대한 IP 주소 및 포트 정보를 클라이언트에 보낼 수 있습니다.

    각 브로커에 제공된 IP 주소는 OpenShift Container Platform 클러스터 외부에 있는 클라이언트에서 액세스할 수 없는 내부 IP 주소입니다. 외부 클라이언트가 내부 IP 주소를 사용하여 브로커에 연결하지 못하도록 하려면 클라이언트가 처음에 브로커에 연결하도록 사용하는 URI에서 다음 구성을 설정합니다.

    클라이언트설정

    AMQ Core Protocol JMS Client

    useTopologyForLoadBalancing=false

    AMQ JMS Client

    failover.amqpOpenServerListAction=IGNORE

1.3. 문서 규칙

이 문서에서는 sudo 명령, 파일 경로 및 교체 가능한 값에 대해 다음 규칙을 사용합니다.

sudo 명령

이 문서에서 sudo 는 root 권한이 필요한 모든 명령에 사용됩니다. sudo 를 사용할 때는 변경 사항이 전체 시스템에 영향을 미칠 수 있으므로 주의해야 합니다. sudo 사용에 대한 자세한 내용은 sudo 액세스 관리를 참조하십시오.

이 문서에서 파일 경로 사용 정보

이 문서에서 모든 파일 경로는 Linux, UNIX 및 유사한 운영 체제(예: /home/...)에 유효합니다. Microsoft Windows를 사용하는 경우 동등한 Microsoft Windows 경로(예: C:\Users\...)를 사용해야 합니다.

대체 가능한 값

이 문서에서는 사용자 환경과 관련된 값으로 교체해야 하는 교체 가능한 값을 사용하는 경우가 있습니다. 대체 가능한 값은 소문자로 묶고(< >)로 묶고 italics 및 monospace 글꼴 사용하여 스타일을 지정할 수 있습니다. 여러 단어가 밑줄(_)으로 구분됩니다.

예를 들어 다음 명령에서 < project_name> 을 고유한 프로젝트 이름으로 바꿉니다.

$ oc new-project <project_name>

2장. OpenShift Container Platform에 AMQ Broker 배포 계획

이 섹션에서는 Operator 기반 배포를 계획하는 방법을 설명합니다.

Operator 는 OpenShift 애플리케이션을 패키지, 배포 및 관리할 수 있는 프로그램입니다. Operator는 종종 일반 또는 복잡한 작업을 자동화합니다. 일반적으로 Operator는 다음을 제공합니다.

  • 일관되고 반복 가능한 설치
  • 시스템 구성 요소의 상태 점검
  • OTA(Over-the-air) 업데이트
  • 관리형 업그레이드

Operator를 사용하면 브로커 인스턴스가 실행되는 동안 변경할 수 있습니다. 이는 항상 배포를 구성하는 데 사용한 사용자 정의 리소스(CR) 인스턴스의 변경을 수신 대기하기 때문입니다. CR을 변경하면 Operator는 기존 브로커 배포로 변경 사항을 조정하고 변경 사항을 반영하도록 배포를 업데이트합니다. 또한 Operator는 메시징 데이터의 무결성을 보장하는 메시지 마이그레이션 기능을 제공합니다. 배포의 의도적인 스케일 다운으로 인해 클러스터형 배포의 브로커가 종료되면 이 기능은 동일한 브로커 클러스터에서 계속 실행 중인 브로커 Pod로 메시지를 마이그레이션합니다.

2.1. HA(고가용성) 개요

고가용성 이란 시스템의 일부가 실패하거나 종료될 때에도 작동할 수 있는 시스템을 나타냅니다. OpenShift Container Platform의 AMQ Broker의 경우 Pod가 실행 중인 노드, Pod가 실행 중이거나 클러스터가 실패하는 경우 메시징 데이터의 무결성 및 가용성을 보장합니다.

AMQ Broker는 OpenShift Container Platform에 제공된 HA 기능을 사용하여 Pod 및 노드 오류를 완화합니다.

  • AMQ Broker에서 영구 스토리지를 활성화하면 각 브로커 Pod는 영구 볼륨 클레임(PVC)을 사용하여 클레임한 PV(영구 볼륨)에 해당 데이터를 씁니다. Pod를 삭제한 후에도 PV를 사용할 수 있습니다. 브로커 포드가 실패하면 OpenShift에서 동일한 이름으로 Pod를 재시작하고 메시징 데이터가 포함된 기존 PV를 사용합니다.
  • 클러스터에서 여러 브로커 Pod를 실행하고 별도의 노드에 Pod를 배포하여 노드 장애에서 복구할 수 있습니다. 각 브로커 Pod는 메시지 데이터를 자체 PV에 씁니다. 그러면 해당 브로커 Pod가 다른 노드에서 재시작되는 경우 사용할 수 있습니다.

    Openshift 클러스터의 노드 장애로부터 복구하기 위한 평균 시간(MTTR)이 AMQ Broker의 서비스 가용성 요구 사항을 충족하지 않는 경우 더 빠른 복구를 제공하기 위해 리더 지원 배포를 생성할 수 있습니다. leader-follower 배포를 사용하여 클러스터 또는 광범위한 데이터 센터 중단으로부터 보호할 수도 있습니다. 자세한 내용은 4.23절. “고가용성을 위해 leader-follower 브로커 배포 구성”의 내용을 참조하십시오.

추가 리소스

영구 스토리지 사용 방법에 대한 자세한 내용은 2.9절. “Operator 배포 노트” 을 참조하십시오.

별도의 노드에 브로커 Pod를 배포하는 방법에 대한 자세한 내용은 4.17.2절. “허용 오차를 사용하여 Pod 배치 제어” 을 참조하십시오.

2.2. AMQ Broker Operator 사용자 정의 리소스 정의 개요

일반적으로 CRD(Custom Resource Definition)는 Operator와 함께 배포된 사용자 정의 OpenShift 오브젝트에 대해 수정할 수 있는 구성 항목의 스키마입니다. 해당 CR(사용자 정의 리소스) 인스턴스를 생성하면 CRD의 구성 항목에 대한 값을 지정할 수 있습니다. Operator 개발자인 경우 CRD를 통해 노출하는 항목이 기본적으로 배포된 오브젝트를 구성하고 사용하는 방법에 대한 API가 됩니다. CRD가 Kubernetes를 통해 자동으로 노출되므로 일반 HTTP curl 명령을 통해 CRD에 직접 액세스할 수 있습니다.

OperatorHub 그래픽 인터페이스를 통해 OpenShift CLI(명령줄 인터페이스) 또는 Operator Lifecycle Manager를 사용하여 AMQ Broker Operator를 설치할 수 있습니다. 두 경우 모두 AMQ Broker Operator에는 아래에 설명된 CRD가 포함되어 있습니다.

주요 브로커 CRD

브로커 배포를 생성하고 구성하기 위해 이 CRD를 기반으로 CR 인스턴스를 배포합니다.

Operator 설치 방법에 따라 이 CRD는 다음과 같습니다.

  • Operator 설치 아카이브의 crds 디렉터리에 있는 broker_activemqartis_crd 파일(OpenShift CLI 설치 방법)
  • OpenShift Container Platform 웹 콘솔의 사용자 정의 리소스 정의 섹션에 있는 ActiveMQArtemis CRD(OperatorHub 설치 방법)
Address CRD

이 CRD를 기반으로 CR 인스턴스를 배포하여 브로커 배포에 대한 주소 및 큐를 생성합니다.

Operator 설치 방법에 따라 이 CRD는 다음과 같습니다.

  • Operator 설치 아카이브의 crds 디렉토리에 있는 broker_activemqartemisaddress_crd 파일(OpenShift CLI 설치 방법)
  • OpenShift Container Platform 웹 콘솔의 사용자 정의 리소스 정의 섹션에 있는 ActiveMQArtemisAddresss CRD(OperatorHub 설치 방법)
참고

주소 CRD는 7.12에서 더 이상 사용되지 않습니다. addresss CRD를 기반으로 CR 인스턴스를 생성하는 대신 ActiveMQArtemis CR 인스턴스에서 brokerProperties 속성을 사용할 수 있습니다.

보안 CRD

이 CRD를 기반으로 CR 인스턴스를 배포하여 사용자를 생성하고 해당 사용자를 보안 컨텍스트와 연결합니다.

Operator 설치 방법에 따라 이 CRD는 다음과 같습니다.

  • Operator 설치 아카이브의 crds 디렉터리에 있는 broker_activemqartissecurity_crd 파일(OpenShift CLI 설치 방법)
  • OpenShift Container Platform 웹 콘솔의 사용자 정의 리소스 정의 섹션에 있는 ActiveMQArtemisSecurity CRD(OperatorHub 설치 방법).
참고

보안 CRD는 7.12에서 더 이상 사용되지 않습니다. 보안 CRD를 기반으로 CR 인스턴스를 생성하는 대신 ActiveMQArtemis CR 인스턴스에서 brokerProperties 속성을 사용할 수 있습니다.

scaleDown CRD

Operator 는 메시지 마이그레이션을 위해 스케일다운 컨트롤러를 인스턴스화할 때 이 CRD를 기반으로 CR 인스턴스를 자동으로 생성합니다.

Operator 설치 방법에 따라 이 CRD는 다음과 같습니다.

  • Operator 설치 아카이브의 crds 디렉터리에 있는 broker_activemqartemisscaledown_crd 파일(OpenShift CLI 설치 방법)
  • OpenShift Container Platform 웹 콘솔의 사용자 정의 리소스 정의 섹션에 있는 ActiveMQArtemisScaledown CRD(OperatorHub 설치 방법).
참고

스케일다운 CRD는 7.12에서 더 이상 사용되지 않으며 클러스터를 축소하는 데 필요하지 않습니다.

추가 리소스

2.3. AMQ Broker Operator 샘플 사용자 정의 리소스 개요

설치 중에 다운로드 및 추출하는 AMQ Broker Operator 아카이브에는 deploy/crs 디렉터리에 있는 샘플 CR(사용자 정의 리소스) 파일이 포함됩니다. 이러한 샘플 CR 파일을 사용하면 다음을 수행할 수 있습니다.

  • SSL 또는 클러스터링 없이 최소 브로커를 배포합니다.
  • 주소를 정의합니다.

다운로드 및 추출하는 브로커 Operator 아카이브에는 아래 나열된 대로 deploy/examples/addressdeploy/examples/artemis 디렉터리에 배포와 같은 CR도 포함되어 있습니다.

address_queue.yaml
다른 이름으로 주소 및 큐를 배포합니다. CR 배포 취소 시 큐를 삭제합니다.
address_topic.yaml
멀티 캐스트 라우팅 유형으로 주소를 배포합니다. CR 배포 취소 시 주소를 삭제합니다.
artemis_address_settings.yaml
특정 주소 설정으로 브로커를 배포합니다.
artemis_cluster_persistence.yaml
영구 스토리지를 사용하여 클러스터형 브로커를 배포합니다.
artemis_enable_metrics_plugin.yaml
Prometheus 지표 플러그인을 활성화하여 지표를 수집합니다.
artemis_resources.yaml
브로커의 CPU 및 메모리 리소스 제한을 설정합니다.
artemis_single.yaml
단일 브로커 배포.

2.4. CRD(사용자 정의 리소스 정의)에 노출되지 않은 항목 구성

ActiveMQArtemis 사용자 정의 리소스에서 brokerProperties 속성을 사용하여 브로커의 구성 설정을 구성할 수 있습니다. brokerProperties 를 사용하는 것은 다음과 같은 설정을 구성하려는 경우 특히 유용합니다.

  • ActiveMQArtemis CRD에 노출되지 않음
  • ActiveMQArtemisAddressActiveMQArtemisSecurity CRD에 노출됩니다.
참고

AMQ Broker 7.12부터 ActiveMQArtemisAddressActiveMQArtemisSecurity CRD가 더 이상 사용되지 않음

brokerProperties 속성 아래에 추가된 구성 설정은 시크릿에 저장됩니다. 이 시크릿은 브로커 Pod에 속성 파일로 마운트됩니다. 시작 시 속성 파일은 XML 구성을 적용한 후 내부 java 구성에 직접 적용됩니다.

다음 예제에서는 단일 속성이 구성 빈에 적용됩니다.
spec:
  ...
  brokerProperties:
  - globalMaxSize=500m
  ...

다음 예제에서는 다른 브로커와 메시지를 미러링하는 target 이라는 브로커 연결을 생성하기 위해 구성 빈의 중첩된 컬렉션에 여러 속성이 적용됩니다.

spec:
  ...
  brokerProperties
  - "AMQPConnections.target.uri=tcp://<hostname>:<port>"
  - "AMQPConnections.target.connectionElements.mirror.type=MIRROR"
  - "AMQPConnections.target.connectionElements.mirror.messageAcknowledgements=true"
  - "AMQPConnections.target.connectionElements.mirror.queueCreation=true"
  - "AMQPConnections.target.connectionElements.mirror.queueRemoval=true"
  ...
중요

brokerProperties 속성을 사용하면 OpenShift Container Platform에서 AMQ Broker에 대해 구성할 수 없는 많은 구성 항목에 액세스할 수 있습니다. 잘못 사용하면 일부 속성이 배포에 심각한 영향을 미칠 수 있습니다. 이 방법을 사용하여 브로커를 구성할 때는 항상 주의하십시오.

brokerProperties의 상태 보고

brokerProperties 속성에 구성된 항목의 상태는 ActiveMQArtemis CR의 BrokerPropertiesApplied 상태 섹션에 제공됩니다. 예를 들면 다음과 같습니다.

- lastTransitionTime: "2023-02-06T20:50:01Z"
  message: ""
  reason: Applied
  status: "True"
  type: BrokerPropertiesApplied

reason 필드에는 brokerProperties 속성에 구성된 항목의 상태를 표시하는 다음 값 중 하나가 포함되어 있습니다.

적용됨
OpenShift Container Platform은 업데이트된 보안을 각 브로커 Pod의 속성 파일에 전파했습니다.
AppliedWithError
OpenShift Container Platform은 업데이트된 보안을 각 브로커 Pod의 속성 파일에 전파했습니다. 그러나 brokerProperties 구성에서 오류가 발견되었습니다. CR의 status 섹션에서 message 필드를 확인하여 잘못된 속성을 식별하고 CR에서 수정합니다.
OutOfSync
OpenShift Container Platform은 아직 업데이트된 시크릿을 각 브로커 Pod의 속성 파일에 전파하지 않았습니다. OpenShift Container Platform에서 업데이트된 보안을 각 Pod에 전파하면 이유 필드 값이 Applied 로 변경됩니다.
참고

브로커는 포드에 마운트된 속성 파일에 대한 업데이트를 포함하여 구성 변경 사항을 주기적으로 확인하고 변경 사항을 탐지하면 구성을 다시 로드합니다. 그러나 브로커를 시작할 때만 읽는 속성 업데이트(예: JVM 설정)는 브로커를 다시 시작할 때까지 다시 로드되지 않습니다. 다시 로드하는 속성에 대한 자세한 내용은 AMQ Broker 구성에서 구성 업데이트 다시 로드 참조하십시오.

추가 정보

CR의 brokerProperties 요소에서 구성할 수 있는 속성 목록은 AMQ Broker 구성 의 브로커 속성을 참조하십시오.

2.5. Cluster Operator 배포에 대한 옵션 조사

Cluster Operator가 실행되면 AMQ Broker CR(사용자 정의 리소스)의 업데이트를 감시하기 시작합니다.

Cluster Operator를 배포하여 CR을 조사하도록 선택할 수 있습니다.

  • 단일 네임스페이스(Operator를 포함하는 동일한 네임스페이스)
  • 모든 네임스페이스
참고

클러스터의 네임스페이스에 이전 버전의 AMQ Broker Operator를 이미 설치한 경우, 잠재적인 충돌을 방지하기 위해 해당 네임스페이스를 확인하기 위해 AMQ Broker Operator 7.12 버전을 설치하지 않는 것이 좋습니다.

2.6. Operator에서 이미지를 배포하는 데 사용할 구성을 결정하는 방법

ActiveMQArtemis CR에서는 다음 구성을 사용하여 컨테이너 이미지를 배포할 수 있습니다.

  • spec.version 속성에 버전 번호를 지정하고 Operator에서 해당 버전 번호에 대해 배포할 브로커 및 init 컨테이너 이미지를 선택할 수 있도록 합니다.
  • Operator가 spec.deploymentPlan.imagespec.deploymentPlan.initImage 속성에 배포할 특정 브로커 및 init 컨테이너 이미지의 레지스트리 URL을 지정합니다.
  • spec.deploymentPlan.image 속성 값을 자리 표시자 로 설정합니다. 즉, Operator는 Operator 버전에 알려진 최신 브로커 및 init 컨테이너 이미지를 선택합니다.
참고

컨테이너 이미지를 배포하는 데 이러한 구성을 사용하지 않는 경우 Operator는 Operator 버전에 알려진 최신 브로커 및 init 컨테이너 이미지를 선택합니다.

CR을 저장하면 Operator에서 다음 검증을 수행하여 사용할 구성을 결정합니다.

  • Operator는 CR에 spec.version 속성이 포함되어 있는지 확인합니다.

    • CR에 spec.version 속성이 포함되어 있지 않은 경우 Operator는 CR에 spec.deploymentPlan.imagespec.deployment.Plan.initImage 속성이 포함되어 있는지 확인합니다.

      • CR에 spec.deploymentPlan.imagespec.deployment.Plan.initImage 속성이 포함된 경우 Operator는 레지스트리 URL로 식별되는 컨테이너 이미지를 배포합니다.
      • CR에 spec.deploymentPlan.imagespec.deployment.Plan.initImage 속성이 없으면 Operator는 배포할 컨테이너 이미지를 선택합니다. 자세한 내용은 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법”의 내용을 참조하십시오.
    • CR에 spec.version 속성이 포함된 경우 Operator는 지정된 버전 번호가 Operator에서 지원하는 유효한 버전 범위 내에 있는지 확인합니다.

      • spec.version 속성 값이 유효하지 않으면 Operator에서 배포를 중지합니다.
      • spec.version 속성 값이 유효한 경우 Operator는 CR에 spec.deploymentPlan.imagespec.deployment.Plan.initImage 속성이 포함되어 있는지 확인합니다.

        • CR에 spec.deploymentPlan.imagespec.deployment.Plan.initImage 속성이 포함된 경우 Operator는 레지스트리 URL로 식별되는 컨테이너 이미지를 배포합니다.
        • CR에 spec.deploymentPlan.imagespec.deployment.Plan.initImage 속성이 없으면 Operator는 배포할 컨테이너 이미지를 선택합니다. 자세한 내용은 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법”의 내용을 참조하십시오.
참고

CR에 spec.deploymentPlan.imagespec.deployment.Plan.initImage 속성 중 하나만 포함하는 경우 Operator는 spec.version 번호 속성을 사용하여 CR에 없는 속성의 이미지를 선택하거나 spec.version 속성이 CR에 없는 경우 해당 속성에 대해 최신 알려진 이미지를 선택합니다.

spec.deployment.Plan.initImage 속성 없이 spec.deploymentPlan.image 속성을 지정하지 않거나 그 반대의 경우 브로커 및 init 컨테이너 이미지의 불일치 버전이 배포되지 않도록 하는 것이 좋습니다.

2.7. Operator에서 컨테이너 이미지를 선택하는 방법

CR에 spec.deploymentPlan.imagespec.deployment.Plan.initImage 속성이 포함되어 있지 않은 경우 Operator는 Operator에서 배포할 특정 컨테이너 이미지의 레지스트리 URL을 지정합니다.

참고

OpenShift 명령줄 인터페이스를 사용하여 Operator를 설치하는 경우 Operator 설치 아카이브에 broker_activemqartemis_cr.yaml 이라는 샘플 CR 파일이 포함되어 있습니다. 샘플 CR에서 spec.deploymentPlan.image 속성이 포함되고 자리 표시자 의 기본값으로 설정됩니다. 이 값은 CR을 배포할 때까지 Operator가 브로커 컨테이너 이미지를 선택하지 않음을 나타냅니다.

Init Container 이미지를 지정하는 spec.deploymentPlan.initImage 속성은 broker_activemqartemis_cr.yaml 샘플 CR 파일에 포함되지 않습니다. CR에 spec.deploymentPlan.initImage 속성을 명시적으로 포함하지 않고 값을 지정하지 않으면 Operator는 선택한 Operator 컨테이너 이미지와 일치하는 기본 제공 Init Container 이미지를 선택합니다.

브로커 및 Init Container 이미지를 선택하기 위해 Operator는 먼저 필요한 이미지의 AMQ Broker 버전을 결정합니다. Operator는 spec.version 속성 값에서 버전을 가져옵니다. spec.version 속성이 설정되지 않은 경우 Operator는 AMQ Broker에 최신 버전의 이미지를 사용합니다.

그러면 Operator에서 컨테이너 플랫폼을 감지합니다. AMQ Broker Operator는 다음 컨테이너 플랫폼에서 실행할 수 있습니다.

  • OpenShift Container Platform (x86_64)
  • IBM Z의 OpenShift Container Platform (s390x)
  • IBM Power Systems의 OpenShift Container Platform (ppc64le)

Operator는 AMQ Broker 버전과 컨테이너 플랫폼을 기반으로 operator.yaml 구성 파일에서 두 가지 환경 변수 세트를 참조합니다. 이러한 환경 변수 세트는 다음 섹션에 설명된 대로 다양한 버전의 AMQ Broker에 대해 broker 및 Init Container 이미지를 지정합니다.

2.7.1. 브로커 및 init 컨테이너 이미지의 환경 변수

operator.yaml 에 포함된 환경 변수에는 다음과 같은 명명 규칙이 있습니다.

표 2.1. 환경 변수에 대한 이름 지정 규칙
컨테이너 플랫폼규칙 이름 지정

OpenShift Container Platform

RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_<AMQ_Broker_version>

IBM Z의 OpenShift Container Platform

RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_<AMQ_Broker_version>_s390x

IBM Power Systems의 OpenShift Container Platform

RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_<AMQ_Broker_version>_ppc64le

다음은 지원되는 각 컨테이너 플랫폼에 대한 브로커 및 init 컨테이너 이미지의 환경 변수 이름의 예입니다.

표 2.2. 환경 변수 이름 예
컨테이너 플랫폼환경 변수 이름

OpenShift Container Platform

RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_7123
RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_7123

IBM Z의 OpenShift Container Platform

RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_7123_s390x
RELATED_IMAGE_Artemis_Broker_Init_s390x_7123

IBM Power Systems의 OpenShift Container Platform

RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_7123_ppc64le
RELATED_IMAGE_ActiveMQ_Artemis_Broker_Init_ppc64le_7123

각 환경 변수의 값은 Red Hat에서 사용할 수 있는 컨테이너 이미지의 주소를 지정합니다. 이미지 이름은SHA( Secure Hash Algorithm ) 값으로 표시됩니다. 예를 들면 다음과 같습니다.

- name: RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_7123
  value: registry.redhat.io/amq7/amq-broker-rhel8@sha256:55ae4e28b100534d63c34ab86f69230d274c999d46d1493f26fe3e75ba7a0cec

따라서 AMQ Broker 버전과 컨테이너 플랫폼을 기반으로 Operator는 브로커 및 init 컨테이너에 적용 가능한 환경 변수 이름을 결정합니다. Operator는 브로커 컨테이너를 시작할 때 해당 이미지 값을 사용합니다.

추가 리소스

2.8. CR(사용자 정의 리소스)의 이미지 및 버전 구성 검증

CR을 저장한 후 Operator는 CR 구성에 대해 다음 검증을 수행하고 CR에 상태를 제공합니다.

표 2.3. CR 구성의 Operator 검증
검증검증의 목적CR에 보고된 상태

CR에 spec.version 속성 없이 spec.deploymentPlan.image 속성이 포함되어 있습니까.

spec.version 속성이 없는 spec.deploymentPlan.image 속성은 Operator가 업그레이드될 때마다 Operator가 브로커 Pod를 다시 시작합니다. spec.version 속성에 버전 번호를 명시적으로 설정하지 않는 한 새 Operator가 StatefulSet의 레이블을 최신 지원 브로커 버전으로 업데이트하므로 Pod를 다시 시작해야 합니다.

Valid 조건은 Unknown 이고 다음 상태 메시지가 표시됩니다. 알 수 없는 이미지 버전이 표시되고 이미지가 지정되면 spec.version에서 지원되는 브로커 버전을 설정합니다.

CR에 spec.deploymentPlan.initImage 속성 없이 spec.deploymentPlan.image 속성이 포함되어 있거나 그 반대의 경우도 마찬가지입니까.

이 구성을 사용하면 브로커 및 init 컨테이너 이미지의 다른 버전을 배포할 수 있으므로 브로커가 시작되지 않을 수 있습니다.

'Valid' 조건은 알 수 없으며 다음 상태 메시지가 표시됩니다. Init 이미지와 브로커 이미지는 모두 상호 의존적인 쌍으로 구성되어야 합니다.

CR에 spec.version 속성이 포함된 경우 Operator에서 지원하는 버전 범위 내에 지정된 버전입니다.

spec.version 속성 값이 Operator에서 지원하지 않는 브로커 버전인 경우 Operator는 브로커 Pod 배포를 진행하지 않습니다.

Valid 조건은 False 이고 다음 상태 메시지가 표시됩니다 . Spec.Version은 지원되는 브로커 버전으로 확인되지 않았습니다. 이유는 <version>에 대해 지원되는 목록에서 일치하는 브로커를 찾지 못했습니다.

spec.deploymentPlan.image 속성의 컨테이너 이미지의 URL을 기반으로 배포된 브로커 이미지의 버전이 spec.version 속성의 브로커 버전과 일치합니까.

CR에 두 속성이 모두 구성된 경우 배포된 실제 브로커 버전과 spec.version 속성에 표시된 버전 간의 플래그를 지정합니다. 이는 spec.version 속성에 표시된 버전이 배포된 버전이 아님을 강조하기 위한 정보입니다.

BrokerVersionAligned 조건의 상태는 수 없으며 다음 메시지가 표시됩니다. Pod 이름에 정렬되지 않은 브로커 버전 <Pod 이름>, 감지된 버전 <version>은 <version>으로 확인된 spec.version <version>과 일치하지 않습니다.

추가 리소스

CR에서 상태 정보를 보는 방법에 대한 자세한 내용은 브로커 배포에 대한 상태 정보 보기를 참조하십시오.

2.9. Operator 배포 노트

이 섹션에서는 Operator 기반 배포를 계획할 때 몇 가지 중요한 고려 사항에 대해 설명합니다.

  • AMQ Broker Operator와 함께 제공되는 CRD(Custom Resource Definitions)를 배포하려면 OpenShift 클러스터에 대한 클러스터 관리자 권한이 필요합니다. Operator가 배포되면 관리자가 아닌 사용자는 해당 사용자 정의 리소스(CR)를 통해 브로커 인스턴스를 생성할 수 있습니다. 일반 사용자가 CR을 배포할 수 있도록 하려면 먼저 클러스터 관리자가 CRD에 역할 및 권한을 할당해야 합니다. 자세한 내용은 OpenShift Container Platform 설명서의 사용자 정의 리소스 정의에 대한 클러스터 역할 생성 을 참조하십시오.
  • 최신 Operator 버전에 대한 CRD로 클러스터를 업데이트하면 이 업데이트가 클러스터의 모든 프로젝트에 영향을 미칩니다. 이전 버전의 Operator에서 배포한 브로커 Pod는 해당 상태를 업데이트할 수 없게 될 수 있습니다. OpenShift Container Platform 웹 콘솔에서 실행 중인 브로커 Pod의 로그 탭을 클릭하면 'UpdatePodStatus'가 실패했음을 나타내는 메시지가 표시됩니다. 그러나 해당 프로젝트의 브로커 Pod 및 Operator는 예상대로 계속 작동합니다. 영향을 받는 프로젝트의 이 문제를 해결하려면 최신 버전의 Operator를 사용하도록 해당 프로젝트를 업그레이드해야 합니다.
  • 여러 사용자 정의 리소스(CR) 인스턴스를 배포하여 지정된 OpenShift 프로젝트에서 두 개 이상의 브로커 배포를 생성할 수 있지만 일반적으로 프로젝트에 단일 브로커 배포를 생성한 다음 주소를 위해 여러 CR 인스턴스를 배포할 수 있습니다.

    별도의 프로젝트에서 브로커 배포를 생성하는 것이 좋습니다.

  • 영구 스토리지로 브로커를 배포하고 OpenShift 클러스터에 컨테이너 네이티브 스토리지가 없는 경우 PV(영구 볼륨)를 수동으로 프로비저닝하고 Operator에서 이를 클레임할 수 있는지 확인해야 합니다. 예를 들어 영구 스토리지가 있는 두 브로커의 클러스터를 생성하려면(즉, CR에서 persistenceEnabled=true 를 설정하여) 두 개의 영구 볼륨을 사용할 수 있어야 합니다. 기본적으로 각 브로커 인스턴스에는 2GiB의 스토리지가 필요합니다.

    CR에 persistenceEnabled=false 를 지정하는 경우 배포된 브로커는 임시 스토리지를 사용합니다. 임시 스토리지는 브로커 Pod를 다시 시작할 때마다 기존 데이터가 손실됩니다.

    OpenShift Container Platform에서 영구 스토리지 프로비저닝에 대한 자세한 내용은 다음을 참조하십시오.

  • CR을 처음 배포하기 전에 아래 나열된 항목에 대한 구성을 기본 브로커 CR 인스턴스에 추가해야 합니다. 이러한 항목에 대한 구성을 이미 실행 중인 브로커 배포에 추가할 수 없습니다.

  • Operator가 StatefulSet에서 동적으로 업데이트할 수 없는 CR에서 매개변수를 업데이트하면 Operator가 StatefulSet을 삭제하고 업데이트된 매개변수 값으로 다시 생성합니다. StatefulSet을 삭제하면 모든 Pod가 삭제되고 다시 생성되어 브로커가 일시적으로 중단됩니다. Operator가 StatefulSet에서 동적으로 업데이트할 수 없는 CR 업데이트의 예는 persistenceEnabled=falsepersistenceEnabled=true 로 변경하는 것입니다.

2.10. 기존 Operator에서 조사한 네임스페이스 확인

클러스터에 이미 AMQ Broker용 설치된 Operator가 포함되어 있고 새 Operator에서 모든 네임스페이스 또는 여러 네임스페이스를 조사하려면 새 Operator에서 기존 Operator와 동일한 네임스페이스를 감시하지 않아야 합니다. 다음 절차에 따라 기존 Operator에서 조사한 네임스페이스를 식별합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔의 왼쪽 창에서 워크로드 배포를 클릭합니다.
  2. 프로젝트 드롭다운 목록에서 모든 프로젝트를 선택합니다.
  3. 필터 이름 상자에서 클러스터에 설치된 AMQ Broker용 Operator를 표시하려면 문자열(예: amq )을 지정합니다.

    참고

    namespace 열에는 각 Operator가 배포된 네임스페이스가 표시됩니다.

  4. AMQ Broker용 각 Operator가 감시 하도록 구성된 네임스페이스를 확인합니다.

    1. Operator 이름을 클릭하여 Operator 세부 정보를 표시하고 YAML 탭을 클릭합니다.
    2. WATCH_NAMESPACE 를 검색하고 Operator에서 조사하는 네임스페이스를 확인합니다.

      • WATCH_NAMESPACE 섹션에 metadata.namespace 값이 있는 fieldPath 필드가 있는 경우 Operator에서 배포된 네임스페이스를 감시하고 있습니다.
      • WATCH_NAMESPACE 섹션에 네임스페이스 목록이 있는 value 필드가 있는 경우 Operator에서 지정된 네임스페이스를 모니터링합니다. 예를 들면 다음과 같습니다.

        - name: WATCH_NAMESPACE
          value: "namespace1, namespace2"
      • WATCH_NAMESPACE 섹션에 필드가 비어 있거나 별표가 있는 경우 Operator에서 클러스터의 모든 네임스페이스를 감시하고 있습니다. 예를 들면 다음과 같습니다.

        - name: WATCH_NAMESPACE
          value: ""

        이 경우 새 Operator를 배포하기 전에 기존 Operator를 제거하거나 특정 네임스페이스를 조사하려면 해당 Operator를 재구성해야 합니다.

다음 섹션의 절차에서는 Operator를 설치하고 사용자 정의 리소스(CR)를 사용하여 OpenShift Container Platform에 브로커 배포를 생성하는 방법을 보여줍니다. 절차를 완료한 후 Operator는 개별 Pod에서 실행되며 생성하는 각 브로커 인스턴스는 Operator와 동일한 프로젝트의 StatefulSet에서 개별 Pod로 실행됩니다. 나중에 전용 주소 지정 CR을 사용하여 브로커 배포에서 주소를 정의하는 방법을 확인할 수 있습니다.

3장. AMQ Broker Operator를 사용하여 OpenShift Container Platform에 AMQ Broker 배포

3.1. 사전 요구 사항

3.2. CLI를 사용하여 Operator 설치

참고

각 Operator 릴리스에서는 아래에 설명된 대로 최신 AMQ Broker 7.12.3 Operator 설치 및 예제 파일을 다운로드해야 합니다.

이 섹션의 절차에서는 OpenShift CLI(명령줄 인터페이스)를 사용하여 지정된 OpenShift 프로젝트에서 AMQ Broker 7.12의 최신 버전을 설치하고 배포하는 방법을 보여줍니다. 후속 절차에서는 이 Operator를 사용하여 일부 브로커 인스턴스를 배포합니다.

3.2.1. Operator 배포 준비

CLI를 사용하여 Operator를 배포하기 전에 Operator 설치 파일을 다운로드하고 배포를 준비해야 합니다.

프로세스

  1. 웹 브라우저에서 AMQ Broker 7.12.3 릴리스소프트웨어 다운로드 페이지로 이동합니다.
  2. 버전 드롭다운 목록의 값이 7.12.3 으로 설정되고 릴리스 탭이 선택되어 있는지 확인합니다.
  3. 최신 AMQ Broker 7.12.3 Operator 설치 및 예제 파일 옆에 있는 Download 를 클릭합니다.

    amq-broker-operator-7.12.3-ocp-install-examples-rhel8.zip 압축 아카이브가 자동으로 시작됩니다.

  4. 아카이브를 선택한 디렉터리로 이동합니다. 다음 예제에서는 아카이브를 ~/broker/operator 라는 디렉터리로 이동합니다.

    $ mkdir ~/broker/operator
    $ mv amq-broker-operator-7.12.3-ocp-install-examples-rhel8.zip ~/broker/operator
  5. 선택한 디렉터리에서 아카이브의 내용을 추출합니다. 예를 들면 다음과 같습니다.

    $ cd ~/broker/operator
    $ unzip amq-broker-operator-7.12.3-ocp-install-examples-rhel8.zip
  6. 아카이브를 추출할 때 생성된 디렉터리로 전환합니다. 예를 들면 다음과 같습니다.

    $ cd amq-broker-operator-7.12.3-ocp-install-examples
  7. 클러스터 관리자로 OpenShift Container Platform에 로그인합니다. 예를 들면 다음과 같습니다.

    $ oc login -u system:admin
  8. Operator를 설치할 프로젝트를 지정합니다. 새 프로젝트를 생성하거나 기존 프로젝트로 전환할 수 있습니다.

    1. 새 프로젝트를 생성합니다.

      $ oc new-project <project_name>
    2. 또는 기존 프로젝트로 전환합니다.

      $ oc project <project_name>
  9. Operator와 함께 사용할 서비스 계정을 지정합니다.

    1. 추출한 Operator 아카이브의 배포 디렉터리에서 service_account.yaml 파일을 엽니다.
    2. kind 요소가 ServiceAccount 로 설정되어 있는지 확인합니다.
    3. 기본 서비스 계정 이름을 변경하려면 metadata 섹션에서 amq-broker-controller-manager 를 사용자 지정 이름으로 교체합니다.
    4. 프로젝트에서 서비스 계정을 생성합니다.

      $ oc create -f deploy/service_account.yaml
  10. Operator의 역할 이름을 지정합니다.

    1. role.yaml 파일을 엽니다. 이 파일은 Operator가 사용하고 수정할 수 있는 리소스를 지정합니다.
    2. kind 요소가 Role 로 설정되어 있는지 확인합니다.
    3. 기본 역할 이름을 변경하려면 metadata 섹션에서 amq-broker-operator-role 을 사용자 지정 이름으로 교체합니다.
    4. 프로젝트에서 역할을 생성합니다.

      $ oc create -f deploy/role.yaml
  11. Operator에 대한 역할 바인딩을 지정합니다. 역할 바인딩은 지정한 이름에 따라 이전에 생성된 서비스 계정을 Operator 역할에 바인딩합니다.

    1. role_binding.yaml 파일을 엽니다.
    2. ServiceAccountRolename 값이 service_account.yamlrole.yaml 파일에 지정된 값과 일치하는지 확인합니다. 예를 들면 다음과 같습니다.

      metadata:
          name: amq-broker-operator-rolebinding
      subjects:
          kind: ServiceAccount
          name: amq-broker-controller-manager
      roleRef:
          kind: Role
          name: amq-broker-operator-role
    3. 프로젝트에 역할 바인딩을 생성합니다.

      $ oc create -f deploy/role_binding.yaml
  12. Operator의 리더 선택 역할 바인딩을 지정합니다. 역할 바인딩은 지정한 이름에 따라 이전에 생성된 서비스 계정을 리더 선택 역할에 바인딩합니다.

    1. Operator에 대한 리더 선택 역할을 생성합니다.

      $ oc create -f deploy/election_role.yaml
    2. 프로젝트에서 리더 선택 역할 바인딩을 생성합니다.

      $ oc create -f deploy/election_role_binding.yaml
  13. (선택 사항) Operator에서 여러 네임스페이스를 조사하려면 다음 단계를 완료합니다.

    참고

    OpenShift Container Platform 클러스터에 AMQ Broker용 Operator가 이미 포함된 경우 새 Operator에서 기존 Operator와 동일한 네임스페이스를 감시하지 않아야 합니다. 기존 Operator에서 조사하는 네임스페이스를 식별하는 방법에 대한 자세한 내용은 기존 Operator 에서 조사한 네임스페이스 식별을 참조하십시오.

    1. 다운로드 및 추출한 Operator 아카이브의 배포 디렉터리에서 operator_yaml 파일을 엽니다.
    2. Operator에서 클러스터의 모든 네임스페이스를 조사하려면 WATCH_NAMESPACE 섹션에서 value 속성을 추가하고 값을 별표로 설정합니다. WATCH_NAMESPACE 섹션에서 기존 속성을 주석 처리합니다. 예를 들면 다음과 같습니다.

      - name: WATCH_NAMESPACE
        value: "*"
      # valueFrom:
      #   fieldRef:
      #     fieldPath: metadata.namespace
      참고

      충돌을 방지하려면 여러 Operator가 동일한 네임스페이스를 감시하지 않도록 합니다. 예를 들어 클러스터의 모든 네임스페이스를 조사하기 위해 Operator를 배포하는 경우 다른 Operator를 배포하여 개별 네임스페이스를 조사할 수 없습니다. Operator가 이미 클러스터에 배포된 경우 다음 단계에 설명된 대로 새 Operator에서 조사하는 네임스페이스 목록을 지정할 수 있습니다.

    3. Operator에서 WATCH_NAMESPACE 섹션에서 클러스터의 여러 네임스페이스를 조사하지만 모두 조사하려면 네임스페이스 목록을 지정합니다. 기존 Operator에서 조사하는 네임스페이스를 제외해야 합니다. 예를 들면 다음과 같습니다.

      - name: WATCH_NAMESPACE
        value: "namespace1, namespace2"`.
    4. 다운로드 및 추출한 Operator 아카이브의 배포 디렉터리에서 cluster_role_binding.yaml 파일을 엽니다.
    5. 주체 섹션에서 Operator를 배포하는 OpenShift Container Platform 프로젝트에 해당하는 네임스페이스를 지정합니다. 예를 들면 다음과 같습니다.

      Subjects:
      - kind: ServiceAccount
        name: amq-broker-controller-manager
        namespace: operator-project
      참고

      이전 버전의 Operator를 사용하여 이전에 브로커를 배포하고 Operator를 배포하여 여러 네임스페이스를 조사하려면 업그레이드하기 전에 를 참조하십시오.

    6. 프로젝트에 클러스터 역할을 생성합니다.

      $ oc create -f deploy/cluster_role.yaml
    7. 프로젝트에 클러스터 역할 바인딩을 생성합니다.

      $ oc create -f deploy/cluster_role_binding.yaml

다음 절차에서는 프로젝트에 Operator를 배포합니다.

3.2.2. CLI를 사용하여 Operator 배포

이 섹션의 절차에서는 OpenShift CLI(명령줄 인터페이스)를 사용하여 OpenShift 프로젝트에서 AMQ Broker 7.12용 최신 버전의 Operator를 배포하는 방법을 보여줍니다.

사전 요구 사항

  • Operator 배포를 위한 OpenShift 프로젝트를 이미 준비해야 합니다. 3.2.1절. “Operator 배포 준비”을 참조하십시오.
  • AMQ Broker 7.3부터 새 버전의 Red Hat Ecosystem Catalog를 사용하여 컨테이너 이미지에 액세스합니다. 이 새 버전의 레지스트리를 사용하려면 이미지에 액세스하기 전에 인증된 사용자가되어야 합니다. 이 섹션의 절차를 수행하려면 먼저 Red Hat Container Registry Authentication 에 설명된 단계를 완료해야 합니다.
  • 영구 스토리지로 브로커를 배포하고 OpenShift 클러스터에 컨테이너 네이티브 스토리지가 없는 경우 PV(영구 볼륨)를 수동으로 프로비저닝하고 Operator에서 클레임할 수 있는지 확인해야 합니다. 예를 들어 영구 스토리지가 있는 두 브로커의 클러스터를 생성하려면(즉, Custom Resource에서 persistenceEnabled=true 를 설정하여) 두 개의 PV를 사용할 수 있어야 합니다. 기본적으로 각 브로커 인스턴스에는 2GiB의 스토리지가 필요합니다.

    사용자 정의 리소스에서 persistenceEnabled=false 를 지정하면 배포된 브로커는 임시 스토리지를 사용합니다. 임시 스토리지는 브로커 포드를 다시 시작할 때마다 기존 데이터가 손실됩니다.

    영구 스토리지 프로비저닝에 대한 자세한 내용은 다음을 참조하십시오.

프로세스

  1. OpenShift CLI(명령줄 인터페이스)에서 OpenShift에 클러스터 관리자로 로그인합니다. 예를 들면 다음과 같습니다.

    $ oc login -u system:admin
  2. 이전에 Operator 배포를 위해 준비한 프로젝트로 전환합니다. 예를 들면 다음과 같습니다.

    $ oc project <project_name>
  3. 이전에 Operator 설치 아카이브를 추출할 때 생성된 디렉터리로 전환합니다. 예를 들면 다음과 같습니다.

    $ cd ~/broker/operator/amq-broker-operator-7.12.3-ocp-install-examples
  4. Operator에 포함된 CRD를 배포합니다. Operator를 배포하고 시작하기 전에 OpenShift 클러스터에 CRD를 설치해야 합니다.

    1. 기본 브로커 CRD를 배포합니다.

      $ oc create -f deploy/crds/broker_activemqartemis_crd.yaml
    2. 주소 CRD를 배포합니다.

      $ oc create -f deploy/crds/broker_activemqartemisaddress_crd.yaml
    3. scaledown 컨트롤러 CRD를 배포합니다.

      $ oc create -f deploy/crds/broker_activemqartemisscaledown_crd.yaml
    4. 보안 CRD를 배포합니다.

      $ oc create -f deploy/crds/broker_activemqartemissecurity_crd.yaml
  5. Red Hat Ecosystem Catalog에서 인증에 사용되는 계정과 연결된 풀 시크릿을 OpenShift 프로젝트의 기본,배포자빌더 서비스 계정으로 연결합니다.

    $ oc secrets link --for=pull default <secret_name>
    $ oc secrets link --for=pull deployer <secret_name>
    $ oc secrets link --for=pull builder <secret_name>
  6. 다운로드 및 추출한 Operator 아카이브의 배포 디렉터리에서 operator.yaml 파일을 엽니다. 아래 표시된 대로 spec.containers.image 속성 값이 Operator의 7.12.3-opr-1 버전에 해당하는지 확인합니다.

    spec:
        template:
            spec:
                containers:
                    #image: registry.redhat.io/amq7/amq-broker-rhel8-operator:7.10
                    image: registry.redhat.io/amq7/amq-broker-rhel8-operator@sha256:1fd01079ad519e1a47b886893a0635491759ace2f73eda7615a9c8c2f454ba89
    참고

    operator.yaml 파일에서 Operator는 SHA( Secure Hash Algorithm ) 값으로 표시되는 이미지를 사용합니다. 숫자 기호(#) 기호로 시작하는 주석 행은 SHA 값이 특정 컨테이너 이미지 태그에 해당함을 나타냅니다.

  7. Operator를 배포합니다.

    $ oc create -f deploy/operator.yaml

    OpenShift 프로젝트에서 Operator는 새 Pod에서 시작됩니다.

    OpenShift Container Platform 웹 콘솔의 Operator Pod의 Events 탭에 대한 정보는 OpenShift가 사용자가 지정한 Operator 이미지를 배포했음을 확인하고, OpenShift 클러스터의 노드에 새 컨테이너를 할당했으며, 새 컨테이너를 시작했습니다.

    또한 Pod에서 로그 탭을 클릭하면 출력에 다음과 같은 행이 포함되어야 합니다.

    ...
    {"level":"info","ts":1553619035.8302743,"logger":"kubebuilder.controller","msg":"Starting Controller","controller":"activemqartemisaddress-controller"}
    {"level":"info","ts":1553619035.830541,"logger":"kubebuilder.controller","msg":"Starting Controller","controller":"activemqartemis-controller"}
    {"level":"info","ts":1553619035.9306898,"logger":"kubebuilder.controller","msg":"Starting workers","controller":"activemqartemisaddress-controller","worker count":1}
    {"level":"info","ts":1553619035.9311671,"logger":"kubebuilder.controller","msg":"Starting workers","controller":"activemqartemis-controller","worker count":1}

    이전 출력은 새로 배포한 Operator가 Kubernetes와 통신하고, 브로커 및 주소 지정의 컨트롤러가 실행 중인지, 이러한 컨트롤러에서 일부 작업자를 시작했는지 확인합니다.

참고

지정된 OpenShift 프로젝트에 AMQ Broker Operator의 단일 인스턴스 만 배포하는 것이 좋습니다. Operator 배포의 spec.replicas 속성을 1 보다 큰 값으로 설정하거나 동일한 프로젝트에서 Operator를 두 번 이상 배포하는 것은 권장되지 않습니다.

추가 리소스

3.3. OperatorHub를 사용하여 Operator 설치

3.3.1. Operator Lifecycle Manager 개요

OpenShift Container Platform 4.5 이상에서 OLM( Operator Lifecycle Manager )은 사용자가 모든 Operator 및 클러스터에서 실행되는 관련 서비스의 라이프사이클을 설치, 업데이트 및 관리하는 데 도움이 됩니다. Operator 프레임워크의 일부입니다. Kubernetes 네이티브 애플리케이션(Operator)을 효율적이고 자동화하며 확장 가능한 방식으로 관리하도록 설계된 오픈 소스 툴킷입니다.

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

OperatorHub 는 OpenShift 클러스터 관리자가 OLM을 사용하여 Operator를 검색, 설치 및 업그레이드하는 데 사용하는 그래픽 인터페이스입니다. 한 번의 클릭으로 이러한 Operator를 OperatorHub에서 가져와서 클러스터에 설치하고 OLM에서 관리할 수 있으며 엔지니어링 팀이 개발, 테스트 및 프로덕션 환경의 소프트웨어를 셀프 서비스할 수 있습니다.

Operator를 배포할 때 CR(사용자 정의 리소스) 인스턴스를 사용하여 독립 실행형 및 클러스터형 브로커와 같은 브로커 배포를 생성할 수 있습니다.

3.3.2. OperatorHub에서 Operator 배포

다음 절차에서는 OperatorHub를 사용하여 최신 버전의 AMQ Broker를 지정된 OpenShift 프로젝트에 배포하는 방법을 보여줍니다.

참고

OperatorHub에서는 각 채널에 제공되는 최신 Operator 버전만 설치할 수 있습니다. 이전 버전의 Operator를 설치하려면 CLI를 사용하여 Operator를 설치해야 합니다. 자세한 내용은 3.2절. “CLI를 사용하여 Operator 설치”의 내용을 참조하십시오.

사전 요구 사항

  • Red Hat Integration - AMQ Broker for RHEL 8(Multiarch) Operator는 OperatorHub에서 사용할 수 있어야 합니다.
  • 클러스터 관리자 권한이 있어야 합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 클러스터 관리자로 로그인합니다.
  2. 왼쪽 탐색 메뉴에서 OperatorsOperatorHub 를 클릭합니다.
  3. OperatorHub 페이지 상단에 있는 프로젝트 드롭다운 메뉴에서 Operator를 배포할 프로젝트를 선택합니다.
  4. OperatorHub 페이지에서 키워드로 필터링…​ 상자를 사용하여 Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 찾습니다.

    참고

    OperatorHub에서는 이름에 AMQ Broker 를 포함하는 것보다 두 개 이상의 Operator를 찾을 수 있습니다. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다. 이 Operator를 클릭하면 열리는 정보 창을 검토합니다. AMQ Broker 7.12의 경우 이 Operator의 최신 마이너 버전 태그는 7.12.3-opr-1 입니다.

  5. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다. 표시되는 대화 상자에서 설치를 클릭합니다.
  6. Operator 설치 페이지에서 다음을 수행합니다.

    1. Update Channel 에서 7.11.x 채널을 선택하여 버전 7.11만 업데이트합니다. 7.11.x 채널은 LTS(Long Term Support) 채널입니다.

      OpenShift Container Platform 클러스터가 설치된 시기에 따라 이전 버전의 AMQ Broker 채널도 표시될 수 있습니다. 지원되는 유일한 채널은 LTS 채널인 7.10.x 입니다.

    2. 설치 모드에서 Operator가 조사하는 네임스페이스를 선택합니다.

      • 클러스터의 특정 네임스페이스 - Operator는 해당 네임스페이스에 설치되고 CR 변경을 위해 해당 네임스페이스만 모니터링합니다.
      • 모든 네임스페이스 - Operator는 모든 네임스페이스에서 CR 변경 사항을 모니터링합니다.
      참고

      이전 버전의 Operator를 사용하여 이전에 브로커를 배포하고 Operator를 배포하여 많은 네임스페이스를 조사하려면 업그레이드하기 전에 를 참조하십시오.

  7. 설치된 네임스페이스 드롭다운 메뉴에서 Operator를 설치할 프로젝트를 선택합니다.
  8. 승인 전략에서 라디오 버튼의 권한이 자동으로 선택되어 있는지 확인합니다. 이 옵션은 Operator에 대한 업데이트가 설치에 대한 수동 승인이 필요하지 않도록 지정합니다.

    참고

    승인 전략은 마이크로 버전의 Operator 간 업데이트에만 적용됩니다. 마이너 Operator 버전 간의 자동 업데이트는 지원되지 않습니다. 예를 들어 현재 Operator가 버전 7.11.7인 경우 버전 7.12.x에 대한 자동 업데이트를 사용할 수 없습니다. Operator의 마이너 버전 간에 업데이트하려면 현재 Operator를 수동으로 제거하고 해당 마이너 버전의 Operator를 사용할 수 있는 채널에서 새 Operator를 설치해야 합니다. 자세한 내용은 6.3절. “OperatorHub를 사용하여 Operator 수동 업그레이드”의 내용을 참조하십시오.

  9. 설치를 클릭합니다.

Operator 설치가 완료되면 Installed Operators 페이지가 열립니다. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator가 사용자가 지정한 프로젝트 네임스페이스에 설치되어 있는지 확인해야 합니다.

추가 리소스

3.4. Operator 기반 브로커 배포 생성

3.4.1. 기본 브로커 인스턴스 배포

다음 절차에서는 CR(사용자 정의 리소스) 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 보여줍니다.

참고

사전 요구 사항

프로세스

Operator를 성공적으로 설치하면 Operator가 실행되고 CR과 관련된 변경 사항을 수신 대기합니다. 이 예제 절차에서는 CR 인스턴스를 사용하여 프로젝트에 기본 브로커를 배포하는 방법을 보여줍니다.

  1. 브로커 배포에 대한 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 배포를 생성하는 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. 다운로드 및 추출한 Operator 설치 아카이브의 deploy/crs 디렉터리에 포함된 broker_activemqartemis_cr.yaml 이라는 샘플 CR 파일을 엽니다.
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 배포를 생성하는 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. Create ActiveMQArtemis 를 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

    기본 브로커 배포의 경우 아래 표시된 구성과 유사할 수 있습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
    spec:
      deploymentPlan:
        size: 1
        image: placeholder
        requireLogin: false
        persistenceEnabled: true
        journalType: nio
        messageMigration: true

    broker_activemqartemis_cr.yaml 샘플 CR 파일에서 image 속성이 자리 표시자 의 기본값으로 설정되어 있는지 확인합니다. 이 값은 기본적으로 image 속성이 배포에 사용할 브로커 컨테이너 이미지를 지정하지 않음을 나타냅니다. Operator에서 사용할 적절한 브로커 컨테이너 이미지를 결정하는 방법을 알아보려면 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법” 를 참조하십시오.

    참고

    broker_activemqartemis_cr.yaml 샘플 CR은 ex-aao 의 이름 지정 규칙을 사용합니다. 이 명명 규칙은 CR이 AMQ Broker Operator예제 리소스임을 나타냅니다. AMQ Broker는 ActiveMQ Artemis 프로젝트를 기반으로 합니다. 이 샘플 CR을 배포할 때 결과 StatefulSet은 ex-aao-ss 라는 이름을 사용합니다. 또한 배포의 브로커 Pod는 StatefulSet 이름(예: ex-aao-ss-0,ex-aao-ss-1 등)을 직접 기반으로 합니다. CR의 애플리케이션 이름은 배포에 StatefulSet의 레이블로 표시됩니다. Pod 선택기에서 이 레이블을 사용할 수 있습니다(예:).

  2. size 속성은 배포할 브로커 수를 지정합니다. 2 이상의 값은 클러스터형 브로커 배포를 지정합니다. 그러나 단일 브로커 인스턴스를 배포하려면 값이 1 로 설정되어 있는지 확인합니다.
  3. CR 인스턴스를 배포합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 생성하는 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR 인스턴스를 생성합니다.

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 구성을 완료하면 생성 을 클릭합니다.
  4. OpenShift Container Platform 웹 콘솔에서 WorkloadsStatefulSets 를 클릭합니다. ex-aao-ss 라는 새로운 StatefulSet이 표시됩니다.

    1. ex-aao-ss StatefulSet을 클릭합니다. CR에 정의한 단일 브로커에 해당하는 하나의 Pod가 있는지 확인합니다.
    2. StatefulSet에서 Pods 탭을 클릭합니다. ex-aao-ss s Pod를 클릭합니다. 실행 중인 Pod의 이벤트 탭에 브로커 컨테이너가 시작되었는지 확인합니다. 로그 탭에는 브로커 자체가 실행 중임을 보여줍니다.
  5. 브로커가 정상적으로 실행 중인지 테스트하려면 브로커 Pod의 쉘에 액세스하여 일부 테스트 메시지를 보냅니다.

    1. OpenShift Container Platform 웹 콘솔 사용:

      1. 워크로드포드 를 클릭합니다.
      2. ex-aao-ss s Pod를 클릭합니다.
      3. 터미널 탭을 클릭합니다.
    2. OpenShift 명령줄 인터페이스 사용:

      1. 프로젝트의 Pod 이름 및 내부 IP 주소를 가져옵니다.

        $ oc get pods -o wide
        
        NAME                          STATUS   IP
        amq-broker-operator-54d996c   Running  10.129.2.14
        ex-aao-ss-0                   Running  10.129.2.15
      2. 브로커 Pod의 쉘에 액세스합니다.

        $ oc rsh ex-aao-ss-0
  6. 쉘에서 artemis 명령을 사용하여 일부 테스트 메시지를 보냅니다. URL에서 브로커 Pod의 내부 IP 주소를 지정합니다. 예를 들면 다음과 같습니다.

    sh-4.2$ ./amq-broker/bin/artemis producer --url tcp://10.129.2.15:61616 --destination queue://demoQueue

    이전 명령은 브로커에서 demoQueue 라는 큐를 자동으로 생성하고 기본 수량의 1000개의 메시지를 큐로 보냅니다.

    다음과 유사한 출력이 표시됩니다.

    Connection brokerURL = tcp://10.129.2.15:61616
    Producer ActiveMQQueue[demoQueue], thread=0 Started to calculate elapsed time ...
    
    Producer ActiveMQQueue[demoQueue], thread=0 Produced: 1000 messages
    Producer ActiveMQQueue[demoQueue], thread=0 Elapsed time in second : 3 s
    Producer ActiveMQQueue[demoQueue], thread=0 Elapsed time in milli second : 3492 milli seconds

추가 리소스

3.4.2. 클러스터형 브로커 배포

프로젝트에서 두 개 이상의 브로커 Pod가 실행 중인 경우 Pod는 브로커 클러스터를 자동으로 형성합니다. 클러스터된 구성을 사용하면 브로커가 로드 밸런싱을 위해 서로 연결하고 필요에 따라 메시지를 재배포할 수 있습니다.

다음 절차에서는 클러스터형 브로커를 배포하는 방법을 보여줍니다. 기본적으로 이 배포의 브로커는 요청 부하 분산에서 사용됩니다. 즉, 브로커는 소비자와 일치하는 다른 브로커에게만 메시지를 전달합니다.

사전 요구 사항

프로세스

  1. 기본 브로커 배포에 사용한 CR 파일을 엽니다.
  2. 클러스터형 배포의 경우 deploymentPlan.size 값이 2 이상이어야 합니다. 예를 들면 다음과 같습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
    spec:
      deploymentPlan:
        size: 4
        image: placeholder
        ...
    참고

    metadata 섹션에는 namespace 속성을 포함하고 OpenShift Container Platform 웹 콘솔을 사용하여 CR 인스턴스를 생성하는 경우에만 값을 지정해야 합니다. 지정해야 하는 값은 브로커 배포를 위한 OpenShift 프로젝트의 이름입니다.

  3. 수정된 CR 파일을 저장합니다.
  4. 이전에 기본 브로커 배포를 생성한 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

    $ oc login -u <user> -p <password> --server=<host:port>
  5. 이전에 기본 브로커 배포를 생성한 프로젝트로 전환합니다.

    $ oc project <project_name>
  6. 명령줄에서 변경 사항을 적용합니다.

    $ oc apply -f <path/to/custom_resource_instance>.yaml

    OpenShift Container Platform 웹 콘솔에서 CR에 지정된 수에 따라 추가 브로커 Pod가 프로젝트에서 시작됩니다. 기본적으로 프로젝트에서 실행되는 브로커는 클러스터형입니다.

  7. 각 Pod의 로그 탭을 엽니다. 로그는 OpenShift가 각 브로커에 클러스터 연결 브릿지를 설정했음을 보여줍니다. 특히 로그 출력에는 다음과 같은 행이 포함됩니다.

    targetConnector=ServerLocatorImpl (identity=(Cluster-connection-bridge::ClusterConnectionBridge@6f13fb88

3.4.3. 실행 중인 브로커 배포에 사용자 정의 리소스 변경 사항 적용

다음은 실행 중인 브로커 배포에 CR(사용자 정의 리소스) 변경 사항을 적용하는 데 유의해야 할 몇 가지 중요한 사항입니다.

  • CR에서 persistenceEnabled 속성을 동적으로 업데이트할 수 없습니다. 이 속성을 변경하려면 클러스터를 제로 브로커로 축소합니다. 기존 CR을 삭제합니다. 그런 다음 변경 사항을 사용하여 CR을 다시 생성하고 재배포하여 배포 크기도 지정합니다.
  • 3.2.2절. “CLI를 사용하여 Operator 배포” 에 설명된 대로 영구 스토리지(즉, CR에서 persistenceEnabled=true 를 설정하여)를 사용하여 브로커 배포를 생성하는 경우 AMQ Broker Operator가 브로커 포드에 대해 영구 볼륨(PV)을 프로비저닝해야 할 수 있습니다. 브로커 배포 크기를 축소하는 경우 Operator는 현재 종료된 브로커 Pod에 대해 이전에 클레임한 PV를 해제합니다. 그러나 CR을 삭제하여 브로커 배포를 제거하는 경우 AMQ Broker Operator 는 배포 시 배포에 남아 있는 브로커 Pod에 대해 PVC(영구 볼륨 클레임)를 릴리스하지 않습니다. 또한 새 배포에서는 릴리스되지 않은 PV를 사용할 수 없습니다. 이 경우 볼륨을 수동으로 해제해야 합니다. 자세한 내용은 OpenShift 문서의 영구 볼륨 릴리스 를 참조하십시오.
  • AMQ Broker 7.12에서 다음 항목을 구성하려면 CR을 처음 배포하기 전에 기본 CR 인스턴스에 적절한 구성을 추가해야 합니다.

  • 활성 확장 이벤트 중에 적용하는 추가 변경 사항은 Operator에 의해 대기열에 추가되며 확장이 완료된 경우에만 실행됩니다. 예를 들어 배포 크기를 4개 브로커에서 1개로 축소한다고 가정합니다. 그런 다음 스케일 다운이 진행되는 동안 브로커 관리자 사용자 이름과 암호의 값도 변경합니다. 이 경우 Operator는 배포가 하나의 활성 브로커와 함께 실행될 때까지 사용자 이름과 암호 변경을 대기열에 넣습니다.
  • 모든 CR은 배포 크기를 변경하거나 수락자, 커넥터 또는 콘솔의 expose 속성 값을 변경하는 것 외에도 기존 브로커를 다시 시작합니다. 배포에 브로커가 여러 개 있는 경우 한 번에 하나의 브로커만 다시 시작됩니다.

3.5. Operator의 로깅 수준 변경

AMQ Broker Operator의 기본 로깅 수준은 정보 및 오류 메시지를 기록하는 info 입니다. 기본 로깅 수준을 변경하여 Operator 로그에 기록된 세부 정보를 늘리거나 줄일 수 있습니다.

OpenShift Container Platform 명령줄 인터페이스를 사용하여 Operator를 설치하는 경우 Operator 구성 파일 operator.yaml 에서 Operator를 설치하기 전이나 후에 새 로깅 수준을 설정할 수 있습니다. Operator Hub를 사용하는 경우 Operator를 설치한 후 OpenShift Container Platform 웹 콘솔을 사용하여 Operator 서브스크립션에 로깅 수준을 설정할 수 있습니다.

Operator에서 사용 가능한 다른 로깅 수준은 다음과 같습니다.

error
로그에만 오류 메시지를 씁니다.
debug
디버깅 메시지를 포함하여 로그에 모든 메시지를 작성합니다.

프로세스

  1. OpenShift Container Platform 명령줄 인터페이스 사용:

    1. 클러스터 관리자로 로그인합니다. 예를 들면 다음과 같습니다.

      $ oc login -u system:admin
    2. Operator가 설치되지 않은 경우 다음 단계를 완료하여 로깅 수준을 변경합니다.

      1. 다운로드 및 추출한 Operator 아카이브의 배포 디렉터리에서 operator.yaml 파일을 엽니다.
      2. zap-log-level 속성 값을 debug 또는 error 로 변경합니다. 예를 들면 다음과 같습니다.

        apiVersion: apps/v1
        kind: Deployment
        metadata:
          labels:
            control-plane: controller-manager
          name: amq-broker-controller-manager
          spec:
            containers:
            - args:
              - --zap-log-level=error
          ...
      3. operator.yaml 파일을 저장합니다.
      4. Operator를 설치합니다.
    3. Operator가 이미 설치된 경우 sed 명령을 사용하여 deploy/operator.yaml 파일의 로깅 수준을 변경하고 Operator를 재배포합니다. 예를 들어 다음 명령은 로깅 수준을 info 에서 오류로 변경하고 Operator를 재배포합니다.

      $ sed 's/--zap-log-level=info/--zap-log-level=error/' deploy/operator.yaml | oc apply -f -
  2. OpenShift Container Platform 웹 콘솔 사용:

    1. 클러스터 관리자로 OpenShift Container Platform에 로그인합니다.
    2. 왼쪽 창에서 OperatorsInstalled Operators 를 클릭합니다.
    3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
    4. 서브스크립션 탭을 클릭합니다.
    5. 작업을 클릭합니다.
    6. 서브스크립션 편집을 클릭합니다.
    7. YAML 탭을 클릭합니다.

      콘솔에서 YAML 편집기가 열리고 서브스크립션을 편집할 수 있습니다.

    8. config 요소에서 ARGS 라는 환경 변수를 추가하고 로깅 수준의 info,debug 또는 error 를 지정합니다. 다음 예제에서는 로깅 수준의 디버그 를 지정하는 ARGS 환경 변수가 Operator 컨테이너로 전달됩니다.

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      spec:
        ...
        config:
          env:
          - name: ARGS
            value: "--zap-log-level=debug"
        ...
    9. 저장을 클릭합니다.

3.6. Operator의 리더 선택 설정 구성

AMQ Broker Operator가 리더 선택을 위해 사용하는 설정을 사용자 지정할 수 있습니다.

OpenShift Container Platform 명령줄 인터페이스를 사용하여 Operator를 설치하는 경우 설치 전이나 후에 Operator 구성 파일 operator.yaml 에서 리더 선택 설정을 구성할 수 있습니다. OperatorHub를 사용하는 경우 OpenShift Container Platform 웹 콘솔을 사용하여 설치 후 Operator 서브스크립션에서 리더 선택 설정을 구성할 수 있습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔 사용:

    1. 클러스터 관리자로 OpenShift Container Platform에 로그인합니다.
    2. 왼쪽 창에서 OperatorsInstalled Operators 를 클릭합니다.
    3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
    4. 서브스크립션 탭을 클릭합니다.
    5. 작업을 클릭합니다.
    6. 서브스크립션 편집을 클릭합니다.
    7. YAML 탭을 클릭합니다.

      콘솔에서 YAML 편집기가 열리고 서브스크립션을 편집할 수 있습니다.

    8. config 섹션에서 ARGS 라는 환경 변수를 추가하고 변수 값에 리더 선택 설정을 지정합니다. 예를 들면 다음과 같습니다.

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      spec:
        ..
        config:
          env:
          - name: ARGS
            value: "--lease-duration=18 --renew-deadline=12 --retry-period=3"
    9. 저장을 클릭합니다.

      lease-duration
      Leader가 아닌 운영자가 이전 리더에 의해 갱신되지 않은 리스를 취득하기 전에 기다리는 기간(초)입니다. 기본값은 15입니다.
      renew-deadline
      지속 시간(초)은 리더가 중지되기 전에 리더 역할을 갱신하려는 시도 사이에 대기합니다. 기본값은 10입니다.
      retry-period
      운영자가 리더 역할을 확보하고 갱신하려는 시도 사이에 대기하는 기간(초)입니다. 기본값은 2입니다.
  2. OpenShift Container Platform 명령줄 인터페이스 사용:

    1. 클러스터 관리자로 로그인합니다. 예를 들면 다음과 같습니다.

      $ oc login -u system:admin
    2. 다운로드 및 추출한 operator 아카이브의 배포 디렉터리에서 operator.yaml 파일을 엽니다.
    3. 리더 선택 설정 값을 설정합니다. 예를 들면 다음과 같습니다.

      apiVersion: apps/v1
      kind: Deployment
      ...
      template
      ..
      spec:
        containers:
        - args:
          - --lease-duration=60
          - --renew-deadline=40
          - --retry-period=5
      ..
    4. operator.yaml 파일을 저장합니다.
    5. Operator가 이미 설치된 경우 업데이트된 설정을 적용합니다.

      $ oc apply -f deploy/operator.yaml
    6. Operator가 설치되지 않은 경우 Operator를 설치합니다.

3.7. 브로커 배포에 대한 상태 정보 보기

브로커 배포를 위해 OpenShift Container Platform에서 보고한 일련의 표준 조건의 상태를 볼 수 있습니다. 브로커 배포를 위해 CR(사용자 정의 리소스)에 제공된 추가 상태 정보를 볼 수도 있습니다.

프로세스

  1. 브로커 배포의 CR 인스턴스를 엽니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포의 프로젝트에서 CR을 볼 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
      2. 배포에 대한 CR을 확인합니다.

         oc get ActiveMQArtemis <CR instance name> -n <namespace> -o yaml
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 왼쪽 창에서 OperatorsInstalled Operator 를 클릭합니다.
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
      4. ActiveMQ Artemis 탭을 클릭합니다.
      5. ActiveMQ Artemis 인스턴스의 이름을 클릭합니다.
  2. 브로커 배포에 대한 OpenShift Container Platform 조건의 상태를 확인합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR의 status 섹션으로 이동하여 조건 세부 정보를 확인합니다.
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 세부 정보 탭에서 Conditions 섹션까지 아래로 스크롤합니다.

        조건에는 상태 및 유형이 있습니다. 또한 이유, 메시지 및 기타 세부 사항이 있을 수 있습니다. 조건이 충족되면 상태 값이 True 이고, 조건이 충족되지 않으면 False 또는 조건 상태를 확인할 수 없는 경우 Unknown 입니다. Valid 조건은 브로커 배포에 영향을 미치지 않는 구성에서 anomaly 플래그를 지정하는 데 알 수 없는 상태도 있을 수 있습니다. 자세한 내용은 2.8절. “CR(사용자 정의 리소스)의 이미지 및 버전 구성 검증”의 내용을 참조하십시오.

        상태 정보는 다음 조건에 대해 제공됩니다.

        표 3.1. 브로커 배포의 상태 정보
        상태 이름상태 표시…​

        valid

        CR의 검증입니다. Valid 조건의 상태가 False 인 경우 Operator는 조정을 완료하지 않고 false 상태를 초래한 문제를 먼저 해결할 때까지 StatefulSet을 업데이트하지 않습니다.

        배포됨

        StatefulSet, Pod 및 기타 리소스의 가용성.

        Ready

        다른 보다 자세한 조건을 요약하는 최상위 조건입니다. Ready 조건의 상태는 다른 조건이 False 가 아닌 경우에만 True 입니다.

        BrokerPropertiesApplied

        brokerProperties 특성을 사용하는 CR에 구성된 속성입니다. BrokerPropertiesApplied 조건에 대한 자세한 내용은 2.4절. “CRD(사용자 정의 리소스 정의)에 노출되지 않은 항목 구성” 을 참조하십시오.

        JaasPropertiesApplied

        CR에 구성된 JAAS(Java Authentication and Authorization Service) 로그인 모듈입니다. JaasPropertiesApplied 조건에 대한 자세한 내용은 4.3.1절. “시크릿에서 JAAS 로그인 모듈 구성” 을 참조하십시오.

  3. CR의 status 섹션에서 브로커 배포에 대한 추가 상태 정보를 확인합니다. 다음과 같은 추가 상태 정보가 표시됩니다.

    deploymentPlanSize
    배포의 브로커 Pod 수입니다.
    podstatus
    배포에서 각 브로커 Pod의 상태 및 이름입니다.
    version
    배포된 브로커 및 init 컨테이너 이미지의 레지스트리 URL과 브로커의 버전 및 레지스트리 URL입니다.
    업그레이드

    Operator의 기능은 배포에 메이저, 마이너, 패치 및 보안 업데이트를 적용할 수 있습니다. CR의 spec.deploymentPlan.imagespec.version 속성 값에 따라 결정됩니다.

    • spec.deploymentPlan.image 속성이 브로커 컨테이너 이미지의 레지스트리 URL을 지정하는 경우 모든 업그레이드 유형의 상태는 False 이므로 Operator는 기존 컨테이너 이미지를 업그레이드할 수 없습니다.
    • spec.deploymentPlan.image 속성이 CR에 없거나 자리 표시자 의 값이 있는 경우 spec.version 속성의 구성은 다음과 같이 업그레이드 상태에 영향을 미칩니다.

      • spec.version 속성이 구성되어 있는지 여부에 관계없이 securityUpdates 의 상태는 True 입니다.
      • spec.version 속성 값이 메이저 버전과 마이너 버전(예: '7.10')이 있는 경우 patchUpdates 상태는 True 이므로 Operator는 컨테이너 이미지의 최신 패치 버전으로 업그레이드할 수 있습니다.
      • spec.version 속성 값에 주요 버전(예: '7')이 있는 경우 minorUpdates 의 상태는 True 이므로 Operator는 컨테이너 이미지의 최신 마이너 버전 및 패치 버전으로 업그레이드할 수 있습니다.
      • spec.version 속성이 CR에 없는 경우 majorUpdates 의 상태는 True 이므로 이 버전을 사용할 수 있는 경우 7.x.x에서 8.x.x로의 업그레이드를 포함하여 사용 가능한 업그레이드를 배포할 수 있습니다.

4장. Operator 기반 브로커 배포 구성

4.1. Operator에서 브로커 구성을 생성하는 방법

사용자 정의 리소스(CR) 인스턴스를 사용하여 브로커 배포를 구성하기 전에 Operator에서 브로커 구성을 생성하는 방법을 이해해야 합니다.

Operator 기반 브로커 배포를 생성하면 각 브로커의 Pod가 OpenShift 프로젝트의 StatefulSet에서 실행됩니다. 브로커의 애플리케이션 컨테이너는 각 Pod 내에서 실행됩니다.

Operator는 각 Pod를 초기화할 때 Init Container 라는 컨테이너 유형을 실행합니다. OpenShift Container Platform에서 Init Container는 애플리케이션 컨테이너보다 먼저 실행되는 특수 컨테이너입니다. Init Container에는 애플리케이션 이미지에 없는 유틸리티 또는 설정 스크립트가 포함될 수 있습니다.

기본적으로 AMQ Broker Operator는 기본 제공 Init Container를 사용합니다. Init Container는 배포에 기본 CR 인스턴스를 사용하여 각 브로커 애플리케이션 컨테이너에서 사용하는 구성을 생성합니다.

CR에 주소 설정이 지정된 경우 Operator는 기본 구성을 생성한 다음 해당 구성을 CR에 지정된 구성과 병합하거나 교체합니다. 이 프로세스는 다음 섹션에 설명되어 있습니다.

4.1.1. Operator에서 주소 설정 구성을 생성하는 방법

배포에 대한 기본 CR(사용자 정의 리소스) 인스턴스에 주소 설정 구성이 포함된 경우 Operator는 아래에 설명된 대로 각 브로커에 대한 주소 설정 구성을 생성합니다.

  1. Operator는 브로커 애플리케이션 컨테이너 전에 Init Container를 실행합니다. Init Container는 기본 주소 설정 구성을 생성합니다. 기본 주소 설정 구성은 다음과 같습니다.

    <address-settings>
        <!--
        if you define auto-create on certain queues, management has to be auto-create
        -->
        <address-setting match="activemq.management#">
            <dead-letter-address>DLQ</dead-letter-address>
            <expiry-address>ExpiryQueue</expiry-address>
            <redelivery-delay>0</redelivery-delay>
            <!--
            with -1 only the global-max-size is in use for limiting
            -->
            <max-size-bytes>-1</max-size-bytes>
            <message-counter-history-day-limit>10</message-counter-history-day-limit>
            <address-full-policy>PAGE</address-full-policy>
            <auto-create-queues>true</auto-create-queues>
            <auto-create-addresses>true</auto-create-addresses>
            <auto-create-jms-queues>true</auto-create-jms-queues>
            <auto-create-jms-topics>true</auto-create-jms-topics>
        </address-setting>
    
        <!-- default for catch all -->
        <address-setting match="#">
            <dead-letter-address>DLQ</dead-letter-address>
            <expiry-address>ExpiryQueue</expiry-address>
            <redelivery-delay>0</redelivery-delay>
            <!--
            with -1 only the global-max-size is in use for limiting
            -->
            <max-size-bytes>-1</max-size-bytes>
            <message-counter-history-day-limit>10</message-counter-history-day-limit>
            <address-full-policy>PAGE</address-full-policy>
            <auto-create-queues>true</auto-create-queues>
            <auto-create-addresses>true</auto-create-addresses>
            <auto-create-jms-queues>true</auto-create-jms-queues>
            <auto-create-jms-topics>true</auto-create-jms-topics>
        </address-setting>
    <address-settings>
  2. CR(사용자 정의 리소스) 인스턴스에서 주소 설정 구성도 지정한 경우 구성을 처리하고 XML로 변환합니다.
  3. CR의 applyRule 속성 값에 따라 Init Container는 위에 표시된 기본 주소 설정 구성을 CR에 지정한 구성으로 병합 하거나 교체 합니다. 이 병합 또는 교체 결과는 브로커가 사용할 최종 주소 설정 구성입니다.
  4. Init Container가 브로커 구성(Address settings 포함) 생성을 완료하면 브로커 애플리케이션 컨테이너가 시작됩니다. 시작 시 브로커 컨테이너는 이전에 Init Container에서 사용한 설치 디렉터리에서 해당 구성을 복사합니다. broker.xml 구성 파일에서 주소 설정 구성을 검사할 수 있습니다. 실행 중인 브로커의 경우 이 파일은 /home/jboss/amq-broker/etc 디렉터리에 있습니다.

추가 리소스

4.1.2. 브로커 Pod의 디렉터리 구조

Operator 기반 브로커 배포를 생성하면 각 브로커의 Pod가 OpenShift 프로젝트의 StatefulSet에서 실행됩니다. 브로커의 애플리케이션 컨테이너는 각 Pod 내에서 실행됩니다.

Operator는 각 Pod를 초기화할 때 Init Container 라는 컨테이너 유형을 실행합니다. OpenShift Container Platform에서 Init Container는 애플리케이션 컨테이너보다 먼저 실행되는 특수 컨테이너입니다. Init Container에는 애플리케이션 이미지에 없는 유틸리티 또는 설정 스크립트가 포함될 수 있습니다.

브로커 인스턴스에 대한 구성을 생성할 때 Init Container는 기본 설치 디렉터리에 포함된 파일을 사용합니다. 이 설치 디렉터리는 Operator가 브로커 Pod에 마운트하는 볼륨과 Init Container 및 브로커 컨테이너 공유에 있습니다. Init Container에서 공유 볼륨을 마운트하는 데 사용하는 경로는 CONFIG_INSTANCE_DIR 이라는 환경 변수에 정의됩니다. CONFIG_INSTANCE_DIR 의 기본값은 /amq/init/config 입니다. 문서에서 이 디렉터리를 < install_dir>이라고 합니다.

참고

CONFIG_INSTANCE_DIR 환경 변수의 값은 변경할 수 없습니다.

기본적으로 설치 디렉터리에는 다음과 같은 하위 디렉터리가 있습니다.

표 4.1. Pod 디렉터리
하위 디렉터리내용

<install_dir>/bin

브로커를 실행하는 데 필요한 바이너리 및 스크립트입니다.

<install_dir>/etc

구성 파일.

<install_dir>/data

브로커 저널입니다.

<install_dir>/lib

broker를 실행하는 데 필요한 root 및 라이브러리입니다.

<install_dir>/log

브로커 로그 파일.

<install_dir>/tmp

임시 웹 애플리케이션 파일.

Init Container가 브로커 구성 생성을 완료하면 브로커 애플리케이션 컨테이너가 시작됩니다. 시작 시 브로커 컨테이너는 이전에 Init Container에서 사용한 설치 디렉터리에서 해당 구성을 복사합니다. 브로커 Pod가 초기화되고 실행되면 브로커의 /home/jboss/amq-broker 디렉터리(및 하위 디렉터리)에 브로커 구성이 있습니다.

추가 리소스

4.2. Operator 기반 브로커 배포를 위한 주소 및 대기열 구성

4.2.1. 주소 및 큐 구성

브로커 배포에 ActiveMQArtemis CR 인스턴스에서 brokerProperties 속성을 사용하여 주소 및 큐를 구성할 수 있습니다. 또는 ActiveMQArtemisAddress CR에서 주소와 큐를 구성할 수 있습니다.

참고

ActiveMQArtemisAddress CR은 AMQ Broker 7.12에서 더 이상 사용되지 않습니다.

brokerProperties를 사용하여 주소 및 대기열 구성

brokerProperties 속성 아래에 주소와 큐를 구성하고 사용자가 생성하는 각 큐에 대한 설정도 구성할 수 있습니다.

사전 요구 사항

기본 브로커 배포를 생성하셨습니다. 자세한 내용은 3.4.1절. “기본 브로커 인스턴스 배포”의 내용을 참조하십시오.

프로세스

  1. 브로커 배포에 사용할 ActiveMQArtemis CR 인스턴스를 편집합니다.
  2. CR의 spec 섹션에서 CR에 아직 없는 경우 brokerProperties 속성을 추가합니다.

    spec:
      ...
      brokerProperties:
      ...
  3. 형식으로 주소를 구성합니다.

    - addressConfigurations.<주소 이름>.routingTypes=<라우팅 유형>

    예를 들면 다음과 같습니다.

    spec:
      ...
      brokerProperties:
      - addressConfigurations.usa-news-address.routingTypes=MULTICAST
      ...
  4. 형식으로 생성한 주소에 대한 큐를 구성합니다.

    - addressConfigurations.<주소 이름>.queueConfigs.<큐 이름>.address<address>

    중요

    .address 설정의 <address> 값은 생성한 각 큐에 대해 <주소 이름>과 일치해야 합니다. 이러한 값이 다른 경우 각각에 대해 별도의 주소가 생성됩니다. 다음 예에서 주소 이름과 .address 설정의 모두 usa-news-address 의 값과 동일합니다.

    spec:
      ...
      brokerProperties:
      - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.address=usa-news-address
      ...
  5. 형식으로 큐에 대해 구성할 각 설정에 대해 별도의 행을 추가합니다.

    • addressConfigurations.<주소 이름>.queueConfigs.<큐 이름>.<큐 설정>

    예를 들면 다음과 같습니다.

    spec:
      ...
      brokerProperties:
      - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.routingType=ANYCAST
      - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.purgeOnNoConsumers=true
      - addressConfigurations.usa-news-address.queueConfigs.usa-news-queue.maxConsumers=20
      ...
  6. CR을 저장합니다.
  7. ActiveMQArtemis CR의 status 섹션을 검토하여 brokerProperties 구성에서 오류가 감지되지 않았는지 확인합니다. 자세한 내용은 2.4절. “CRD(사용자 정의 리소스 정의)에 노출되지 않은 항목 구성”의 내용을 참조하십시오.

ActiveMQArtemisAddress CR에서 주소 및 큐 구성

ActiveMQArtemisAddress CR에서 주소와 큐를 구성할 수 있습니다. 브로커 배포에서 여러 주소 및/또는 큐를 구성하려면 별도의 CR 인스턴스를 생성하고 개별적으로 배포하여 각 경우에 새 주소 및/또는 큐 이름을 지정해야 합니다. 또한 각 CR 인스턴스의 name 속성은 고유해야 합니다.

사전 요구 사항

프로세스

  1. 브로커 배포에 대한 주소 및 큐를 정의하도록 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. 다운로드 및 추출한 Operator 설치 아카이브의 deploy/crs 디렉터리에 포함된 broker_activemqartemisaddress_cr.yaml 이라는 샘플 CR 파일을 엽니다.
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 주소 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemisAddresss CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. Create ActiveMQArtemisAddress 를 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

  2. CR의 spec 섹션에서 주소, 큐 및 라우팅 유형을 정의하는 행을 추가합니다. 예를 들면 다음과 같습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemisAddress
    metadata:
        name: myAddressDeployment0
        namespace: myProject
    spec:
        ...
        addressName: myAddress0
        queueName: myQueue0
        routingType: anycast
        ...

    이전 구성은 myQueue0 큐와 anycast 라우팅 유형으로 myAddress0 이라는 주소를 정의합니다.

    참고

    metadata 섹션에는 namespace 속성을 포함하고 OpenShift Container Platform 웹 콘솔을 사용하여 CR 인스턴스를 생성하는 경우에만 값을 지정해야 합니다. 지정해야 하는 값은 브로커 배포를 위한 OpenShift 프로젝트의 이름입니다.

  3. CR 인스턴스를 배포합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 위해 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR 인스턴스를 생성합니다.

        $ oc create -f <path/to/address_custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 구성을 완료하면 생성 을 클릭합니다.

4.2.2. 주소 설정 구성

주소 설정 그룹을 구성하고 다음 방법 중 하나를 사용하여 설정을 적용하는 주소 기준을 지정할 수 있습니다.

  • 브로커 배포에 ActiveMQArtemis CR 인스턴스에서 brokerProperties 속성을 사용하여 주소를 구성하는 경우 brokerProperties 속성에서 주소 설정을 구성할 수도 있습니다.
  • ActiveMQArtemisAddress CR 인스턴스에서 주소를 구성하는 경우 ActiveMQArtemis CR의 addressSettings 섹션에서 주소 설정을 구성할 수 있습니다.

다음 예제에서는 두 방법을 모두 사용하여 특정 주소 패턴에 대해 dead letter address 및 queue를 구성하는 방법을 보여줍니다. 브로커에서 dead letter address 및 queue를 사용하여 무한 전송 시도를 방지하기 위해 클라이언트에 전달할 수 없는 메시지를 저장할 수 있습니다. 시스템 관리자는 나중에 dead letter queue에서 전달되지 않은 메시지를 사용하여 메시지를 검사할 수 있습니다.

사전 요구 사항

brokerProperties를 사용하여 주소 설정 구성

  1. 브로커 배포에 사용할 ActiveMQArtemis CR 인스턴스를 편집합니다.
  2. 배달되지 않은 메시지를 수신하기 위해 dead letter address 및 queue를 만듭니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      brokerProperties:
      ...
      - addressConfigurations.usDeadLetter.routingTypes=MULTICAST
      - addressConfigurations.usDeadLetter.queueConfigs.usDeadLetter-queue.address=usDeadLetter

    brokerProperties 를 사용하여 주소 및 큐 생성에 대한 자세한 내용은 4.2.1절. “주소 및 큐 구성” 을 참조하십시오.

  3. addressSettings.< 주소이름>.< 주소 설정 > 의 brokerProperties 속성 아래에 별도의 행을 추가합니다.

    • 생성된 dead letter address를 dead letter address로 설정합니다.
    • 배달 시도 횟수를 지정한 후 일치하는 주소로 전달할 수 없는 메시지를 dead letter 주소로 보냅니다.

      예를 들면 다음과 같습니다.

      spec:
        ...
        brokerProperties:
        ...
        - addressSettings.usa-news.deadLetterAddress=usDeadLetter
        - addressSettings.usa-news.maxDeliveryAttempts=5
        ...

      별표(*) 또는 숫자 기호(#) 문자를 와일드카드로 사용하여 주소 패턴을 만들 수 있습니다. 패턴의 일치는 마침표(.)로 표시되는 각 구분 기호 경계에서 수행됩니다. 숫자 기호 문자는 0개 이상의 단어와 일치하며 주소 문자열 끝에 사용할 수 있습니다. 별표 문자는 단일 단어와 일치하며 address 문자열 내의 모든 위치에서 사용할 수 있습니다. 예를 들면 다음과 같습니다.

      spec:
        ...
        brokerProperties:
        ...
        - addressSettings."usa-news.*".deadLetterAddress=usDeadLetter
        - addressSettings."europe-news.#".deadLetterAddress=euDeadLetter
        ...

      이전 예에서 다음 주소가 일치합니다.

    • usa-news.* 주소 패턴은 usa-news.domestic usa-news. intl 과 같이 usa-news.politics 문자열과 일치하지만 usa-news.domestic.politics.
    • europe-news.# 주소 패턴은 europe-news , europe-news.politics 및 europe-news.politics. fr과 같이 europe-news 로 시작하는 모든 주소와 일치합니다.

      참고

      brokerProperties 항목에서 마침표(.)는 예약된 문자입니다. 마침표가 포함된 주소 패턴을 만들려면 주소를 따옴표로 묶어야 합니다. 예: "usa-news.*"

  4. CR을 저장합니다.
  5. ActiveMQArtemis CR의 status 섹션을 검토하여 brokerProperties 구성에서 오류가 감지되지 않았는지 확인합니다. 자세한 내용은 2.4절. “CRD(사용자 정의 리소스 정의)에 노출되지 않은 항목 구성”의 내용을 참조하십시오.

ActiveMQArtemis CR 인스턴스에서 addressSettings 를 사용하여 주소 설정 구성

ActiveMQArtemisAddress CR에 dead letter address 및 queue를 구성한 경우 브로커 배포에 대한 ActiveMQArtemis CR 인스턴스에서 전달 시도를 제한하도록 설정을 구성할 수 있습니다.

사전 요구 사항

다음 세부 정보를 사용하여 주소와 큐를 생성했습니다.

addressName: myDeadLetterAddress
queueName: myDeadLetterQueue
routingType: anycast

주소 및 큐 생성에 대한 자세한 내용은 다음을 참조하십시오. 4.2.1절. “주소 및 큐 구성”

프로세스

  1. 브로커 배포에 사용할 ActiveMQArtemis CR 인스턴스를 편집합니다.

     oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    1. OpenShift Container Platform 웹 콘솔 사용:
  2. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
  3. 왼쪽 창에서 OperatorsInstalled Operator 를 클릭합니다.
  4. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
  5. AMQ Broker 탭을 클릭합니다.
  6. ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
  7. YAML 탭을 클릭합니다.

    콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.

    참고

    metadata 섹션에는 namespace 속성을 포함하고 OpenShift Container Platform 웹 콘솔을 사용하여 CR 인스턴스를 생성하는 경우에만 값을 지정해야 합니다. 지정해야 하는 값은 브로커 배포를 위한 OpenShift 프로젝트의 이름입니다.

    1. CR의 spec 섹션에서 다음과 같이 단일 addressSetting 섹션이 포함된 새 addressSettings 섹션을 추가합니다.

      spec:
        ...
        addressSettings:
          addressSetting:
    2. addressSetting 블록에 match 속성의 단일 인스턴스를 추가합니다. 주소 일치 표현식을 지정합니다. 예를 들면 다음과 같습니다.

      spec:
        ...
        addressSettings:
          addressSetting:
          - match: myAddress
      match
      브로커가 다음 구성을 적용하는 주소 또는 주소를 지정합니다. 이 예제에서 match 속성의 값은 myAddress 라는 단일 주소에 해당합니다.
    3. 전달되지 않은 메시지와 관련된 속성을 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.

      spec:
        ...
        addressSettings:
          addressSetting:
          - match: myAddress
            deadLetterAddress: myDeadLetterAddress
            maxDeliveryAttempts: 5
      deadLetterAddress
      브로커가 전달되지 않은 메시지를 보내는 주소입니다.
      maxDeliveryAttempts

      구성된 dead letter 주소로 메시지를 이동하기 전에 브로커가 수행하는 최대 전달 시도 수입니다.

      이전 예에서 브로커가 myAddress 로 시작하는 주소로 5번 메시지를 전달하려고 하면 브로커는 지정된 dead letter address인 myDeadLetterAddress 로 메시지를 이동합니다.

    4. (선택 사항) 다른 주소 또는 주소 집합에 유사한 구성을 적용합니다. 예를 들면 다음과 같습니다.

      spec:
        ...
        addressSettings:
          addressSetting:
          - match: myAddress
            deadLetterAddress: myDeadLetterAddress
            maxDeliveryAttempts: 5
          - match: 'myOtherAddresses#'
            deadLetterAddress: myDeadLetterAddress
            maxDeliveryAttempts: 3

      이 예제에서 두 번째 match 속성 값에는 해시 와일드카드 문자가 포함됩니다. 와일드카드 문자는 이전 구성이 myOtherAddresses 문자열로 시작하는 모든 주소에 적용됨을 의미합니다.

      참고

      와일드카드 표현식을 match 속성의 값으로 사용하는 경우, 값을 작은따옴표로 묶어야 합니다(예: 'myOtherAddresses#' ).

    5. addressSettings 섹션의 시작 부분에 applyRule 속성을 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.

      spec:
        ...
          applyRule: merge_all
          addressSetting:
          - match: myAddress
            deadLetterAddress: myDeadLetterAddress
            maxDeliveryAttempts: 5
          - match: 'myOtherAddresses#'
            deadLetterAddress: myDeadLetterAddress
            maxDeliveryAttempts: 3

      applyRule 속성은 Operator가 일치하는 주소 또는 주소 집합에 대해 CR에 추가하는 구성을 적용하는 방법을 지정합니다. 지정할 수 있는 값은 다음과 같습니다.

      merge_all
      • CR 기본 구성에 모두 지정된 주소 설정의 경우 동일한 주소 또는 주소 집합과 일치하는 기본 구성입니다.

        • 기본 구성에 지정된 속성 값을 CR에 지정된 속성 값으로 바꿉니다.
        • CR 또는 기본 구성에 고유하게 지정된 속성 값을 유지합니다. 각 항목을 최종 병합된 구성에 포함합니다.
      • CR 또는 특정 주소 또는 주소 집합과 일치하는 기본 구성에 지정된 주소 설정의 경우 이를 최종 병합된 구성에 포함합니다.
      merge_replace
      • CR 동일한 주소 또는 주소 집합과 일치하는 기본 구성에 지정된 주소 설정의 경우 CR 에 지정된 설정을 최종 병합된 구성에 포함합니다. CR에 지정되지 않은 경우에도 기본 구성에 지정된 속성은 포함하지 마십시오.
      • CR 또는 특정 주소 또는 주소 집합과 일치하는 기본 구성에 지정된 주소 설정의 경우 이를 최종 병합된 구성에 포함합니다.
      replace_all
      기본 구성에 지정된 모든 주소 설정을 CR에 지정된 주소로 바꿉니다. 최종 병합 구성은 CR에 지정된 것과 정확히 일치합니다.
      참고

      CR에 applyRule 속성을 명시적으로 포함하지 않으면 Operator는 기본값 merge_all 을 사용합니다.

    6. CR 인스턴스를 저장합니다.
4.2.2.1. 구성 가능한 주소 및 큐 설정

일반적으로 OpenShift Container Platform에서 브로커 배포를 위해 구성할 수 있는 주소 및 큐 설정은 Linux 또는 Windows의 독립 실행형 브로커 배포와 완전히 동일합니다. 그러나 이러한 설정을 구성하는 방법의 몇 가지 차이점을 알고 있어야 합니다. 이러한 차이점은 다음 하위 섹션에 설명되어 있습니다.

  • OpenShift Container Platform에서 브로커 배포에 대한 주소 및 큐 설정을 구성하려면 브로커 배포의 기본 CR(사용자 정의 리소스) 인스턴스의 addressSettings 섹션에 구성을 추가합니다. 이는 Linux 또는 Windows의 독립 실행형 배포와 대조됩니다. 이 배포는 broker.xml 구성 파일의 address-settings 요소에 구성을 추가합니다.
  • 구성 항목 이름에 사용되는 형식은 OpenShift Container Platform과 독립 실행형 브로커 배포 간에 다릅니다. OpenShift Container Platform 배포의 경우 구성 항목 이름은 camel 경우입니다 (예: defaultQueueRoutingType ). 반대로 독립 실행형 배포의 구성 항목 이름은 소문자이며 대시(--) 구분 기호(예: default-queue-routing-type )를 사용합니다.

    다음 표에서는 이 이름 지정 차이에 대한 몇 가지 추가 예를 보여줍니다.

    표 4.2. 구성 항목의 이름의 차이점 예
    독립 실행형 브로커 배포를 위한 구성 항목OpenShift 브로커 배포를 위한 구성 항목

    address-full-policy

    addressFullPolicy

    auto-create-queues

    autoCreateQueues

    default-queue-routing-type

    defaultQueueRoutingType

    last-value-queue

    lastValueQueue

추가 리소스

4.2.3. 주소 및 큐 삭제

주소 및 큐를 생성하는 방법에 따라 브로커 배포에 대해 ActiveMQArtemis CR에서 brokerProperties 항목을 제거하거나 ActiveMQArtemis Address CR을 사용하여 주소와 큐를 삭제할 수 있습니다.

brokerProperties를 사용하여 생성된 주소 및 큐 삭제

brokerProperties 속성의 에서 항목을 제거하여 개별 주소 및 큐를 삭제할 수 있습니다.

사전 요구 사항

프로세스

  1. 브로커 배포에 사용할 ActiveMQArtemis CR 인스턴스를 편집합니다.
  2. 다음 brokerProperties 항목을 추가하여 브로커가 숫자 기호(#) 및 CR에서 더 이상 찾을 수 없는 연결된 큐로 표시되는 주소를 삭제할 수 있습니다.

    spec:
      ...
      brokerProperties:
      - addressSettings.#.configDeleteAddresses=FORCE
      - addressSettings.#.configDeleteQueues=FORCE
      ...
  3. brokerProperties 속성에서 제거할 주소와 큐를 참조하는 모든 행을 삭제합니다. 예를 들어 usa-news 주소를 참조하는 모든 행을 삭제하여 이 주소와 큐를 제거합니다.

    spec:
      ...
      brokerProperties:
      - addressConfigurations.usa-news.queueConfigs.usa-news-queue.routingType=MULTICAST
      - addressConfigurations.usa-news.queueConfigs.usa-news-queue.purgeOnNoConsumers=true
      - addressConfigurations.usa-news.queueConfigs.usa-news-queue.maxConsumers=20
      ...
  4. CR을 저장합니다.

    브로커가 업데이트된 구성을 적용하면 CR에서 제거한 주소와 큐를 삭제합니다.

ActiveMQArtemisAddress CR에서 주소 및 큐 삭제

CR에서 주소와 큐를 생성한 경우 ActiveMQArtemisAddress CR에서 주소 및 큐를 삭제할 수 있습니다.

프로세스

  1. 삭제할 주소 및 큐의 이름,addressNamequeueName 과 같은 세부 정보가 있는 주소 CR 파일이 있는지 확인합니다. 예를 들면 다음과 같습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemisAddress
    metadata:
        name: myAddressDeployment0
        namespace: myProject
    spec:
        ...
        addressName: myAddress0
        queueName: myQueue0
        routingType: anycast
        ...
  2. address CR의 spec 섹션에서 removeFromBrokerOnDelete 속성을 추가하고 true 값으로 설정합니다.

    ..
    spec:
       addressName: myAddress1
       queueName: myQueue1
       routingType: anycast
       removeFromBrokerOnDelete: true

    removeFromBrokerOnDelete 속성을 true 로 설정하면 주소 CR을 삭제할 때 Operator에서 배포의 모든 브로커에 대한 주소 및 관련 메시지가 제거됩니다.

  3. 업데이트된 주소 CR을 적용하여 삭제하려는 주소에 대한 removeFromBrokerOnDelete 속성을 설정합니다.

    $ oc apply -f <path/to/address_custom_resource_instance>.yaml
  4. 주소 CR을 삭제하여 배포의 브로커에서 주소를 삭제합니다.

    $ oc delete -f <path/to/address_custom_resource_instance>.yaml

추가 리소스

  • OpenShift Container Platform 브로커 배포의 주소, 큐 및 주소 설정에 대한 모든 구성 옵션에 대한 자세한 내용은 8.1절. “사용자 정의 리소스 구성 참조” 을 참조하십시오.
  • OpenShift CLI(명령줄 인터페이스)를 사용하여 AMQ Broker Operator를 설치한 경우 다운로드 및 추출한 설치 아카이브에는 주소 설정 구성에 대한 몇 가지 추가 예가 포함되어 있습니다. 설치 아카이브의 deploy/examples 폴더에서 다음을 참조하십시오.

    • artemis-basic-address-settings-deployment.yaml
    • artemis-merge-replace-address-settings-deployment.yaml
    • artemis-replace-address-settings-deployment.yaml
  • 독립 실행형 브로커 배포를 위한 주소, 큐 및 관련 주소 설정에 대한 포괄적인 정보는 AMQ Broker 구성에서 주소 및 큐 구성을 참조하십시오. 이 정보를 사용하여 OpenShift Container Platform의 브로커 배포에 대해 동등한 구성을 생성할 수 있습니다.
  • OpenShift Container Platform의 Init Container에 대한 자세한 내용은 OpenShift Container Platform 설명서에 Pod를 배포하기 전에 Init Container를 사용하여 작업을 수행합니다.

4.3. 인증 및 권한 부여 구성

기본적으로 AMQ Broker는 JAAS(Java Authentication and Authorization Service) 속성 로그인 모듈을 사용하여 사용자를 인증하고 권한을 부여합니다. 기본 JAAS 로그인 모듈에 대한 구성은 각 브로커 Pod의 /home/jboss/amq-broker/etc/login.config 파일에 저장되고 동일한 디렉터리의 artemis-users.propertiesartemis-roles.properties 파일에서 사용자 및 역할 정보를 읽습니다. ActiveMQArtemisSecurity CR(사용자 정의 리소스)을 업데이트하여 기본 로그인 모듈의 속성 파일에 사용자 및 역할 정보를 추가합니다.

기본 속성 파일에 사용자 및 역할 정보를 추가하기 위해 ActiveMQArtemisSecurity CR을 업데이트하는 대신 시크릿에서 JAAS 로그인 모듈을 하나 이상 구성하는 것입니다. 이 시크릿은 각 브로커 Pod에 파일로 마운트됩니다. 시크릿에서 JAAS 로그인 모듈을 구성하면 ActiveMQArtemisSecurity CR을 사용하여 사용자 및 역할 정보를 추가하는 것보다 다음과 같은 이점이 있습니다.

  • 시크릿에 속성 로그인 모듈을 구성하는 경우 브로커는 속성 파일을 업데이트할 때마다 다시 시작할 필요가 없습니다. 예를 들어 속성 파일에 새 사용자를 추가하고 시크릿을 업데이트하면 브로커를 다시 시작할 필요 없이 변경 사항이 적용됩니다.
  • ActiveMQArtemisSecurity CRD에 정의되지 않은 JAAS 로그인 모듈을 구성하여 사용자를 인증할 수 있습니다. 예를 들어 LDAP 로그인 모듈 또는 기타 JAAS 로그인 모듈을 구성할 수 있습니다.

AMQ Broker에 대한 인증 및 권한 부여 방법 모두 다음 섹션에 설명되어 있습니다.

4.3.1. 시크릿에서 JAAS 로그인 모듈 구성

AMQ Broker를 사용하여 사용자를 인증하도록 시크릿에서 JAAS 로그인 모듈을 구성할 수 있습니다. 시크릿을 생성한 후 기본 브로커 CR(사용자 정의 리소스)의 보안에 대한 참조를 추가하고 AMQ Broker에 대한 액세스 권한을 부여하도록 CR의 권한도 구성해야 합니다.

프로세스

  1. 새로운 JAAS 로그인 모듈 구성으로 텍스트 파일을 만들고 파일을 login.config 로 저장합니다. 파일을 login.config 로 저장하면 텍스트 파일에서 생성한 시크릿에 올바른 키가 삽입됩니다. 다음은 로그인 모듈 구성의 예입니다.

    activemq {
       org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient
          reload=true
          org.apache.activemq.jaas.properties.user="new-users.properties"
          org.apache.activemq.jaas.properties.role="new-roles.properties";
    
       org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient
          reload=false
          org.apache.activemq.jaas.properties.user="artemis-users.properties"
          org.apache.activemq.jaas.properties.role="artemis-roles.properties"
          baseDir="/home/jboss/amq-broker/etc";
    };

    시크릿에 JAAS 로그인 모듈을 구성하고 CR의 보안에 대한 참조를 추가하면 기본 로그인 모듈이 더 이상 AMQ Broker에서 사용되지 않습니다. 그러나 기본 로그인 모듈에서 참조되는 artemis-users.properties 파일의 사용자는 브로커로 인증하기 위해 Operator에 필요합니다. 새 JAAS 로그인 모듈을 구성한 후 Operator가 브로커로 인증할 수 있도록 하려면 다음 중 하나를 수행해야 합니다.

    • 위의 예와 같이 새 로그인 모듈 구성에 기본 속성 로그인 모듈을 포함합니다. 이 예제에서 기본 속성 로그인 모듈은 artemis-users.propertiesartemis-roles.properties 파일을 사용합니다. 새 로그인 모듈 구성에 기본 로그인 모듈을 포함하는 경우 baseDir 을 각 브로커 Pod의 기본 속성 파일이 포함된 /home/jboss/amq-broker/etc 디렉터리로 설정해야 합니다.
    • Operator에서 브로커로 인증하는 데 필요한 사용자 및 역할 정보를 새 로그인 모듈 구성에서 참조하는 속성 파일에 추가합니다. 브로커 Pod의 /home/jboss/amq-broker/etc 디렉터리에 있는 기본 artemis-users.propertiesartemis- roles.properties 파일에서 이 정보를 복사할 수 있습니다.

      참고

      로그인 모듈에서 참조된 속성 파일은 브로커가 로그인 모듈을 처음 호출할 때만 로드됩니다. 브로커는 사용자를 인증할 로그인 모듈을 찾을 때까지 login.config 파일에 나열된 순서대로 로그인 모듈을 호출합니다. login.config 파일 끝에 Operator에서 사용하는 인증 정보가 포함된 login 모듈을 배치하면 브로커가 Operator를 인증할 때 이전의 모든 로그인 모듈이 호출됩니다. 결과적으로 속성 파일이 브로커에 표시되지 않음을 나타내는 상태 메시지가 지워집니다.

  2. 생성한 login.config 파일에 properties 로그인 모듈이 포함된 경우 모듈에 지정된 사용자 및 역할 파일에 사용자 및 역할 정보가 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.

    new-users.properties
    ruben=ruben01!
    anne=anne01!
    rick=rick01!
    bob=bob01!
    new-roles.properties
    admin=ruben, rick
    group1=bob
    group2=anne
  3. oc create secret 명령을 사용하여 새 로그인 모듈 구성으로 생성한 텍스트 파일에서 시크릿을 생성합니다. 로그인 모듈 구성에 properties 로그인 모듈이 포함된 경우 시크릿에 연결된 사용자 및 역할 파일도 포함됩니다. 예를 들면 다음과 같습니다.

    oc create secret generic custom-jaas-config --from-file=login.config --from-file=new-users.properties --from-file=new-roles.properties
    참고

    Operator가 로그인 모듈 구성이 포함되어 있음을 인식하고 각 브로커 Pod에 업데이트를 전파할 수 있도록 시크릿 이름에 -jaas-config 접미사가 있어야 합니다.

    시크릿 생성 방법에 대한 자세한 내용은 Kubernetes 문서의 시크릿을 참조하십시오. https://kubernetes.io/docs/concepts/configuration/secret/

  4. 브로커 배포의 CR(사용자 정의 리소스) 인스턴스에 생성한 시크릿을 추가합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
      2. 배포에 사용할 CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 왼쪽 창에서 OperatorsInstalled Operator 를 클릭합니다.
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
      4. AMQ Broker 탭을 클릭합니다.
      5. ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

  5. extraMounts 요소 및 secrets 요소를 생성하고 시크릿 이름을 추가합니다. 다음 예제에서는 custom-jaas-config 라는 시크릿을 CR에 추가합니다.

    deploymentPlan:
      ...
      extraMounts:
        secrets:
        - "custom-jaas-config"
      ...
  6. CR에서 브로커에 구성된 역할에 권한을 부여합니다.

    1. CR의 spec 섹션에 brokerProperties 요소를 추가하고 권한을 추가합니다. 단일 주소에 대한 역할 권한을 부여할 수 있습니다. 또는 # 기호를 사용하여 와일드카드를 지정하여 모든 주소에 역할 권한을 부여할 수 있습니다. 예를 들면 다음과 같습니다.

      spec:
        ...
        brokerProperties:
        - securityRoles.#.group2.send=true
        - securityRoles.#.group1.consume=true
        - securityRoles.#.group1.createAddress=true
        - securityRoles.#.group1.createNonDurableQueue=true
        - securityRoles.#.group1.browse=true
        ...

      이 예제에서 group2 역할에는 모든 주소에 대한 send 권한이 할당되고 group1 역할은 consume,createAddress,createNonDurableQueue 를 할당하고 모든 주소에 대한 권한을 찾습니다.

      참고

      Java 속성 파일에서 콜론(:)은 키/값 쌍의 키와 값을 구분하는 데 사용되는 예약된 문자입니다. 주소 이름과 콜론(::)으로 구분된 큐 이름으로 구성된 정규화된 큐 이름(FQQN)에 권한을 부여하려면 FQQN에서 콜론(\) 문자를 이스케이프하려면 백슬래시(\) 문자를 사용해야 합니다. 예를 들면 다음과 같습니다.

      spec:
        ...
        brokerProperties:
        - 'securityRoles."my-address\:\:my-queue".group2.send=true'
  7. CR을 저장합니다.

    Operator는 각 Pod의 /amq/extra/secrets/시크릿 이름 디렉터리에 있는 시크릿에 login.config 파일을 마운트하고 기본 login.config 파일 대신 마운트된 login.config 파일을 읽도록 브로커 JVM을 구성합니다. login.config 파일에 properties 로그인 모듈이 포함된 경우 참조된 사용자 및 역할 속성 파일도 각 Pod에 마운트됩니다.

  8. CR에서 상태 정보를 보고 배포의 브로커가 인증을 위해 시크릿에서 JAAS 로그인 모듈을 사용하고 있는지 확인합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커의 CR에서 상태 조건을 가져옵니다.

        $ oc get activemqartemis -o yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR에서 status 섹션으로 이동합니다.
    3. 상태 정보에서 브로커가 시크릿에 구성된 JAAS 로그인 모듈을 사용하고 있음을 나타내는 JaasPropertiesApplied 유형이 있는지 확인합니다. 예를 들면 다음과 같습니다.

      - lastTransitionTime: "2023-02-06T20:50:01Z"
        message: ""
        reason: Applied
        status: "True"
        type: JaasPropertiesApplied

      시크릿의 파일을 업데이트할 때 OpenShift Container Platform이 시크릿의 최신 파일을 각 브로커 포드에 전파할 때까지 reason 필드의 값이 OutofSync 로 표시됩니다. 예를 들어 new 사용자를 new-users-properties 파일에 추가하고 보안을 업데이트하는 경우 업데이트된 파일이 각 Pod로 전파될 때까지 다음 상태 정보가 표시됩니다.

      - lastTransitionTime: "2023-02-06T20:55:20Z"
        message: 'new-users.properties status out of sync, expected: 287641156, current: 2177044732'
        reason: OutOfSync
        status: "False"
        type: JaasPropertiesApplied
  9. 시크릿에서 참조되는 속성 파일에서 사용자 또는 역할 정보를 업데이트할 때 oc set data 명령을 사용하여 보안을 업데이트합니다. login.config 파일을 포함하여 시크릿에 대한 모든 파일을 다시 읽어야 합니다. 예를 들어 이 절차의 앞부분에서 생성한 new-users.properties 파일에 새 사용자를 추가하는 경우 다음 명령을 사용하여 custom-jaas-config 시크릿을 업데이트합니다.

    oc set data secret/custom-jaas-config --from-file=login.config=login.config --from-file=new-users.properties=new-users.properties --from-file=new-roles.properties=new-roles.properties
참고

브로커 JVM은 시작할 때만 login.config 파일에서 구성을 읽습니다. login.config 파일에서 구성을 변경하고 새 로그인 모듈을 추가하고 시크릿을 업데이트하면 브로커는 브로커가 다시 시작될 때까지 새 구성을 사용하지 않습니다.

8.3절. “예: Red Hat Single Sign-On을 사용하도록 AMQ 브로커 구성”

JAAS 로그인 모듈 형식에 대한 자세한 내용은 JAAS 로그인 구성 파일을 참조하십시오.

4.3.2. 보안 사용자 정의 리소스(CR)를 사용하여 기본 JAAS 로그인 모듈 구성

ActiveMQArtemisSecurity CR(사용자 정의 리소스)을 사용하여 기본 JAAS 속성 로그인 모듈에서 사용자 및 역할 정보를 구성하여 AMQ Broker를 사용하여 사용자를 인증할 수 있습니다. 시크릿을 사용하여 AMQ Broker에서 인증 및 권한 부여를 구성하는 다른 방법은 4.3.1절. “시크릿에서 JAAS 로그인 모듈 구성” 를 참조하십시오.

참고

ActiveMQArtemisSecurity CR은 AMQ Broker 7.12부터 더 이상 사용되지 않습니다.

4.3.2.1. 보안 사용자 정의 리소스(CR)를 사용하여 기본 JAAS 로그인 모듈 구성

다음 절차에서는 보안 사용자 정의 리소스(CR)를 사용하여 기본 JAAS 로그인 모듈을 구성하는 방법을 보여줍니다.

사전 요구 사항

프로세스

브로커 배포를 생성하기 전이나 후에 보안 CR을 배포할 수 있습니다. 그러나 브로커 배포를 생성한 후 보안 CR을 배포하면 브로커 Pod가 새 구성을 수락하도록 다시 시작됩니다.

  1. 브로커 배포에 대한 사용자 및 관련 보안 구성을 정의하도록 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. 배포에 사용할 CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 왼쪽 창에서 OperatorsInstalled Operator 를 클릭합니다.
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
      4. AMQ Broker 탭을 클릭합니다.
      5. ActiveMQArtemis 인스턴스 이름을 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

  2. CR의 spec 섹션에서 사용자 및 역할을 정의하는 행을 추가합니다. 예를 들면 다음과 같습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemisSecurity
    metadata:
      name: ex-prop
    spec:
      loginModules:
        propertiesLoginModules:
          - name: "prop-module"
            users:
              - name: "sam"
                password: "samspassword"
                roles:
                  - "sender"
              - name: "rob"
                password: "robspassword"
                roles:
                  - "receiver"
      securityDomains:
        brokerDomain:
          name: "activemq"
          loginModules:
            - name: "prop-module"
              flag: "sufficient"
      securitySettings:
        broker:
          - match: "#"
            permissions:
              - operationType: "send"
                roles:
                  - "sender"
              - operationType: "createAddress"
                roles:
                  - "sender"
              - operationType: "createDurableQueue"
                roles:
                  - "sender"
              - operationType: "consume"
                roles:
                  - "receiver"
                  ...
    참고

    이전 예제의 요소에 값을 항상 지정합니다. 예를 들어 securityDomains.brokerDomain 또는 역할의 값에 대한 값을 지정하지 않으면 결과 구성에 예기치 않은 결과가 발생할 수 있습니다.

    이전 구성은 다음 두 사용자를 정의합니다.

    • sender 라는 역할이 있는 sam 사용자를 정의하는 prop-module 이라는 propertiesLoginModule 입니다.
    • receiver 라는 역할이 있는 사용자를 정의하는 prop-module 이라는 propertiesLoginModule 입니다.

    이러한 역할의 속성은 securityDomains 섹션의 brokerDomainbroker 섹션에 정의되어 있습니다. 예를 들어, send 역할은 해당 역할의 사용자가 모든 주소에 대해 Cryostat 큐를 만들 수 있도록 정의되었습니다. 기본적으로 구성은 현재 네임스페이스에 CR에서 정의한 배포된 모든 브로커에 적용됩니다. 구성을 특정 브로커 배포로 제한하려면 8.1.3절. “보안 사용자 정의 리소스 구성 참조” 에 설명된 applyToCrNames 옵션을 사용합니다.

    참고

    metadata 섹션에는 namespace 속성을 포함하고 OpenShift Container Platform 웹 콘솔을 사용하여 CR 인스턴스를 생성하는 경우에만 값을 지정해야 합니다. 지정해야 하는 값은 브로커 배포를 위한 OpenShift 프로젝트의 이름입니다.

  3. CR 인스턴스를 배포합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 위해 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR 인스턴스를 생성합니다.

        $ oc create -f <path/to/security_custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 구성을 완료하면 생성 을 클릭합니다.
4.3.2.2. 시크릿에 사용자 암호 저장

4.3.2.1절. “보안 사용자 정의 리소스(CR)를 사용하여 기본 JAAS 로그인 모듈 구성” 절차에서 사용자 암호는 ActiveMQArtemisSecurity CR의 일반 텍스트로 저장됩니다. CR에서 암호를 일반 텍스트에 저장하지 않으려면 CR에서 암호를 제외하고 시크릿에 저장할 수 있습니다. CR을 적용하면 Operator는 시크릿에서 각 사용자의 암호를 검색하고 브로커 Pod의 artemis-users.properties 파일에 삽입합니다.

프로세스

  1. oc create secret 명령을 사용하여 시크릿을 생성하고 각 사용자의 이름과 암호를 추가합니다. 시크릿 이름은 security-properties- module name 의 이름 지정 규칙을 따라야 합니다. 여기서 모듈 이름은 CR에 구성된 로그인 모듈의 이름입니다. 예를 들면 다음과 같습니다.

    oc create secret generic security-properties-prop-module \
      --from-literal=sam=samspassword \
      --from-literal=rob=robspassword
  2. CR의 spec 섹션에서 역할 정보와 함께 시크릿에 지정한 사용자 이름을 추가하지만 각 사용자의 암호를 포함하지 마십시오. 예를 들면 다음과 같습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemisSecurity
    metadata:
      name: ex-prop
    spec:
      loginModules:
        propertiesLoginModules:
          - name: "prop-module"
            users:
              - name: "sam"
                roles:
                  - "sender"
              - name: "rob"
                roles:
                  - "receiver"
      securityDomains:
        brokerDomain:
          name: "activemq"
          loginModules:
            - name: "prop-module"
              flag: "sufficient"
      securitySettings:
        broker:
          - match: "#"
            permissions:
              - operationType: "send"
                roles:
                  - "sender"
              - operationType: "createAddress"
                roles:
                  - "sender"
              - operationType: "createDurableQueue"
                roles:
                  - "sender"
              - operationType: "consume"
                roles:
                  - "receiver"
                  ...
  3. CR 인스턴스를 배포합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 위해 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR 인스턴스를 생성합니다.

        $ oc create -f <path/to/address_custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 구성을 완료하면 생성 을 클릭합니다.

추가 리소스

OpenShift Container Platform의 보안에 대한 자세한 내용은 OpenShift Container Platform 설명서의 Pod에 중요한 데이터 제공을 참조하십시오.

4.4. 타사 JAR 파일 추가

런타임 시 AMQ Broker에서 타사 JAR 파일을 사용할 수 있습니다. 예를 들어 브로커가 JDBC 데이터베이스에 메시지를 저장하도록 하려면 데이터베이스에 필요한 타사 JAR 파일을 로드하도록 브로커를 구성할 수 있습니다.

각 브로커 Pod의 마운트된 볼륨에서 타사 JAR 파일을 사용할 수 있도록 Operator를 구성하고 JAR 파일의 볼륨 경로를 브로커의 Java classpath에 추가해야 합니다.

JAR 파일이 크기가 1MB 미만인 경우 JAR 파일을 시크릿 또는 configmap에 추가하고 각 브로커 Pod에 JAR 파일을 마운트하도록 Operator를 구성할 수 있습니다. JAR 파일이 보안 및 configmaps에 대한 1MB 제한보다 크면 각 브로커 Pod에 공유 볼륨을 마운트하고 JAR 파일을 해당 볼륨에 다운로드하도록 Operator를 구성할 수 있습니다.

4.4.1. 시크릿 또는 구성 맵을 사용하여 브로커 Pod에 JAR 파일 마운트

JAR 파일이 1MB 미만이면 시크릿 또는 구성 맵을 사용하여 각 브로커 Pod에 타사 JAR 파일을 마운트할 수 있습니다. 또한 런타임 시 마운트된 위치에서 JAR 파일을 로드하도록 브로커의 Java classpath도 수정해야 합니다.

다음 절차에서는 시크릿을 사용하여 JAR 파일을 마운트한다고 가정합니다.

프로세스

  1. oc create secret 명령을 사용하여 추가하려는 타사 JAR 파일이 포함된 시크릿을 생성합니다. 예를 들면 다음과 같습니다.

    oc create secret generic log4j-template --from-file=log4j-layout-template-json-2.22.1.jar

    시크릿 생성 방법에 대한 자세한 내용은 Kubernetes 문서의 시크릿을 참조하십시오. https://kubernetes.io/docs/concepts/configuration/secret/

  2. 브로커 배포에 대한 CR을 편집하고 각 브로커 Pod에 타사 JAR 파일이 포함된 시크릿을 마운트하도록 Operator를 구성합니다. 예를 들어 다음 구성은 log4j-template 이라는 시크릿을 마운트합니다.

    deploymentPlan:
      ...
      extraMounts:
        secrets:
        - "log4j-template"
      ...

    JAR 파일은 각 브로커 Pod의 /amq/extra/secrets/시크릿 이름 디렉터리에 마운트됩니다. 예를 들어 /amq/extra/secrets/postgresql-driver/log4j-template.jar.

  3. ARTEMIS_EXTRA_LIBS 환경 변수를 생성하여 브로커의 Java 클래스 경로를 확장하여 브로커가 각 Pod의 마운트된 디렉터리에서 JAR 파일을 로드합니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      env:
      - name: ARTEMIS_EXTRA_LIBS
        value: /amq/extra/secrets/log4j-template
  4. CR을 저장합니다.

4.4.2. 각 브로커 Pod의 볼륨에 JAR 파일 다운로드

JAR 파일이 1MB보다 크면 시크릿 또는 구성 맵을 사용하여 각 브로커 Pod에 JAR 파일을 마운트할 수 없습니다. 대신 JAR 파일을 각 브로커 Pod에 Operator가 마운트하는 영구 공유 볼륨으로 다운로드하도록 Operator를 구성할 수 있습니다.

사전 요구 사항

각 브로커 Pod에 마운트할 수 있는 영구 공유 볼륨을 사용할 수 있습니다.

프로세스

  1. 브로커 배포에 사용할 ActiveMQArtemis CR을 편집합니다.
  2. 브로커 CR에서 extraVolumesextraVolumeMounts 속성을 사용하여 영구 볼륨을 추가하고 각 브로커 Pod에 볼륨을 마운트합니다. 예를 들면 다음과 같습니다.

    deploymentPlan:
      ...
      extraVolumes:
      - name: extra-volume
        persistentVolumeClaim:
          claimName: extra-jars
      extraVolumeMounts:
      - name: extra-volume
        mountPath: /opt/extra-lib
      ...
  3. resourceTemplates 특성을 사용하여 배포에 대한 StatefulSet 리소스를 사용자 지정합니다. 사용자 지정에서 init 컨테이너를 사용하여 각 Pod에서 생성한 추가 볼륨 볼륨을 마운트하고 JAR 파일을 볼륨으로 다운로드합니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      resourceTemplates:
      - selector:
          kind: StatefulSet
        patch:
          kind: StatefulSet
          spec:
            template:
              spec:
                initContainers:
                - name: mysql-jdbc-driver-init
                  volumeMounts:
                  - mountPath: /opt/extra-lib
                    name: extra-volume
                  image: curlimages/curl:8.6.0
                  command:
                  - /bin/sh
                  args:
                  - -c
                  - "if ! [ -f /opt/extra-lib/mysql-connector.jar ]; then curl https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.23/mysql-connector-java-8.0.23.jar --output /opt/extra-lib/mysql-connector.jar ; fi"

    이 예제에서 curl 이미지는 파일이 볼륨에 없는 경우 mysql-connector.jar 파일을 볼륨의 마운트된 경로인 /opt/extra-lib 에 다운로드하는 데 사용됩니다.

  4. ARTEMIS_EXTRA_LIBS 환경 변수를 생성하여 브로커가 공유 볼륨에서 JAR 파일을 로드하도록 브로커의 Java 클래스 경로를 확장합니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      env:
      - name: ARTEMIS_EXTRA_LIBS
        value: /opt/extra-lib
  5. CR을 저장합니다.

4.5. 메시지 지속성 구성

기본적으로 AMQ Broker는 메시지 데이터를 유지(즉, 저장)하지 않습니다. AMQ Broker에는 메시지 데이터를 유지하기 위한 두 가지 옵션이 있습니다.

  • 저널에 메시지 저장. 지속성을 활성화하는 경우 메시지를 유지하는 기본 방법입니다. 저널 기반 지속성은 파일 시스템의 저널에 메시지를 쓰는 고성능 옵션입니다.
  • 데이터베이스에 메시지 저장. 이 옵션은 JDBC(Java Database Connectivity) 연결을 사용하여 선택한 데이터베이스에 메시지를 저장합니다.
참고

AMQ Broker에서 지원하는 데이터베이스 및 네트워크 파일 시스템에 대한 최신 정보는 Red Hat 고객 포털에서 Red Hat AMQ 7 지원 구성 을 참조하십시오.

4.5.1. 저널 기반 지속성 구성

지속성을 활성화하면 기본적으로 저널 파일에 메시지가 유지됩니다.

프로세스

  1. 브로커 배포에 대한 ActiveMQArtemis CR(사용자 정의 리소스)을 편집합니다.
  2. persistenceEnabled 특성을 true 로 설정합니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      deploymentPlan:
        persistenceEnabled: true
      ...
  3. CR을 저장합니다.

4.5.2. 데이터베이스 지속성 구성

JDBC(Java Database Connectivity) 연결을 사용하여 데이터베이스에서 메시지를 유지하도록 AMQ Broker를 구성할 수 있습니다.

데이터베이스에서 메시지 데이터를 저장하면 브로커는 JDBC(Java Database Connectivity) 연결을 사용하여 메시지 및 바인딩 데이터를 데이터베이스 테이블에 저장합니다. 테이블의 데이터는 AMQ Broker 저널 인코딩을 사용하여 인코딩됩니다. 지원되는 데이터베이스에 대한 자세한 내용은 Red Hat Customer Portal의 Red Hat AMQ 7 지원 구성 을 참조하십시오.

중요

관리자는 조직의 광범위한 IT 인프라의 요구 사항에 따라 메시지 데이터를 데이터베이스에 저장하도록 선택할 수 있습니다. 그러나 데이터베이스를 사용하면 메시징 시스템의 성능에 부정적인 영향을 미칠 수 있습니다. 특히 JDBC를 통해 데이터베이스 테이블에 메시징 데이터를 작성하면 브로커에 상당한 성능 오버헤드가 발생합니다.

사전 요구 사항

  • AMQ Broker와 함께 사용할 전용 데이터베이스입니다.
  • 필요한 JDBC 드라이버 JAR 파일은 런타임 시 브로커에서 사용할 수 있습니다. 런타임 시 브로커에서 JAR 파일을 사용할 수 있도록 하는 방법에 대한 자세한 내용은 4.4절. “타사 JAR 파일 추가” 을 참조하십시오.
  • 배포에는 단일 브로커 인스턴스가 있습니다. 배포에 단일 브로커 인스턴스가 있는지 확인하려면 deployment.size 속성이 ActiveMQArtemis CR(사용자 정의 리소스)에 없는지 확인합니다. CR에서 deployment.size 속성이 생략되면 단일 브로커 인스턴스가 배포됩니다.

프로세스

  1. 브로커 배포에 대한 ActiveMQArtemis CR(사용자 정의 리소스)을 편집합니다.
  2. brokerProperties 속성을 사용하여 JDBC 데이터베이스 지속성을 활성화합니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      brokerProperties:
      - storeConfiguration=DATABASE
      - storeConfiguration.jdbcDriverClassName=<class name>
      - storeConfiguration.jdbcConnectionUrl=jdbc:<URL>
      - HAPolicyConfiguration=SHARED_STORE_PRIMARY
      ...
    storeConfiguration
    JDBC 데이터베이스에 메시지를 유지하려면 DATABASE 값을 지정합니다.
    storeConfiguration.jdbcDriverClassName

    JDBC 데이터베이스 드라이버의 정규화된 클래스 이름입니다. 예를 들면 org.postgresql.Driver 입니다.

    지원되는 데이터베이스에 대한 자세한 내용은 Red Hat Customer Portal의 Red Hat AMQ 7 지원 구성 을 참조하십시오.

    storeConfiguration.jdbcConnectionUrl

    데이터베이스 이름 및 모든 구성 매개변수를 포함하여 데이터베이스 서버의 전체 JDBC 연결 URL입니다. 예를 들면 다음과 같습니다.

    JDBC:postgresql://postgresql-service.default.svc.cluster.local:5432/postgres?user=postgres&password=postgres

    이 예에서 데이터베이스 이름은 postgres 입니다.

    HAPolicyConfiguration
    SHARED_STORE_ PRI Cryostat로 설정하여 브로커가 JDBC 리스 잠금을 사용하여 데이터베이스 테이블을 여러 브로커의 동시 액세스로부터 보호합니다. 두 번째 브로커 인스턴스가 의도치 않게 배포되는 경우 리스 잠금을 통해 두 번째 브로커가 데이터베이스에 기록되지 않습니다.
  3. (선택 사항) 필요한 경우 다음 속성의 기본값을 변경합니다.

    storeConfiguration.jdbcNetworkTimeout
    JDBC 네트워크 연결 제한 시간(밀리초)입니다. 기본값은 20000밀리초입니다.
    storeConfiguration.jdbcLockRenewPeriod
    현재 JDBC 잠금에 대한 갱신 기간의 길이(밀리초)입니다. 이 시간이 지나면 브로커는 잠금을 갱신할 수 있습니다. storeConfiguration.jdbcLockExpiration 값보다 여러 번 작은 값을 설정하여 브로커에게 리스를 연장할 수 있는 충분한 시간을 제공하고 브로커에게 연결 문제 발생 시 잠금을 갱신할 수 있는 시간을 제공합니다. 기본값은 2000밀리초입니다.
    storeConfiguration.jdbcLockExpiration
    storeConfiguration.jdbcLockRenewPeriod 의 값이 경과한 경우에도 현재 JDBC 잠금이 보유(즉, 획득 또는 갱신됨)로 간주되는 시간(밀리초)입니다. 브로커는 storeConfiguration.jdbcLockRenewPeriod 의 값에 따라 소유한 잠금을 주기적으로 갱신하려고 합니다. 예를 들어 연결 문제로 인해 브로커가 잠금을 갱신하지 못하면 브로커는 잠금을 성공적으로 획득하거나 갱신한 후 storeConfiguration.jdbcLockExpiration 의 값이 전달될 때까지 잠금을 갱신하려고 합니다. 위에서 설명한 갱신 동작의 예외는 다른 브로커가 잠금을 취득하는 경우입니다. 이는 DBMS(데이터베이스 관리 시스템)와 브로커 간에 시간 불일치가 있거나 가비지 수집에 대한 일시 중지가 긴 경우 발생할 수 있습니다. 이 경우 원래 잠금을 보유한 브로커는 잠금을 손실하고 갱신하려고 시도하지 않습니다. 만료 후 현재 소유하고 있는 브로커에 의해 JDBC 잠금이 갱신되지 않은 경우 다른 브로커는 JDBC 잠금을 설정할 수 있습니다. 기본값은 20000밀리초입니다.
    storeConfiguration.jdbcJournalSyncPeriod
    브로커 저널이 JDBC와 동기화되는 기간(밀리초)입니다. 기본값은 5밀리초입니다.
    storeConfiguration.jdbcMaxPageSizeBytes
    AMQ Broker가 JDBC 데이터베이스에 메시지를 저장할 때 각 페이지 파일의 최대 크기(바이트)입니다. 기본값은 102400이며, 이는 100KB입니다. 지정한 값은 "K" "MB" 및 "GB"와 같은 바이트 표기법도 지원합니다.
  4. CR을 저장합니다.

4.6. 브로커 스토리지 요구 사항 구성

Operator 기반 브로커 배포에서 영구 스토리지를 사용하려면 배포를 생성하는 데 사용되는 CR(사용자 정의 리소스) 인스턴스에서 persistenceEnabledtrue 로 설정합니다. OpenShift 클러스터에 컨테이너 네이티브 스토리지가 없는 경우 PV(영구 볼륨)를 수동으로 프로비저닝하고 PVC(영구 볼륨 클레임)를 사용하여 Operator에서 요청할 수 있는지 확인해야 합니다. 예를 들어 영구 스토리지가 있는 두 브로커의 클러스터를 생성하려면 두 개의 PV를 사용할 수 있어야 합니다.

중요

OpenShift Container Platform에서 PV를 수동으로 프로비저닝하는 경우 각 PV의 회수 정책을 Retain 으로 설정해야 합니다. PV의 회수 정책이 Retain 으로 설정되지 않고 Operator가 PV를 클레임하는 데 사용된 PVC가 삭제되면 PV도 삭제됩니다. PV를 삭제하면 볼륨에서 데이터가 손실됩니다. 자세한 내용은 회수 정책 설정에 대한 자세한 내용은 OpenShift Container Platform 설명서의 영구 스토리지 이해 를 참조하십시오.

기본적으로 PVC는 클러스터에 구성된 기본 스토리지 클래스에서 각 브로커의 2GiB 스토리지를 가져옵니다. PVC에서 요청된 기본 크기 및 스토리지 클래스를 재정의할 수 있지만 CR을 처음 배포하기 전에 CR에 새 값을 구성하면 됩니다.

4.6.1. 브로커 스토리지 크기 및 스토리지 클래스 구성

다음 절차에서는 브로커 배포에 대해 각 브로커에 필요한 영구 볼륨 클레임(PVC)의 크기 및 스토리지 클래스를 지정하도록 브로커 배포에 대한 CR(사용자 정의 리소스) 인스턴스를 구성하는 방법을 보여줍니다.

참고

AMQ Broker를 배포한 후 CR의 스토리지 구성을 변경하면 업데이트된 구성이 기존 Pod에 다시 적용되지 않습니다. 그러나 업데이트된 구성은 배포를 확장하는 경우 생성된 새 Pod에 적용됩니다.

사전 요구 사항

  • CR 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 숙지해야 합니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
  • PV(영구 볼륨)가 이미 프로비저닝되어 있고 Operator에서 요청할 수 있도록 설정해야 합니다. 예를 들어 영구 스토리지가 있는 두 브로커의 클러스터를 생성하려면 두 개의 PV를 사용할 수 있어야 합니다.

    영구 스토리지 프로비저닝에 대한 자세한 내용은 OpenShift Container Platform 설명서의 영구 스토리지 이해 를 참조하십시오.

프로세스

  1. 브로커 배포에 대한 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 배포를 생성하는 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. 다운로드 및 추출한 Operator 설치 아카이브의 deploy/crs 디렉터리에 포함된 broker_activemqartemis_cr.yaml 이라는 샘플 CR 파일을 엽니다.
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 배포를 생성하는 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. Create ActiveMQArtemis 를 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

    기본 브로커 배포의 경우 아래 표시된 구성과 유사할 수 있습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
    spec:
      deploymentPlan:
        size: 1
        image: placeholder
        requireLogin: false
        persistenceEnabled: true
        journalType: nio
        messageMigration: true

    broker_activemqartemis_cr.yaml 샘플 CR 파일에서 image 속성이 자리 표시자 의 기본값으로 설정되어 있는지 확인합니다. 이 값은 기본적으로 image 속성이 배포에 사용할 브로커 컨테이너 이미지를 지정하지 않음을 나타냅니다. Operator에서 사용할 적절한 브로커 컨테이너 이미지를 결정하는 방법을 알아보려면 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법” 를 참조하십시오.

  2. 브로커 스토리지 크기를 지정하려면 CR의 deploymentPlan 섹션에서 storage 섹션을 추가합니다. size 속성을 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.

    spec:
      deploymentPlan:
        size: 1
        image: placeholder
        requireLogin: false
        persistenceEnabled: true
        journalType: nio
        messageMigration: true
        storage:
          size: 4Gi
    storage.size
    각 브로커 Pod에 영구 스토리지에 필요한 PVC(영구 볼륨 클레임)의 크기(바이트)입니다. 이 속성은 persistenceEnabledtrue 로 설정된 경우에만 적용됩니다. 지정한 값에 바이트 표기법(예: K, M, G) 또는 바이너리 동등한 바이너리(Ki, Mi, Gi)를 사용하는 단위가 포함되어야 합니다.
  3. 각 브로커 Pod에 영구 스토리지에 필요한 스토리지 클래스를 지정하려면 스토리지 섹션에 storageClassName 속성을 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.

    spec:
      deploymentPlan:
        size: 1
        image: placeholder
        requireLogin: false
        persistenceEnabled: true
        journalType: nio
        messageMigration: true
        storage:
          size: 4Gi
          storageClassName: gp3
    storage.storageClassName

    PVC(영구 볼륨 클레임)에서 요청할 스토리지 클래스의 이름입니다. 스토리지 클래스는 관리자가 사용 가능한 스토리지를 설명하고 분류할 수 있는 방법을 제공합니다. 예를 들어 다른 스토리지 클래스는 특정 서비스 수준, 백업 정책 등에 매핑될 수 있습니다.

    스토리지 클래스를 지정하지 않으면 PVC에 의해 클러스터에 구성된 기본 스토리지 클래스가 있는 영구 볼륨이 클레임됩니다.

    참고

    스토리지 클래스를 지정하면 볼륨의 스토리지 클래스가 지정된 스토리지 클래스와 일치하는 경우에만 PVC에서 영구 볼륨을 클레임합니다.

  4. CR 인스턴스를 배포합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 생성하는 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR 인스턴스를 생성합니다.

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 구성을 완료하면 생성 을 클릭합니다.

4.7. Operator 기반 브로커 배포에 대한 리소스 제한 및 요청 구성

Operator 기반 브로커 배포를 생성할 때 배포의 브로커 Pod는 OpenShift 클러스터의 노드의 StatefulSet에서 실행됩니다. 배포에 대해 사용자 정의 리소스(CR) 인스턴스를 구성하여 각 Pod에서 실행되는 브로커 컨테이너에서 사용하는 host-node 컴퓨팅 리소스를 지정할 수 있습니다. CPU 및 메모리(RAM)에 대한 제한 및 요청 값을 지정하면 브로커 Pod의 안정성을 보장할 수 있습니다.

중요
  • CR을 처음 배포하기 전에 브로커 배포의 CR 인스턴스에 제한 및 요청에 대한 구성을 추가해야 합니다. 이미 실행 중인 브로커 배포에 구성을 추가할 수 없습니다.
  • Red Hat은 특정 메시징 시스템 사용 사례와 구현한 결과 아키텍처를 기반으로 하므로 제한 및 요청에 대한 값을 권장할 수 없습니다. 그러나 프로덕션 환경에 맞게 구성하기 전에 개발 환경에서 이러한 값을 테스트하고 조정하는 것이 좋습니다.
  • Operator는 각 브로커 Pod를 시작할 때 Init Container 라는 컨테이너 유형을 실행합니다. 각 브로커 컨테이너에 대해 구성하는 모든 리소스 제한 및 요청은 각 Init Container에도 적용됩니다. 브로커 배포에서 Init Container 사용에 대한 자세한 내용은 4.1절. “Operator에서 브로커 구성을 생성하는 방법” 을 참조하십시오.

다음 제한 및 요청 값을 지정할 수 있습니다.

CPU 제한
Pod에서 실행되는 각 브로커 컨테이너의 경우 이 값은 컨테이너에서 사용할 수 있는 최대 호스트 노드 CPU 양입니다. 브로커 컨테이너가 지정된 CPU 제한을 초과하려고 하면 OpenShift에서 컨테이너를 제한합니다. 이렇게 하면 노드에서 실행되는 Pod 수에 관계없이 컨테이너의 성능이 일관되게 유지됩니다.
메모리 제한
Pod에서 실행되는 각 브로커 컨테이너의 경우 이 값은 컨테이너에서 사용할 수 있는 최대 호스트 노드 메모리 양입니다. 브로커 컨테이너가 지정된 메모리 제한을 초과하려고 하면 OpenShift에서 컨테이너를 종료합니다. 브로커 Pod가 다시 시작됩니다.
CPU 요청

Pod에서 실행되는 각 브로커 컨테이너의 경우 이 값은 컨테이너가 요청하는 호스트 노드 CPU의 양입니다. OpenShift 스케줄러는 포드 배치 중에 CPU 요청 값을 고려하여 충분한 컴퓨팅 리소스가 있는 노드에 브로커 Pod를 바인딩합니다.

CPU 요청 값은 브로커 컨테이너를 실행하는 데 필요한 최소 CPU 양입니다. 그러나 노드에 CPU에 대한 경합이 없는 경우 컨테이너에서 사용 가능한 모든 CPU를 사용할 수 있습니다. CPU 제한을 지정한 경우 컨테이너가 해당 CPU 사용량을 초과할 수 없습니다. 노드에 CPU 경합이 있는 경우 CPU 요청 값은 OpenShift가 모든 컨테이너의 CPU 사용량을 평가할 수 있는 방법을 제공합니다.

메모리 요청

Pod에서 실행되는 각 브로커 컨테이너의 경우 이 값은 컨테이너에서 요청하는 호스트 노드 메모리 양입니다. OpenShift 스케줄러는 포드 배치 중에 메모리 요청 값을 고려하여 충분한 컴퓨팅 리소스가 있는 노드에 브로커 Pod를 바인딩합니다.

메모리 요청 값은 브로커 컨테이너를 실행하는 데 필요한 최소 메모리 양입니다. 그러나 컨테이너는 가능한 한 많은 사용 가능한 메모리를 사용할 수 있습니다. 메모리 제한을 지정한 경우 브로커 컨테이너는 해당 메모리 사용량을 초과할 수 없습니다.

CPU는 밀리코어라는 단위로 측정됩니다. OpenShift 클러스터의 각 노드는 운영 체제를 검사하여 노드의 CPU 코어 수를 확인합니다. 그런 다음 노드는 해당 값을 1000으로 곱하여 총 용량을 표현합니다. 예를 들어 노드에 두 개의 코어가 있는 경우 노드의 CPU 용량은 2000m 로 표시됩니다. 따라서 단일 코어의 1/10을 사용하려면 100m 값을 지정합니다.

메모리는 바이트 단위로 측정됩니다. 바이트 표기법 (E, P, T, G, M, K) 또는 바이너리 동등한 값 (Ei, Pi, Ti, Gi, Mi, Ki)을 사용하여 값을 지정할 수 있습니다. 지정한 값에 단위가 포함되어야 합니다.

4.7.1. 브로커 리소스 제한 및 요청 구성

다음 예는 배포의 Pod에서 실행되는 각 브로커 컨테이너의 CPU 및 메모리에 대한 제한 및 요청을 설정하기 위해 브로커 배포에 대한 기본 CR(사용자 정의 리소스) 인스턴스를 구성하는 방법을 보여줍니다.

중요
  • CR을 처음 배포하기 전에 브로커 배포의 CR 인스턴스에 제한 및 요청에 대한 구성을 추가해야 합니다. 이미 실행 중인 브로커 배포에 구성을 추가할 수 없습니다.
  • Red Hat은 특정 메시징 시스템 사용 사례와 구현한 결과 아키텍처를 기반으로 하므로 제한 및 요청에 대한 값을 권장할 수 없습니다. 그러나 프로덕션 환경에 맞게 구성하기 전에 개발 환경에서 이러한 값을 테스트하고 조정하는 것이 좋습니다.

사전 요구 사항

프로세스

  1. 브로커 배포에 대한 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 배포를 생성하는 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. 다운로드 및 추출한 Operator 설치 아카이브의 deploy/crs 디렉터리에 포함된 broker_activemqartemis_cr.yaml 이라는 샘플 CR 파일을 엽니다.
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 배포를 생성하는 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. Create ActiveMQArtemis 를 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

    기본 브로커 배포의 경우 아래 표시된 구성과 유사할 수 있습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
    spec:
      deploymentPlan:
        size: 1
        image: placeholder
        requireLogin: false
        persistenceEnabled: true
        journalType: nio
        messageMigration: true

    broker_activemqartemis_cr.yaml 샘플 CR 파일에서 image 속성이 자리 표시자 의 기본값으로 설정되어 있는지 확인합니다. 이 값은 기본적으로 image 속성이 배포에 사용할 브로커 컨테이너 이미지를 지정하지 않음을 나타냅니다. Operator에서 사용할 적절한 브로커 컨테이너 이미지를 결정하는 방법을 알아보려면 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법” 를 참조하십시오.

  2. CR의 deploymentPlan 섹션에서 resources 섹션을 추가합니다. 제한요청 하위 섹션을 추가합니다. 각 하위 섹션에 cpumemory 속성을 추가하고 값을 지정합니다. 예를 들면 다음과 같습니다.

    spec:
      deploymentPlan:
        size: 1
        image: placeholder
        requireLogin: false
        persistenceEnabled: true
        journalType: nio
        messageMigration: true
        resources:
          limits:
            cpu: "500m"
            memory: "1024M"
          requests:
            cpu: "250m"
            memory: "512M"
    limits.cpu
    배포에서 Pod에서 실행되는 각 브로커 컨테이너는 이 양의 호스트 노드 CPU 사용량을 초과할 수 없습니다.
    limits.memory
    배포에서 Pod에서 실행되는 각 브로커 컨테이너는 이 양의 호스트 노드 메모리 사용량을 초과할 수 없습니다.
    requests.cpu
    배포의 Pod에서 실행되는 각 브로커 컨테이너는 이 양의 host-node CPU를 요청합니다. 이 값은 브로커 컨테이너를 실행하는 데 필요한 최소 CPU 양입니다.
    requests.memory

    배포의 Pod에서 실행되는 각 브로커 컨테이너는 이 양의 호스트 노드 메모리를 요청합니다. 이 값은 브로커 컨테이너를 실행하는 데 필요한 최소 메모리 양입니다.

    참고

    리소스에 대한 제한을 지정하고 요청을 지정하지 않으면 브로커 컨테이너에서 해당 리소스에 대해 구성된 제한 값을 요청합니다. 예를 들어 다음 구성에서 브로커 컨테이너는 500m cpu 및 1024M 메모리의 구성된 제한 값을 요청합니다.

    spec:
      deploymentPlan:
        size: 3
        ...
        resources:
          limits:
            cpu: "500m"
            memory: "1024M"
    중요

    요청된 메모리 및 CPU의 정확한 양을 제어하고 배포에 여러 브로커가 있는 경우 각 브로커 컨테이너에 동일한 값이 요청되도록 요청을 설정하지 않고 제한을 설정합니다.

  3. CR 인스턴스를 배포합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 생성하는 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR 인스턴스를 생성합니다.

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 구성을 완료하면 생성 을 클릭합니다.

4.8. AMQ 관리 콘솔에 대한 액세스 활성화

Operator 기반 배포의 각 브로커 Pod는 포트 8161에서 AMQ 관리 콘솔의 자체 인스턴스를 호스팅합니다. 브로커 배포를 위해 CR(사용자 정의 리소스) 인스턴스에서 콘솔에 대한 액세스를 활성화할 수 있습니다. 콘솔에 대한 액세스를 활성화한 후 콘솔을 사용하여 웹 브라우저에서 브로커를 보고 관리할 수 있습니다.

프로세스

  1. 브로커 배포에 사용할 ActiveMQArtemis (CR) 인스턴스를 편집합니다.
  2. CR의 spec 섹션에서 console 속성을 추가합니다. console 섹션에서 expose 속성을 추가하고 값을 true 로 설정합니다.

    spec:
      ..
      console:
        expose: true

    콘솔을 노출하면 Operator가 배포의 각 브로커 Pod에 콘솔에 대한 전용 서비스와 Openshift 경로를 자동으로 생성합니다.

  3. Openshift 클러스터의 내부 라우팅 구성과 일치하도록 콘솔에 노출된 경로의 호스트 이름을 사용자 지정하려면 다음 중 하나 또는 둘 다를 수행할 수 있습니다.

    • ingressHost 특성을 사용하여 기본 호스트 이름을 콘솔 경로의 사용자 지정 호스트 이름으로 바꿉니다.
    • ingressDomain 특성을 사용하여 호스트 이름에 사용자 지정 도메인을 추가합니다. 사용자 정의 도메인은 CR 구성에 의해 노출되는 허용 경로와 같은 기타 모든 경로에도 적용됩니다.
    1. 콘솔 경로에 대해 특별히 사용자 정의 호스트 이름을 설정하려면 ingressHost 속성을 추가하고 호스트 문자열을 지정합니다. 예를 들면 다음과 같습니다.

      spec:
        ..
        console:
          expose: true
          ingressHost: my-console-production.my-subdomain.com
        ..
      참고

      ingressHost 값은 Openshift 클러스터에서 고유해야 합니다. 브로커 클러스터에 브로커 Pod가 여러 개 있는 경우 값에 $(BROKER_ORDINAL) 변수를 포함하여 ingressHost 값을 고유하게 만들 수 있습니다. Operator는 각 브로커 Pod에 대해 생성하는 경로에서 이 변수를 Pod에 할당된 StatefulSet의 ordinal 수로 바꿉니다. 예를 들어 my-console-$(BROKER_ORDINAL)-production.my-subdomain.com의 ingressHost 값은 두 번째 Pod의 my-console-1-production.my-subdomain.com 에 경로의 호스트 이름을 my-console-0-production.my-subdomain.com 으로 설정합니다.

      콘솔 경로에 대한 사용자 정의 호스트 이름 문자열에 다음 변수를 포함할 수 있습니다.

      표 4.3. 콘솔 경로에 대한 사용자 정의 호스트 이름 문자열의 변수
      이름설명

      $(CR_NAME)

      CR의 metadata.name 속성 값입니다.

      $(CR_NAMESPACE)

      사용자 정의 리소스의 네임스페이스입니다.

      $(BROKER_ORDINAL)

      StatefulSet에서 브로커 Pod에 할당한 서수입니다.

      $(ITEM_NAME)

      수락자의 이름입니다.

      $(RES_TYPE)

      리소스 유형입니다. 경로에는 rte 의 리소스 유형이 있습니다. 수신에는 리소스 유형의 ing 이 있습니다.

      $(INGRESS_DOMAIN)

      CR에 구성된 경우 spec.ingressDomain 속성의 값입니다.

    2. 경로의 호스트 이름에 사용자 정의 도메인을 추가하려면 spec.ingressDomain 속성을 추가하고 사용자 정의 문자열을 지정합니다. 예를 들면 다음과 같습니다.

      spec:
        ...
        ingressDomain: my.domain.com
  4. 조직의 네트워크 정책에서 경로 대신 Ingress를 사용하여 콘솔을 노출해야 하는 경우 다음 단계를 완료합니다.

    1. exposeMode 속성을 추가하고 값을 ingress 로 설정합니다.

      spec:
        ..
        console:
          expose: true
          exposeMode: ingress
        ..
    2. Openshift 클러스터의 내부 라우팅 구성과 일치하도록 콘솔에 노출된 인그레스의 호스트 이름을 사용자 지정하려면 다음 중 하나 또는 둘 다를 수행할 수 있습니다.

      • ingressHost 특성을 사용하여 기본 호스트 이름을 사용자 지정 호스트 이름으로 교체합니다.
      • ingressDomain 특성을 사용하여 호스트 이름에 사용자 지정 도메인을 추가합니다. 사용자 정의 도메인은 CR 구성에 의해 노출되는 어셉터의 수신과 같은 기타 모든 수신에도 적용됩니다.

        1. 콘솔용으로 생성된 Ingress에 대해 특별히 사용자 정의 호스트 이름을 설정하려면 ingressHost 속성을 추가하고 호스트 문자열을 지정합니다. 예를 들면 다음과 같습니다.

          spec:
            ..
            console:
              expose: true
              exposeMode: ingress
              expose: true
              exposeMode: ingress
              ingressHost: my-console-production.my-subdomain.com
            ...

          동일한 변수를 포함하여 이 절차의 앞부분에서 설명하는 경로 호스트로 수신 호스트를 사용자 지정할 수 있습니다.

        2. Ingress의 호스트 이름에 사용자 정의 도메인을 추가하려면 spec.ingressDomain 속성을 추가하고 사용자 지정 문자열을 지정합니다.

          spec:
            ...
            ingressDomain: my.domain.com

          콘솔의 경우 수신의 기본 호스트 이름은 < cr-name>-wconsj-<ordinal>-svc-ing-<namespace > 형식으로 되어 있습니다. 예를 들어 amqbroker 네임 스페이스에 production 이라는 CR이 있는 경우 mydomain.comingressDomain 값은 Pod 0에서 생성된 수신에 대해 production-wconsj-0-svc-svc-mynamespace.amqbroker.com 의 호스트 값을 제공합니다.

          spec.ingressDomain 속성에 대한 자세한 내용은 8.1절. “사용자 정의 리소스 구성 참조” 을 참조하십시오.

  5. OpenShift 클러스터 외부의 클라이언트에서 콘솔에 대한 보안 연결을 활성화하려면 다음 단계를 완료하십시오.

    1. sslEnabled 속성을 추가하고 값을 true 로 설정합니다.

      spec:
        ..
        console:
          expose: true
          exposeMode: ingress
          sslEnabled: true
        ..
    2. sslSecret 속성을 추가하고 콘솔을 보호할 인증서가 포함된 보안 이름을 지정합니다. 예를 들면 다음과 같습니다.

      spec:
        ..
        console:
          expose: true
          exposeMode: ingress
          sslEnabled: true
          sslSecret: console-tls-secret
        ..
    3. spec.env 속성을 사용하여 인증서를 갱신할 때마다 새 인증서를 자동으로 로드하도록 콘솔을 구성하는 환경 변수를 추가합니다. 예를 들면 다음과 같습니다.

      spec:
        ..
        env:
        - name: JAVA_ARGS_APPEND
          value: -Dwebconfig.bindings.artemis.sslAutoReload=true
        ..
  6. CR을 저장합니다.

추가 리소스

AMQ Management Console에 연결하는 방법에 대한 자세한 내용은 다음을 참조하십시오. 5장. Operator 기반 브로커 배포를 위한 AMQ 관리 콘솔에 연결

4.9. 브로커 컨테이너의 환경 변수 설정

브로커 배포의 CR(사용자 정의 리소스) 인스턴스에서 AMQ Broker 컨테이너에 전달되는 환경 변수를 설정할 수 있습니다.

예를 들어 TZ 와 같은 표준 환경 변수를 사용하여 시간대 또는 JDK_JAVA_OPTIONS 를 설정하여 시작 시 Java 시작자가 사용하는 명령줄 인수에 인수를 미리 추가할 수 있습니다. 또는 AMQ Broker의 사용자 지정 변수 JAVA_ARGS_APPEND 를 사용하여 Java 시작자가 사용하는 명령줄 인수에 사용자 지정 인수를 추가할 수 있습니다.

프로세스

  1. 브로커 배포의 CR(사용자 정의 리소스) 인스턴스를 편집합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 다음 명령을 실행합니다.

        oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 왼쪽 창에서 OperatorsInstalled Operator 를 클릭합니다.
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
      4. AMQ Broker 탭을 클릭합니다.
      5. ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 CR 인스턴스를 구성할 수 있는 YAML 편집기가 열립니다.

  2. CR의 spec 섹션에서 env 요소를 추가하고 AMQ Broker 컨테이너에 설정할 환경 변수를 추가합니다. 예를 들면 다음과 같습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
    spec:
      ...
      env:
      - name: TZ
        value: Europe/Vienna
      - name: JAVA_ARGS_APPEND
        value: --Hawtio.realm=console
      - name: JDK_JAVA_OPTIONS
        value: -XshowSettings:system
      ...

    이 예에서 CR 구성에는 다음 환경 변수가 포함됩니다.

    • TZ: AMQ Broker 컨테이너의 시간대를 설정합니다.
    • 인증을 위해 console 이라는 영역을 사용하도록 AMQ 관리 콘솔을 구성하도록 JAVA_ARGS_APPEND
    • JDK_JAVA_OPTIONS: Java Virtual Machine의 시스템 속성 설정을 표시하는 Java -XshowSettings:system 매개변수를 설정합니다.

      참고

      JDK_JAVA_OPTIONS 환경 변수를 사용하여 구성된 값은 Java 시작자가 사용하는 명령줄 인수 앞에 추가됩니다. JAVA_ARGS_APPEND 환경 변수를 사용하여 구성된 값은 시작자가 사용하는 인수에 추가됩니다. 인수가 중복되면 가장 오른쪽 인수가 우선합니다.

  3. CR을 저장합니다.

    참고

    Red Hat은 AMQ_ 접두사가 있는 AMQ Broker 환경 변수를 변경하지 않고 POD_NAMESPACE 변수를 변경하려는 경우 주의해야 합니다.

추가 리소스

4.10. 브로커의 기본 메모리 제한 덮어쓰기

브로커에 설정된 기본 메모리 제한을 덮어쓸 수 있습니다. 기본적으로 브로커는 브로커의 Java Virtual Machine에서 사용할 수 있는 최대 메모리의 절반이 할당됩니다. 다음 절차에서는 브로커 배포에 대해 사용자 정의 리소스(CR) 인스턴스를 구성하여 기본 메모리 제한을 재정의하는 방법을 보여줍니다.

사전 요구 사항

프로세스

  1. 기본 브로커 배포를 생성하려면 CR(사용자 정의 리소스) 인스턴스 구성을 시작합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. 다운로드 및 추출한 Operator 설치 아카이브의 deploy/crs 디렉터리에 포함된 broker_activemqartemis_cr.yaml 이라는 샘플 CR 파일을 엽니다.
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. Create ActiveMQArtemis 를 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

        예를 들어 기본 브로커 배포의 CR은 다음과 유사할 수 있습니다.

        apiVersion: broker.amq.io/v1beta1
        kind: ActiveMQArtemis
        metadata:
          name: ex-aao
        spec:
          deploymentPlan:
            size: 1
            image: placeholder
            requireLogin: false
            persistenceEnabled: true
            journalType: nio
            messageMigration: true
  2. CR의 spec 섹션에 brokerProperties 섹션을 추가합니다. brokerProperties 섹션 내에서 globalMaxSize 속성을 추가하고 메모리 제한을 지정합니다. 예를 들면 다음과 같습니다.

    spec:
        ...
        brokerProperties:
        - globalMaxSize=500m
        ...

    globalMaxSize 속성의 기본 단위는 바이트입니다. 기본 단위를 변경하려면 m(MB의 경우) 접미사 또는 g(for GB)를 값에 추가합니다.

  3. CR에 변경 사항을 적용합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 위해 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR을 적용합니다.

        $ oc apply -f <path/to/broker_custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 편집을 완료하면 저장을 클릭합니다.
  4. (선택 사항) globalMaxSize 속성에 설정한 새 값이 브로커에 할당된 기본 메모리 제한을 재정의하는지 확인합니다.

    1. AMQ 관리 콘솔에 연결합니다. 자세한 내용은 5장. Operator 기반 브로커 배포를 위한 AMQ 관리 콘솔에 연결의 내용을 참조하십시오.
    2. 메뉴에서 Cryostat를 선택합니다.
    3. org.apache.activemq.artemis 를 선택합니다.
    4. 글로벌 검색 .
    5. 표시된 표에서 Global max 열의 값이 globalMaxSize 속성에 대해 구성한 값과 같은지 확인합니다.

4.11. 사용자 정의 Init Container 이미지 지정

4.1절. “Operator에서 브로커 구성을 생성하는 방법” 에 설명된 대로 AMQ Broker Operator는 기본 기본 제공 Init 컨테이너를 사용하여 브로커 구성을 생성합니다. 구성을 생성하기 위해 Init Container는 배포에 기본 CR(사용자 정의 리소스) 인스턴스를 사용합니다. 경우에 따라 사용자 지정 Init Container를 사용해야 할 수 있습니다. 예를 들어 브로커 설치 디렉터리에 런타임 종속성 .jar 파일을 추가로 포함하려면 다음을 수행합니다.

사용자 정의 Init Container 이미지를 빌드할 때 다음과 같은 중요한 지침을 따라야 합니다.

  • 사용자 정의 이미지에 대해 생성하는 빌드 스크립트(예: Docker Dockerfile 또는 Podman Containerfile)에서 FROM 명령은 최신 버전의 AMQ Broker Operator 내장 Init Container를 기본 이미지로 지정해야 합니다. 스크립트에서 다음 행을 포함합니다.

    FROM registry.redhat.io/amq7/amq-broker-init-rhel8:7.12
  • 사용자 지정 이미지에는 /amq/scripts 라는 디렉터리에 포함하는 post-config.sh 라는 스크립트가 포함되어야 합니다. post-config.sh 스크립트는 Operator가 생성하는 초기 구성을 수정하거나 추가할 수 있는 위치입니다. 사용자 정의 Init Container를 지정하면 Operator는 CR 인스턴스를 사용한 브로커 애플리케이션 컨테이너를 시작하기 전에 post-config.sh 스크립트를 실행합니다.
  • 4.1.2절. “브로커 Pod의 디렉터리 구조” 에 설명된 대로 Init Container에서 사용하는 설치 디렉터리의 경로는 CONFIG_INSTANCE_DIR 이라는 환경 변수에 정의됩니다. 설치 디렉토리(예: ${CONFIG_INSTANCE_DIR}/lib) 및 이 변수의 실제 값(예: /amq/init/config/lib)을 참조할 때 post-config.sh 스크립트에서 이 환경 변수 이름을 사용해야 합니다.
  • 사용자 지정 브로커 구성에 추가 리소스(예: .xml 또는 .jar 파일)를 포함하려면 사용자 지정 이미지에 포함되어 post-config.sh 스크립트에 액세스할 수 있는지 확인해야 합니다.

다음 절차에서는 사용자 정의 Init Container 이미지를 지정하는 방법을 설명합니다.

사전 요구 사항

프로세스

  1. 브로커 배포의 CR 인스턴스를 편집합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
      2. 배포에 사용할 CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
      2. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. 브로커 배포에 사용할 인스턴스를 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.

  2. CR의 deploymentPlan 섹션에서 initImage 속성을 추가하고 사용자 정의 Init Container 이미지의 URL로 값을 설정합니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
    spec:
      deploymentPlan:
        size: 1
        image: placeholder
        initImage: <custom_init_container_image_url>
        requireLogin: false
        persistenceEnabled: true
        journalType: nio
        messageMigration: true
    initImage

    컨테이너 레지스트리에서 사용할 수 있어야 하는 사용자 정의 Init Container 이미지의 전체 URL을 지정합니다.

    중요

    CR에 spec.deploymentPlan.initImage 속성에 지정된 사용자 지정 init 컨테이너 이미지가 있는 경우, 브로커 이미지의 자동 업그레이드를 방지하기 위해 spec.deploymentPlan.image 속성에 해당 브로커 컨테이너 이미지의 URL도 지정하는 것이 좋습니다. spec.deploymentPlan.image 속성에 특정 브로커 컨테이너 이미지의 URL을 지정하지 않으면 브로커 이미지를 자동으로 업그레이드할 수 있습니다. 브로커 이미지가 업그레이드되면 브로커 및 사용자 정의 init 컨테이너 이미지가 다르므로 브로커가 실행되지 않을 수 있습니다.

    사용자 지정 init 컨테이너가 있는 작업 중인 배포가 있는 경우 브로커 컨테이너 이미지의 추가 업그레이드를 방지하여 사용자 정의 init 컨테이너 이미지로 작동하지 않는 최신 브로커 이미지의 위험을 제거할 수 있습니다. 브로커 이미지로 업그레이드하지 않는 방법에 대한 자세한 내용은 6.6.2절. “이미지 URL을 사용하여 이미지 자동 업그레이드 제한” 을 참조하십시오.

  3. CR을 저장합니다.

추가 리소스

4.12. 클라이언트 연결을 위한 Operator 기반 브로커 배포 구성

4.12.1. 어셉터 구성

OpenShift 배포에서 브로커 Pod에 대한 클라이언트 연결을 활성화하려면 배포에 대한 허용자를 정의합니다. 승인자는 브로커 pod에서 연결을 허용하는 방법을 정의합니다. 브로커 배포에 사용되는 기본 CR(사용자 정의 리소스)에 허용자를 정의합니다. 어셉터를 생성할 때 수락자에서 활성화할 메시징 프로토콜과 이러한 프로토콜에 사용할 브로커 Pod의 포트와 같은 정보를 지정합니다.

프로세스

  1. 브로커 배포에 대한 ActiveMQArtemis CR(사용자 정의 리소스)을 편집합니다.
  2. acceptors 특성에 이름이 지정된 어셉터를 추가합니다. 프로토콜포트 속성을 추가합니다. 값을 설정하여 어셉터에서 사용할 메시징 프로토콜과 해당 프로토콜에 노출할 각 브로커 Pod의 포트를 지정합니다. 예를 들면 다음과 같습니다.

    spec:
      ..
      acceptors:
      - name: my-acceptor
        protocols: amqp
        port: 5672
      ..

    구성된 수락자는 포트 5672를 AMQP 클라이언트에 노출합니다. protocols 특성에 지정할 수 있는 전체 값 세트가 표에 표시됩니다.

    표 4.4. acceptor 프로토콜
    프로토콜현재의

    코어 프로토콜

    코어

    AMQP

    amqp

    OpenWire

    OpenWire

    MQTT

    mqtt

    STOMP

    stomp

    지원되는 모든 프로토콜

    all

    참고
    • 배포의 각 브로커 Pod에 대해 Operator는 포트 61616을 사용하는 기본 수락자도 생성합니다. 이 기본 수락자는 브로커 클러스터링에 필요하며 코어 프로토콜이 활성화되어 있습니다.
    • 기본적으로 AMQ Broker 관리 콘솔은 브로커 Pod에서 포트 8161을 사용합니다. 배포의 각 브로커 포드에는 콘솔에 대한 액세스를 제공하는 전용 서비스가 있습니다. 자세한 내용은 5장. Operator 기반 브로커 배포를 위한 AMQ 관리 콘솔에 연결의 내용을 참조하십시오.
  3. 동일한 수락자에서 다른 프로토콜을 사용하려면 protocols 속성을 수정합니다. 쉼표로 구분된 프로토콜 목록을 지정합니다. 예를 들면 다음과 같습니다.

    spec:
     ..
      acceptors:
      - name: my-acceptor
        protocols: amqp,openwire
        port: 5672
    ...

    구성된 수락자는 이제 포트 5672를 AMQP 및 OpenWire 클라이언트에 노출합니다.

  4. 허용자가 허용하는 동시 클라이언트 연결 수를 지정하려면 connectionsAllowed 속성을 추가하고 값을 설정합니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      acceptors:
      - name: my-acceptor
        protocols: amqp,openwire
        port: 5672
        connectionsAllowed: 5
      ...
  5. 기본적으로 수락자는 브로커 배포와 동일한 OpenShift 클러스터의 클라이언트에만 노출됩니다. OpenShift 외부의 클라이언트에 어셉터도 노출하려면 expose 속성과 sslEnabled 속성을 모두 true 로 설정합니다.

    spec:
      ...
      acceptors:
      - name: my-acceptor
        protocols: amqp,openwire
        port: 5672
        connectionsAllowed: 5
        expose: true
        sslEnabled: true
      ...

    수락자(또는 커넥터)에서 SSL(즉, Secure Sockets Layer) 보안을 활성화하면 다음과 같은 관련 구성을 추가할 수 있습니다.

    • OpenShift 클러스터에 인증 자격 증명을 저장하는 데 사용되는 시크릿 이름입니다. 수락자에서 SSL을 활성화할 때 시크릿이 필요합니다.
    • 보안 네트워크 통신에 사용할 TLS(Transport Layer Security) 프로토콜입니다. TLS는 더 안전한 SSL 버전입니다. enabledProtocols 속성에 TLS 프로토콜을 지정합니다.
    • 수락자가 브로커와 클라이언트 간의 상호 인증이라고도 하는 mTLS를 사용하는지 여부입니다. needClientAuth 속성 값을 true 로 설정하여 이 값을 지정합니다.

    이러한 작업에 대한 자세한 내용은 4.12.2절. “broker-client 연결 보안” 을 참조하십시오.

    OpenShift 외부의 클라이언트에 어셉터를 노출하면 Operator는 배포의 각 브로커 Pod에서 수락자를 위한 전용 서비스와 Openshift 경로를 자동으로 생성합니다.

  6. 각 pod에서 허용자가 Openshift 클러스터의 내부 라우팅 구성과 일치하도록 허용되는 경로의 호스트 이름을 사용자 지정하려면 다음 중 하나 또는 둘 다를 수행할 수 있습니다.

    • ingressHost 특성을 사용하여 기본 호스트 이름을 특정 수락자의 사용자 지정 호스트 이름으로 바꿉니다.
    • ingressDomain 특성을 사용하여 호스트 이름에 사용자 지정 도메인을 추가합니다. 사용자 정의 도메인은 CR 구성에 의해 노출되는 다른 어셉터 및 콘솔과 같은 다른 모든 경로에도 적용됩니다.

      1. acceptor 경로에 사용자 정의 호스트 이름을 설정하려면 ingressHost 속성을 추가하고 호스트 문자열을 지정합니다. 예를 들면 다음과 같습니다.

        spec:
          ...
          acceptors:
          - name: my-acceptor
            protocols: amqp,openwire
            port: 5672
            connectionsAllowed: 5
            expose: true
            ingressHost: my-acceptor-production.my-subdomain.com
          ...
        참고

        ingressHost 값은 Openshift 클러스터에서 고유해야 합니다. 브로커 클러스터에 브로커 Pod가 여러 개 있는 경우 값에 $(BROKER_ORDINAL) 변수를 포함하여 ingressHost 값을 고유하게 만들 수 있습니다. Operator는 각 브로커 Pod의 이 변수를 Pod에 할당된 StatefulSet의 서수로 바꿉니다. 예를 들어, my-acceptor-$(BROKER_ORDINAL)-production.my-subdomain.com의 ingressHost 값을 첫 번째 Pod의 my-acceptor-0-production.my-subdomain 으로 설정합니다. my-acceptor-1-production.my-subdomain은 두 번째 Pod의 my-acceptor-1-production.my-subdomain 으로 설정합니다.

        허용자 경로에 대한 사용자 정의 호스트 이름 문자열에 다음 변수를 포함할 수 있습니다.

        표 4.5. acceptor 경로에 대한 사용자 정의 호스트 이름 문자열의 변수
        이름설명

        $(CR_NAME)

        CR의 metadata.name 속성 값입니다.

        $(CR_NAMESPACE)

        사용자 정의 리소스의 네임스페이스입니다.

        $(BROKER_ORDINAL)

        StatefulSet에서 브로커 Pod에 할당한 서수입니다.

        $(ITEM_NAME)

        수락자의 이름입니다.

        $(RES_TYPE)

        리소스 유형입니다. 경로에는 rte 의 리소스 유형이 있습니다. 수신에는 리소스 유형의 ing 이 있습니다.

        $(INGRESS_DOMAIN)

        CR에 구성된 경우 spec.ingressDomain 속성의 값입니다.

      2. 경로의 호스트 이름에 사용자 정의 도메인을 추가하려면 spec.ingressDomain 속성을 추가하고 사용자 정의 문자열을 지정합니다. 예를 들면 다음과 같습니다.

        spec:
          ...
          ingressDomain: my.domain.com
  7. 조직의 네트워크 정책에서 경로 대신 Ingress를 사용하여 수락자를 노출해야 하는 경우 다음 단계를 완료합니다.

    1. exposeMode 속성을 추가하고 값을 ingress 로 설정합니다.

      spec:
        ...
        acceptors:
        - name: my-acceptor
          protocols: amqp,openwire
          port: 5672
          connectionsAllowed: 5
          expose: true
          exposeMode: ingress
        ...
    2. 허용자가 Openshift 클러스터의 내부 라우팅 구성과 일치하도록 노출된 Ingress의 호스트 이름을 사용자 지정하려면 다음 중 하나 또는 둘 다를 수행할 수 있습니다.

      • ingressHost 특성을 사용하여 기본 호스트 이름을 사용자 지정 호스트 이름으로 교체합니다.
      • ingressDomain 특성을 사용하여 호스트 이름에 사용자 지정 도메인을 추가합니다. 사용자 정의 도메인은 CR 구성에 의해 노출되는 다른 어셉터 및 콘솔의 Ingress와 같은 기타 모든 수신에도 적용됩니다.

        1. acceptor의 Ingress에 대한 사용자 정의 호스트 이름을 설정하려면 ingressHost 속성을 추가하고 호스트 문자열을 지정합니다. 예를 들면 다음과 같습니다.

          spec:
            ...
            acceptors:
            - name: my-acceptor
              protocols: amqp,openwire
              port: 5672
              connectionsAllowed: 5
              expose: true
              exposeMode: ingress
              ingressHost: my-acceptor-production.my-subdomain.com
            ...

          동일한 변수를 포함하여 이 절차의 앞부분에서 설명하는 경로 호스트로 수신 호스트를 사용자 지정할 수 있습니다.

        2. Ingress의 호스트 이름에 사용자 정의 도메인을 추가하려면 spec.ingressDomain 속성을 추가하고 사용자 지정 문자열을 지정합니다. 예를 들면 다음과 같습니다.

          spec:
            ...
            ingressDomain: my-subdomain.domain.com

          어셉터의 경우 수신의 기본 호스트 이름은 < cr-name>-<acceptor name>-<ordinal>-svc-ing-<namespace > 형식으로 되어 있습니다. 예를 들어 amqbroker 네임 스페이스에 production 이라는 CR이 있는 경우 mydomain.comingressDomain 값은 Pod 0에서 생성된 수신에 대해 production-wconsj-0-svc-svc-mynamespace.amqbroker.com 의 호스트 값을 제공합니다.

추가 리소스

4.12.2. broker-client 연결 보안

수락자 또는 커넥터(즉, sslEnabledtrue로 설정하여 보안)에서 보안을 활성화한 경우 브로커와 클라이언트 간의 인증서 기반 인증을 허용하도록 TLS(Transport Layer Security)를 구성해야 합니다. TLS는 더 안전한 SSL 버전입니다. 두 가지 기본 TLS 구성이 있습니다.

TLS
브로커만 인증서를 제공합니다. 인증서는 클라이언트가 브로커를 인증하는 데 사용됩니다. 가장 일반적인 구성입니다.
mTLS
브로커와 클라이언트 모두 인증서를 제공합니다. 이를 상호 인증 이라고 합니다.

다양한 방법을 사용하여 TLS 인증서를 생성할 수 있습니다.

브로커와 클라이언트가 동일한 Openshift 클러스터에서 실행되는 경우 Openshift를 사용하여 브로커의 서비스 제공 인증서를 생성할 수 있습니다.

브로커 및 클라이언트가 동일한 Openshift 클러스터에서 실행되지 않는 경우 인증서를 사용자 지정할 수 있는 방법을 사용하여 인증서를 생성해야 합니다. 이 섹션에서는 사용자 정의 인증서를 생성하는 데 사용할 수 있는 두 가지 방법에 대해 설명합니다.

  • cert-manager Operator for Openshift
  • Java Keytool 유틸리티.
4.12.2.1. Openshift 서비스 제공 인증서 사용

동일한 Openshift 클러스터에서 브로커와 클라이언트 간에 내부 연결을 보호하려면 acceptor 서비스에 주석을 추가하여 Openshift에서 서비스 제공 인증서를 생성하도록 요청할 수 있습니다. 생성된 인증서 및 키는 PEM 형식이며, 생성된 보안의 tls.crttls.key에 각각 저장됩니다.

참고

서비스 인증서를 발급하는 서비스 CA 인증서는 26개월 동안 유효하며 유효 기간이 13개월 미만으로 남아 있으면 자동으로 순환됩니다. 교체 후에도 이전 서비스 CA 구성은 만료될 때까지 계속 신뢰 상태가 유지됩니다. 그러면 만료되기 전에 유예 기간 동안 영향을 받는 모든 서비스의 주요 자료를 새로 고칠 수 있습니다. 서비스를 다시 시작하고 키 자료를 새로 고치는 이 유예 기간 동안 클러스터를 업그레이드하지 않으면 이전 서비스 CA가 만료된 후 실패하지 않도록 서비스를 직접 다시 시작해야 할 수도 있습니다.

프로세스

  1. 브로커 배포에 사용할 ActiveMQArtemis CR(사용자 정의 리소스)을 편집합니다.
  2. resourceTemplates 속성을 사용하여 수락자에 대해 생성된 서비스에 주석을 답니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      resourceTemplates:
        - selector:
            kind: Service
            name: amq-broker-myacceptor-0-svc
          annotations:
            service.beta.openshift.io/serving-cert-secret-name: myacceptor-ptls
      ...
    resourceTemplates.selector.kind
    사용자 지정이 적용되는 리소스 유형을 Service 로 지정합니다.
    resourceTemplates.selector.name

    주석을 적용할 서비스의 이름을 지정합니다. 수락 서비스의 이름 형식은 < CR name><acceptor name><ordinal>-svc, 여기서:

    • <CR name> name은 CR의 metadata.name 속성 값입니다.
    • <acceptor name>은 어셉터의 이름입니다. 이 예제에서는 어셉터 이름이 myacceptor 라고 가정합니다.
    • <ordinal>은 StatefulSet에서 브로커 Pod에 할당된 서수입니다.
    resourceTemplates.annotations

    service.beta.openshift.io/serving-cert-secret-name: < secret >의 주석을 지정합니다. 여기서 <secret>은 Openshift가 서비스에 생성하는 시크릿의 이름입니다.

    참고

    시크릿 이름은 acceptor 이름과 일치해야 하며 -ptls 접미사가 있어야 합니다. Operator에서 시크릿을 생성하기 전에 CR을 배포할 수 있도록 하려면 특정 접미사가 필요합니다.

  3. CR의 sslSecret' 속성에서 브로커 인증서가 포함된 보안을 지정합니다. 예를 들면 다음과 같습니다.

    spec:
      acceptors:
        - name: myacceptor
          protocols: CORE
          port: 61626
          sslEnabled: true
          sslSecret: myacceptor-ptls
  4. brokerProperties 속성에서 인증서가 Openshift에서 갱신될 때마다 새 인증서를 자동으로 로드하도록 브로커를 구성합니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      brokerProperties
      - "acceptorConfigurations.myacceptor.params.sslAutoReload=true"
       ...
  5. 서비스 제공 인증서의 공개 키를 각 클라이언트의 신뢰 저장소에 추가합니다.
  6. 브로커와 클라이언트 간에 mTLS 인증을 구성하려면 다음 단계를 완료합니다.

    1. 브로커가 신뢰할 각 클라이언트의 인증서가 포함된 신뢰 번들을 생성하고 시크릿(예:trusted-clients-bundle )에 신뢰 번들을 추가합니다.
    2. 브로커 CR에 구성된 승인자에서 needClientAuth 속성을 추가하고 클라이언트 인증을 요구하도록 true 로 설정합니다. 예를 들면 다음과 같습니다.

      spec:
        ..
        acceptors:
          - name: myacceptor
            protocols: all
            port: 62666
            sslEnabled: true
            sslSecret: myacceptor-ptls
            needClientAuth: true
        ..
    3. 각 수락자의 trustSecret 속성에서 클라이언트 인증서의 신뢰 번들이 포함된 보안을 지정합니다. 예를 들면 다음과 같습니다.

      spec:
        ..
        acceptors:
          - name: new-acceptor
            protocols: all
            port: 62666
            sslEnabled: true
            sslSecret: myacceptor-ptls
            needClientAuth: true
            trustSecret: trusted-clients-bundle
        ..
  7. CR을 저장합니다.
4.12.2.2. Openshift에 cert-manager Operator 사용

cert-manager Operator for OpenShift는 애플리케이션 인증서 라이프사이클 관리를 제공하는 클러스터 전체 서비스입니다. cert-manager는 다양한 인증 기관의 TLS 인증서 관리를 자동화합니다.

다음 예제 절차에서는 자체 서명된 인증서를 사용하여 TLS(Transport Layer Security)를 구성하는 방법을 설명합니다. 정책에 인식된 인증서 관리자가 서명한 인증서가 필요한 경우 OpenShift 용 cert-manager Operator를 사용하여 인증서를 요청할 수 있습니다.

사전 요구 사항

프로세스

  1. 자체 서명된 발행자를 정의하는 YAML 파일(예: self-signed-issuer.yaml )을 생성합니다. 발행자는 인증서 서명 요청을 준수하여 서명된 인증서를 생성할 수 있는 CA(인증 기관)를 나타내는 Openshift 리소스입니다.

    다음 예제 yaml은 자체 서명된 발급자를 생성하여 이를 사용하여 인증 기관(CA) 인증서를 생성할 수 있습니다. CA 인증서는 cert-manager Operator에서 관리할 수 있습니다.

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: root-issuer
    spec:
      selfSigned: {}
  2. 루트 CA 인증서를 정의하는 YAML 파일(예: root-ca.yaml )을 생성합니다.

    issuerRef.name 필드에서 사용자가 생성한 자체 서명된 발급자인 root-issuer 의 이름을 지정합니다. 예를 들면 다음과 같습니다.

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: root-ca
      namespace: cert-manager
    spec:
      isCA: true
      commonName: "amq.io.root"
      secretName: root-ca-secret
      subject:
        organizations:
        - "www.amq.io"
      issuerRef:
        name: root-issuer
        kind: ClusterIssuer

    인증서는 root-ca-secret 이라는 시크릿의 Privacy Enhanced mail (PEM) 형식으로 생성됩니다.

  3. 루트 CA에서 서명한 인증서 발행을 위한 CA 발행자를 정의하는 YAML 파일(예: root-ca-issuer.yaml )을 생성합니다. 예를 들면 다음과 같습니다.

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: root-ca-issuer
    spec:
      ca:
        secretName: root-ca-secret
  4. 브로커 인증서를 정의하는 YAML 파일(예: broker-cert.yaml )을 생성합니다.

    issuerRef.Name 필드에서 루트 CA에서 서명한 인증서를 발행하기 위해 생성한 발급자인 root-ca-issuer 의 이름을 지정합니다. 예를 들면 다음과 같습니다.

    apiVersion: cert-manager.io/v1
    kind: Certificate
    Metadata:
     name: broker-cert
    spec:
     isCA: false
     commonName: “amq.io”
     dnsNames:
       - “amq-broker-ss-0.amq-broker-svc-rte-default.cluster.local
       - “amq-broker-ss-1.amq-broker-svc-rte-default.cluster.local
     secretName: broker-cert-secret
     subject:
       organizations:
       - “www.amq.io”
     issuerRef:
       name: root-ca-issuer
       kind: ClusterIssuer
  5. YAML 파일에서 발행자 및 인증서에 대해 정의한 사용자 정의 리소스를 배포하여 해당 OpenShift 오브젝트를 생성합니다. 예를 들면 다음과 같습니다.

    $ oc create -f  self-signed-issuer.yaml
    $ oc create -f  root-ca.yaml
    $ oc create -f  root-ca-issuer.yaml
    $ oc create -f  broker-cert.yaml
  6. 브로커 배포를 위해 ActiveMQArtemis CR을 편집합니다.
  7. 보안하려는 각 수락자의 sslSecret 속성에 브로커 인증서가 포함된 보안을 지정합니다. 예를 들면 다음과 같습니다.

    spec:
      ..
      acceptors:
        - name: new-acceptor
          protocols: all
          port: 62666
          sslEnabled: true
          needClientAuth: false
          sslSecret: broker-cert-secret
      ..
  8. brokerProperties 속성에서 cert-manager Operator가 Openshift용 cert-manager Operator에 의해 갱신될 때마다 수락자에 대한 새 브로커 인증서를 자동으로 로드하도록 브로커를 구성합니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      brokerProperties
      - "acceptorConfigurations.new-acceptor.params.sslAutoReload=true"
       ...
  9. 클라이언트가 브로커를 신뢰할 수 있도록 이 예제 프로세스의 root-ca-secret 시크릿에 생성된 브로커 인증서에 서명한 루트 CA 인증서를 각 클라이언트의 신뢰 저장소에 추가합니다.
  10. 브로커와 클라이언트 간에 mTLS 인증을 구성하려면 다음 단계를 완료합니다.

    1. Kubernetes용 Trust Manager를 사용하여 브로커가 신뢰하려는 각 클라이언트의 인증서가 포함된 신뢰 번들을 생성하고 시크릿(예:trusted-clients-bundle )에 신뢰 번들을 추가합니다. 신뢰 번들을 생성하는 방법에 대한 자세한 내용은 trust-manager 설명서 를 참조하십시오.
    2. 브로커 CR에 구성된 승인자에서 needClientAuth 속성을 추가하고 클라이언트 인증을 요구하도록 true 로 설정합니다. 예를 들면 다음과 같습니다.

      spec:
        ..
        acceptors:
          - name: new-acceptor
            protocols: all
            port: 62666
            sslEnabled: true
            sslSecret: broker-cert-secret
            needClientAuth: true
        ..
    3. 각 수락자의 trustSecret 속성에서 클라이언트 인증서의 신뢰 번들이 포함된 보안을 지정합니다. 예를 들면 다음과 같습니다.

      spec:
        ..
        acceptors:
          - name: new-acceptor
            protocols: all
            port: 62666
            sslEnabled: true
            sslSecret: broker-cert-secret
            needClientAuth: true
            trustSecret: trusted-clients-bundle
        ..
  11. CR을 저장합니다.
4.12.2.3. Java keytool 유틸리티 사용

keytool은 Java에 포함된 인증서 관리 유틸리티입니다.

4.12.2.3.1. 단방향 TLS 구성

이 섹션의 절차에서는 브로커-클라이언트 연결을 보호하도록 단방향 TLS(Transport Layer Security)를 구성하는 방법을 보여줍니다.

단방향 TLS에서는 브로커만 인증서를 제공합니다. 이 인증서는 클라이언트가 브로커를 인증하는 데 사용됩니다.

사전 요구 사항

프로세스

  1. 브로커 키 저장소에 대한 자체 서명 인증서를 생성합니다.

    $ keytool -genkey -alias broker -keyalg RSA -keystore ~/broker.ks
  2. 클라이언트와 공유할 수 있도록 브로커 키 저장소에서 인증서를 내보냅니다. Base64로 인코딩된 .pem 형식으로 인증서를 내보냅니다. 예를 들면 다음과 같습니다.

    $ keytool -export -alias broker -keystore ~/broker.ks -file ~/broker_cert.pem
  3. 클라이언트에서 브로커 인증서를 가져오는 클라이언트 신뢰 저장소를 생성합니다.

    $ keytool -import -alias broker -keystore ~/client.ts -file ~/broker_cert.pem
  4. 관리자로 OpenShift Container Platform에 로그인합니다. 예를 들면 다음과 같습니다.

    $ oc login -u system:admin
  5. 브로커 배포가 포함된 프로젝트로 전환합니다. 예를 들면 다음과 같습니다.

    $ oc project <my_openshift_project>
  6. TLS 인증 정보를 저장할 시크릿을 생성합니다. 예를 들면 다음과 같습니다.

    $ oc create secret generic my-tls-secret \
    --from-file=broker.ks=~/broker.ks \
    --from-file=client.ts=~/client.ks \
    --from-literal=keyStorePassword=<password> \
    --from-literal=trustStorePassword=<password>
    참고

    시크릿을 생성할 때 OpenShift에서 키 저장소와 신뢰 저장소를 모두 지정해야 합니다. 신뢰 저장소 키는 일반적으로 client.ts 로 이름이 지정됩니다. 브로커와 클라이언트 간의 단방향 TLS의 경우 실제로 신뢰 저장소가 필요하지 않습니다. 그러나 보안을 성공적으로 생성하려면 일부 유효한 저장소 파일을 client.ts 의 값으로 지정해야 합니다. 이전 단계에서는 이전에 생성한 브로커 키 저장소 파일을 재사용하여 client.ts 의 "더미" 값을 제공합니다. 이는 단방향 TLS에 필요한 모든 인증 정보를 사용하여 보안을 생성하는 데 충분합니다.

  7. Operator를 설치할 때 생성한 서비스 계정에 보안을 연결합니다. 예를 들면 다음과 같습니다.

    $ oc secrets link sa/amq-broker-operator secret/my-tls-secret
  8. 보안 수락자 또는 커넥터의 sslSecret 매개변수에 시크릿 이름을 지정합니다. 예를 들면 다음과 같습니다.

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp,openwire
        port: 5672
        sslEnabled: true
        sslSecret: my-tls-secret
        expose: true
        connectionsAllowed: 5
    ...
4.12.2.3.2. 양방향 TLS 구성

이 섹션의 절차에서는 브로커-클라이언트 연결을 보호하도록 양방향 TLS(Transport Layer Security)를 구성하는 방법을 보여줍니다.

양방향 TLS에서 브로커와 클라이언트 모두 인증서를 제공합니다. 브로커 및 클라이언트는 이러한 인증서를 사용하여 때때로 상호 인증 이라는 프로세스에서 서로 인증합니다.

사전 요구 사항

프로세스

  1. 브로커 키 저장소에 대한 자체 서명 인증서를 생성합니다.

    $ keytool -genkey -alias broker -keyalg RSA -keystore ~/broker.ks
  2. 클라이언트와 공유할 수 있도록 브로커 키 저장소에서 인증서를 내보냅니다. Base64로 인코딩된 .pem 형식으로 인증서를 내보냅니다. 예를 들면 다음과 같습니다.

    $ keytool -export -alias broker -keystore ~/broker.ks -file ~/broker_cert.pem
  3. 클라이언트에서 브로커 인증서를 가져오는 클라이언트 신뢰 저장소를 생성합니다.

    $ keytool -import -alias broker -keystore ~/client.ts -file ~/broker_cert.pem
  4. 클라이언트에서 클라이언트 키 저장소에 대한 자체 서명된 인증서를 생성합니다.

    $ keytool -genkey -alias broker -keyalg RSA -keystore ~/client.ks
  5. 클라이언트에서 브로커와 공유할 수 있도록 클라이언트 키 저장소에서 인증서를 내보냅니다. Base64로 인코딩된 .pem 형식으로 인증서를 내보냅니다. 예를 들면 다음과 같습니다.

    $ keytool -export -alias broker -keystore ~/client.ks -file ~/client_cert.pem
  6. 클라이언트 인증서를 가져오는 브로커 신뢰 저장소를 생성합니다.

    $ keytool -import -alias broker -keystore ~/broker.ts -file ~/client_cert.pem
  7. 관리자로 OpenShift Container Platform에 로그인합니다. 예를 들면 다음과 같습니다.

    $ oc login -u system:admin
  8. 브로커 배포가 포함된 프로젝트로 전환합니다. 예를 들면 다음과 같습니다.

    $ oc project <my_openshift_project>
  9. TLS 인증 정보를 저장할 시크릿을 생성합니다. 예를 들면 다음과 같습니다.

    $ oc create secret generic my-tls-secret \
    --from-file=broker.ks=~/broker.ks \
    --from-file=client.ts=~/broker.ts \
    --from-literal=keyStorePassword=<password> \
    --from-literal=trustStorePassword=<password>
    참고

    시크릿을 생성할 때 OpenShift에서 키 저장소와 신뢰 저장소를 모두 지정해야 합니다. 신뢰 저장소 키는 일반적으로 client.ts 로 이름이 지정됩니다. 브로커와 클라이언트 간의 양방향 TLS의 경우 클라이언트 인증서가 있으므로 브로커 신뢰 저장소를 포함하는 시크릿을 생성해야 합니다. 따라서 이전 단계에서 client.ts 키에 대해 지정하는 값은 실제로 브로커 신뢰 저장소 파일입니다.

  10. Operator를 설치할 때 생성한 서비스 계정에 보안을 연결합니다. 예를 들면 다음과 같습니다.

    $ oc secrets link sa/amq-broker-operator secret/my-tls-secret
  11. 보안 수락자 또는 커넥터의 sslSecret 매개변수에 시크릿 이름을 지정합니다. 예를 들면 다음과 같습니다.

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp,openwire
        port: 5672
        sslEnabled: true
        sslSecret: my-tls-secret
        expose: true
        connectionsAllowed: 5
    ...
4.12.2.4. 호스트 이름 확인을 위해 브로커 인증서 구성
참고

이 섹션에서는 단방향 또는 양방향 TLS를 구성할 때 생성해야 하는 브로커 인증서에 대한 몇 가지 요구 사항에 대해 설명합니다.

클라이언트가 배포의 브로커 Pod에 연결하려고 하면 클라이언트 연결 URL의 verifyHost 옵션은 클라이언트가 브로커 인증서의 CN(일반 이름)을 호스트 이름과 비교하여 일치하는지 확인합니다. 클라이언트 연결 URL에서 verifyHost=true 또는 이와 유사한 경우 클라이언트가 이 확인을 수행합니다.

예를 들어 브로커가 격리된 네트워크의 OpenShift 클러스터에 배포된 경우와 같이 연결 보안에 대한 우려가 없는 드문 경우 이 확인을 생략할 수 있습니다. 그렇지 않으면 보안 연결을 위해 클라이언트가 이 확인을 수행하는 것이 좋습니다. 이 경우 클라이언트 연결을 성공적으로 수행하려면 브로커 키 저장소 인증서를 올바르게 구성해야 합니다.

일반적으로 클라이언트가 호스트 확인을 사용하는 경우 브로커 인증서를 생성할 때 지정하는 CN은 클라이언트가 연결하는 브로커 Pod의 경로 전체 호스트 이름과 일치해야 합니다. 예를 들어 단일 브로커 Pod가 있는 배포가 있는 경우 CN은 다음과 같을 수 있습니다.

CN=my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain

CN이 여러 브로커가 있는 배포에서 브로커 Pod를 확인할 수 있도록 브로커 Pod 대신 별표(*) 와일드카드 문자를 지정할 수 있습니다. 예를 들면 다음과 같습니다.

CN=my-broker-deployment-*-svc-rte-my-openshift-project.my-openshift-domain

이전 예에 표시된 CN은 my-broker-deployment 배포의 브로커 Pod로 성공적으로 확인되었습니다.

또한 브로커 인증서를 생성할 때 지정하는 SAN(주체 대체 이름)은 배포의 모든 브로커 Pod를 쉼표로 구분된 목록으로 나열해야 합니다. 예를 들면 다음과 같습니다.

"SAN=DNS:my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain,DNS:my-broker-deployment-1-svc-rte-my-openshift-project.my-openshift-domain,..."

4.12.3. 브로커 배포의 네트워킹 서비스

브로커 배포를 위한 OpenShift Container Platform 웹 콘솔의 네트워킹 창에는 헤드리스 서비스와 ping 서비스라는 두 가지 서비스가 실행되고 있습니다. 헤드리스 서비스의 기본 이름은 < custom_resource_name> -hdls-svc 형식을 사용합니다(예: my-broker-deployment-hdls-svc ). ping 서비스의 기본 이름은 < custom_resource_name> -ping-svc 형식을 사용합니다(예: 'my-broker-deployment-ping-svc ).

헤드리스 서비스는 내부 브로커 클러스터링에 사용되는 포트 61616에 대한 액세스를 제공합니다.

ping 서비스는 브로커가 검색하는 데 사용되며 브로커가 OpenShift 환경 내에서 클러스터를 형성할 수 있습니다. 내부적으로 이 서비스는 포트 8888을 노출합니다.

4.12.4. 내부 및 외부 클라이언트에서 브로커에 연결

이 섹션의 예제에서는 내부 클라이언트(즉, 브로커 배포와 동일한 OpenShift 클러스터에 있는 클라이언트) 및 외부 클라이언트(OpenShift 클러스터 외부의 클라이언트)에서 브로커에 연결하는 방법을 보여줍니다.

4.12.4.1. 내부 클라이언트에서 브로커에 연결

내부 클라이언트를 브로커에 연결하려면 클라이언트 연결 세부 사항에서 브로커 Pod의 DNS 확인 가능 이름을 지정합니다. 예를 들면 다음과 같습니다.

$ tcp://ex–aao-ss-0:<port>

내부 클라이언트가 Core 프로토콜을 사용하고 useTopologyForLoadBalancing=false 키가 연결 URL에 설정되지 않은 경우 클라이언트가 브로커에 처음 연결되면 브로커는 클러스터에 있는 모든 브로커의 주소를 클라이언트에 알릴 수 있습니다. 그러면 클라이언트는 모든 브로커에서 연결을 로드 밸런싱할 수 있습니다.

브로커에 서브스크립션 대기열 또는 요청/응답 대기열이 있는 경우 클라이언트 연결이 부하 분산될 때 이러한 대기열을 사용하는 것과 관련된 경고에 유의하십시오. 자세한 내용은 4.12.4.4절. “ScanSetting 서브스크립션 대기열 또는 응답/요청 대기열이 있을 때 클라이언트 연결을 로드 밸런싱해야 합니다.”의 내용을 참조하십시오.

4.12.4.2. 외부 클라이언트에서 브로커에 연결

허용자를 외부 클라이언트(즉, expose 매개변수 값을 true로 설정하여)에 어셉터를 노출하면 Operator는 배포의 각 브로커 Pod에 대한 전용 서비스 및 경로를 자동으로 생성합니다.

외부 클라이언트는 브로커 pod에 대해 생성된 경로의 전체 호스트 이름을 지정하여 브로커에 연결할 수 있습니다. 기본 curl 명령을 사용하여 이 전체 호스트 이름에 대한 외부 액세스를 테스트할 수 있습니다. 예를 들면 다음과 같습니다.

$ curl https://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain

브로커 포드의 전체 호스트 이름은 OpenShift 라우터를 호스팅하는 노드로 확인되어야 합니다. OpenShift 라우터는 호스트 이름을 사용하여 OpenShift 내부 네트워크 내에서 트래픽을 보낼 위치를 결정합니다. 기본적으로 OpenShift 라우터는 비보안(즉, SSL이 아닌) 트래픽과 보안(즉, SSL 암호화) 트래픽을 위해 포트 80을 수신 대기합니다. HTTP 연결의 경우 보안 연결 URL(즉, https) 또는 비보안 연결 URL(즉, http)을 지정하면 라우터에서 포트 443으로 자동으로 트래픽을 보냅니다.

외부 클라이언트가 클러스터의 브로커에 걸쳐 연결을 로드 밸런싱하도록 하려면 다음을 수행합니다.

  • 각 브로커 포드에 대해 OpenShift 경로에서 haproxy.router.openshift.io/balance roundrobin 옵션을 구성하여 로드 밸런싱을 활성화합니다.
  • 외부 클라이언트가 Core 프로토콜을 사용하는 경우 클라이언트의 연결 URL에서 useTopologyForLoadBalancing=false 키를 설정합니다.

    useTopologyForLoadBalancing=false 키를 설정하면 클라이언트가 브로커에서 제공하는 클러스터 토폴로지 정보에 있는 AMQ Broker Pod DNS 이름을 사용할 수 없습니다. Pod DNS 이름은 외부 클라이언트가 액세스할 수 없는 내부 IP 주소로 확인됩니다.

브로커에 서브스크립션 대기열 또는 요청/응답 대기열이 있는 경우 로드 밸런싱 클라이언트 연결 시 이러한 대기열을 사용하는 것과 관련된 경고에 유의하십시오. 자세한 내용은 4.12.4.4절. “ScanSetting 서브스크립션 대기열 또는 응답/요청 대기열이 있을 때 클라이언트 연결을 로드 밸런싱해야 합니다.”의 내용을 참조하십시오.

외부 클라이언트가 클러스터의 브로커 간에 연결을 로드 밸런싱하지 않도록 하려면 다음을 수행합니다.

  • 각 클라이언트의 연결 URL에서 각 브로커 Pod에 대한 경로의 전체 호스트 이름을 지정합니다. 클라이언트는 연결 URL의 첫 번째 호스트 이름에 연결을 시도합니다. 그러나 첫 번째 호스트 이름을 사용할 수 없는 경우 클라이언트는 연결 URL의 다음 호스트 이름에 자동으로 연결됩니다.
  • 외부 클라이언트가 Core 프로토콜을 사용하는 경우 클라이언트 연결 URL에서 useTopologyForLoadBalancing=false 키를 설정하여 클라이언트가 브로커에서 제공하는 클러스터 토폴로지 정보를 사용하지 않도록 합니다.

HTTP가 아닌 연결의 경우:

  • 클라이언트는 연결 URL의 일부로 포트 번호(예: 포트 443)를 명시적으로 지정해야 합니다.
  • 양방향 TLS의 경우 클라이언트는 연결 URL의 일부로 신뢰 저장소의 경로와 해당 암호를 지정해야 합니다.
  • 양방향 TLS의 경우 클라이언트는 저장소의 경로와 해당 암호를 연결 URL의 일부로 지정해야 합니다.

지원되는 메시징 프로토콜에 대한 일부 클라이언트 연결 URL 예는 다음과 같습니다.

단방향 TLS 사용 외부 코어 클라이언트

tcp://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443?useTopologyForLoadBalancing=false&sslEnabled=true \
&trustStorePath=~/client.ts&trustStorePassword=<password>

참고

외부 Core 클라이언트는 브로커가 반환된 토폴로지 정보를 사용할 수 없기 때문에 연결 URL에서 useTopologyForLoadBalancing 키가 명시적으로 false 로 설정됩니다. 이 키가 true 로 설정되어 있거나 값을 지정하지 않으면 DEBUG 로그 메시지가 생성됩니다.

양방향 TLS 사용 외부 코어 클라이언트

tcp://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443?useTopologyForLoadBalancing=false&sslEnabled=true \
&keyStorePath=~/client.ks&keyStorePassword=<password> \
&trustStorePath=~/client.ts&trustStorePassword=<password>

외부 OpenWire 클라이언트, 단방향 TLS 사용

ssl://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443"

# Also, specify the following JVM flags
-Djavax.net.ssl.trustStore=~/client.ts -Djavax.net.ssl.trustStorePassword=<password>

양방향 TLS 사용 외부 OpenWire 클라이언트

ssl://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443"

# Also, specify the following JVM flags
-Djavax.net.ssl.keyStore=~/client.ks -Djavax.net.ssl.keyStorePassword=<password> \
-Djavax.net.ssl.trustStore=~/client.ts -Djavax.net.ssl.trustStorePassword=<password>

단방향 TLS 사용 외부 AMQP 클라이언트

amqps://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443?transport.verifyHost=true \
&transport.trustStoreLocation=~/client.ts&transport.trustStorePassword=<password>

양방향 TLS 사용 외부 AMQP 클라이언트

amqps://my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain:443?transport.verifyHost=true \
&transport.keyStoreLocation=~/client.ks&transport.keyStorePassword=<password> \
&transport.trustStoreLocation=~/client.ts&transport.trustStorePassword=<password>

4.12.4.3. NodePort를 사용하여 브로커에 연결

OpenShift 관리자는 경로를 사용하는 대신 OpenShift 외부 클라이언트에서 브로커 포드에 연결하도록 NodePort를 구성할 수 있습니다. NodePort는 브로커에 대해 구성된 수락자가 지정한 프로토콜별 포트 중 하나에 매핑해야 합니다.

기본적으로 NodePort는 30000~32767 범위에 있습니다. 즉, NodePort가 일반적으로 브로커 Pod의 의도된 포트와 일치하지 않습니다.

NodePort를 통해 OpenShift 외부의 클라이언트에서 브로커에 연결하려면 < protocol > :// <ocp_node_ip> : <node_ port_number > 형식으로 URL을 지정합니다.

4.12.4.4. ScanSetting 서브스크립션 대기열 또는 응답/요청 대기열이 있을 때 클라이언트 연결을 로드 밸런싱해야 합니다.

Cryostat 서브스크립션

Cryostat 서브스크립션은 브로커의 큐로 표시되며, 지속성 구독자가 브로커에 처음 연결할 때 생성됩니다. 이 큐가 존재하며 클라이언트가 구독을 취소할 때까지 메시지를 수신합니다. 클라이언트가 다른 브로커에 다시 연결되면 해당 브로커에 또 다른 Cryostat 서브스크립션 큐가 생성됩니다. 이로 인해 다음 문제가 발생할 수 있습니다.

표 4.6. Cryostat 서브스크립션 관련 문제

문제

완화 방법

원본 서브스크립션 큐에서 메시지가 중단될 수 있습니다.

주소 또는 주소 집합에 대한 redistributionDelay 속성을 설정하여 메시지 배포를 활성화합니다. ActiveMQArtemis CR의 brokerProperties 속성 아래에 이 속성을 설정할 수 있습니다. 예를 들면 다음과 같습니다.

addressSettings.<address>.redistributionDelay=5000.

이 예에서 브로커는 메시지를 다른 브로커에 재배포하기 전에 대기열의 최종 소비자가 닫히는 후 5000 밀리초를 기다립니다.

메시지 재배포에 대한 자세한 내용은 메시지 재배포 활성화를 참조하십시오.

다른 메시지가 계속 라우팅될 때 메시지 재배포 중 창이 있기 때문에 잘못된 순서로 메시지가 수신될 수 있습니다.

없음.

클라이언트가 구독을 취소하면 마지막으로 연결된 브로커에서만 큐가 삭제됩니다. 즉, 다른 큐가 계속 존재하고 메시지를 수신할 수 있습니다.

구독 취소한 클라이언트에 대해 존재할 수 있는 다른 빈 큐를 삭제하려면 주소 또는 주소 집합에 대해 다음 속성을 모두 구성합니다. ActiveMQArtemis CR의 brokerProperties 속성 아래에 이러한 속성을 설정할 수 있습니다.

addressSettings.<address>.autoDeleteQueuesMessageCount=0

addressSettings.<address>.autoDeleteQueuesDelay=5000

autoDeleteQueuesMessageCount 속성을 0 으로 설정하면 큐에 메시지가 없는 경우에만 큐가 삭제됩니다. autoDeleteQueuesDelay 속성 값은 메시지가 없는 큐가 삭제되지 않은 큐의 수입니다.

자세한 내용은 주소 및 큐의 자동 생성 및 삭제 구성을 참조하십시오.

요청/수정 대기열

JMS Producer에서 임시 응답 대기열을 생성하면 브로커에 큐가 생성됩니다. 작업 대기열에서 사용하는 클라이언트가 임시 큐에 응답하는 경우 다른 브로커에 연결하는 경우 다음과 같은 문제가 발생할 수 있습니다.

표 4.7. 요청/거절 대기열 문제
문제완화 방법

클라이언트가 연결된 브로커에 응답 큐가 존재하지 않으므로 클라이언트가 오류를 생성할 수 있습니다.

클라이언트가 존재하지 않는 큐에 연결하도록 요청할 때 큐를 자동으로 생성하도록 브로커를 구성합니다. 자동 큐 생성을 구성하려면 ActiveMQArtemis CR의 brokerProperties 속성 아래에 다음 속성을 추가합니다.

addressSettings.<address>.autoCreateQueues=true

작업 큐로 전송된 메시지는 배포되지 않을 수 있습니다.

ActiveMQArtemis CR의 brokerProperties 속성에 다음 속성을 추가하여 필요에 따라 로드 밸런싱을 활성화합니다.

clusterConfigurations.<cluster>.messageLoadBalancingType=ON-DEMAND.

또한 주소 또는 주소 집합에 대한 redistributionDelay 속성을 설정하여 메시지 배포를 활성화합니다. ActiveMQArtemis CR의 brokerProperties 속성 아래에 이 속성을 설정할 수 있습니다. 예를 들면 다음과 같습니다.

addressSettings<address>.redistributionDelay=5000

자세한 내용은 메시지 재배포 활성화를 참조하십시오.

추가 리소스

  • 클러스터에서 실행 중인 서비스와 OpenShift 클러스터 외부에서 통신하기 위해 경로 및 NodePort와 같은 방법을 사용하는 방법에 대한 자세한 내용은 다음을 참조하십시오.

4.13. 클러스터 연결 보안

클러스터의 브로커 간 내부 연결은 내부 커넥터와 어셉터를 사용하며, 둘 다 Artemis 로 이름이 지정됩니다. SSL을 활성화하여 TLS(Transport Layer Security) 프로토콜을 사용하여 클러스터의 브로커 간 연결을 보호할 수 있습니다.

SSL 지원 수락자는 클러스터의 모든 브로커에 대한 공통 TLS 인증서가 포함된 시크릿을 지정합니다. SSL 지원 커넥터에서는 TLS 인증서의 공개 키가 포함된 신뢰 저장소를 지정합니다. 각 브로커의 신뢰 저장소에 공개 키가 필요하므로 브로커는 TLS 연결을 설정할 때 클러스터의 다른 브로커를 신뢰할 수 있습니다.

다음 예제 절차에서는 자체 서명된 인증서를 사용하여 클러스터의 브로커 간에 내부 연결을 보호하는 방법을 설명합니다.

프로세스

  1. 자체 서명된 TLS 인증서를 생성하여 키 저장소 파일에 추가합니다.

    • 인증서의 주체 대체 이름 (SAN) 필드에서 다음 예와 같이 클러스터의 모든 브로커와 일치하는 와일드카드 DNS 이름을 지정합니다. 이 예제는 테스트 네임스페이스에 배포된 ex-aao 라는 CR을 사용하는 것을 기반으로 합니다.

      $ keytool -storetype jks -keystore server-keystore.jks -storepass artemis -keypass artemis -alias server -genkey -keyalg "RSA" -keysize 2048 -dname "CN=AMQ Server, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -validity 365 -ext bc=ca:false -ext eku=sA -ext san=dns:*.ex-aao-hdls-svc.test.svc.cluster.local
    • 인증서가 와일드카드 DNS 이름 사용을 지원하지 않는 경우 클러스터의 모든 브로커 Pod에 대한 인증서의 SAN 필드에 쉼표로 구분된 DNS 이름 목록을 포함할 수 있습니다. 예를 들면 다음과 같습니다.

      keytool -storetype jks -keystore server-keystore.jks -storepass artemis -keypass artemis -alias server -genkey -keyalg "RSA" -keysize 2048 -dname "CN=AMQ Server, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ" -validity 365 -ext bc=ca:false -ext eku=sA -ext san=dns:ex-aao-ss-0.ex-aao-hdls-svc.test.svc.cluster.local,dns:ex-aao-ss-1.ex-aao-hdls-svc.test.svc.cluster.local
    • TLS 인증서가 DNS 이름 사용을 지원하지 않는 경우 아래 설명된 대로 ActiveMQArtemis CR에서 호스트 확인을 비활성화해야 합니다.
  2. 신뢰 저장소 파일로 가져올 수 있도록 키 저장소 파일에서 TLS 인증서의 공개 키를 내보냅니다. 예를 들면 다음과 같습니다.

    $ keytool -storetype jks -keystore server-keystore.jks -storepass artemis -alias server -exportcert -rfc > server.crt
  3. 클러스터의 다른 브로커가 인증서를 신뢰할 수 있도록 TLS 인증서의 공개 키를 신뢰 저장소 파일로 가져옵니다. 예를 들면 다음과 같습니다.

    $ keytool -storetype jks -keystore server-truststore.jks -storepass artemis -keypass artemis -importcert -alias server -file server.crt -noprompt
  4. 키 저장소 및 신뢰 저장소 파일 및 관련 암호를 저장할 시크릿을 생성합니다. 예를 들면 다음과 같습니다.

    oc create secret generic artemis-ssl-secret --namespace test --from-file=broker.ks=server-keystore.jks --from-file=client.ts=server-truststore.jks --from-literal=keyStorePassword=artemis --from-literal=trustStorePassword=artemis
  5. 브로커 배포에 대해 ActiveMQArtemis CR을 편집하고 Artemis라는 내부 어 셉터를 추가합니다. Artemis acceptor 에서 sslEnabled 속성을 true 로 설정하고 sslSecret 특성에서 생성한 시크릿 이름을 지정합니다. 예를 들면 다음과 같습니다.

    spec:
      ..
      deploymentPlan:
        size: 2
      acceptors:
      - name: artemis
        port: 61616
        sslEnabled: true
        sslSecret: artemis-ssl-secret
      ..
  6. 클러스터의 각 브로커가 클러스터 다른 브로커에 연결하는 데 사용하는 Artemis 커넥터에 대해 SSL을 활성화합니다. brokerProperties 속성을 사용하여 SSL을 활성화하고 TLS 인증서의 공개 키가 포함된 truststore 파일의 경로와 자격 증명을 지정합니다.

    spec:
      ..
      deploymentPlan:
        size: 2
      acceptors:
      - name: artemis
        port: 61616
        sslEnabled: true
        sslSecret: artemis-ssl-secret
      brokerProperties:
      - 'connectorConfigurations.artemis.params.sslEnabled=true'
      - 'connectorConfigurations.artemis.params.trustStorePath=/etc/artemis-ssl-secret-volume/client.ts'
      - 'connectorConfigurations.artemis.params.trustStorePassword=artemis'
      ..
    connectorConfigurations.artemis.params.trustStorePath
    이 값은 브로커 Pod의 truststore 파일 client.ts 와 일치해야 합니다. 시크릿의 truststore 파일 및 관련 암호 파일은 각 브로커 Pod의 /etc/<시크릿 이름>-volume 디렉터리에 마운트됩니다. 이전 예제에서는 artemis-ssl-secret 이라는 시크릿에 있는 신뢰 저장소의 위치를 지정합니다.
  7. TLS 인증서에서 DNS 이름 사용을 지원하지 않는 경우 brokerProperties 속성을 사용하여 호스트 확인을 비활성화합니다. 예를 들면 다음과 같습니다.

    spec:
      ..
      brokerProperties:
      ..
      - 'connectorConfigurations.artemis.params.verifyHost=false'
      ..
  8. CR을 저장합니다.

4.14. AMQP 메시지에 대한 대용량 메시지 처리 구성

클라이언트는 브로커의 내부 버퍼 크기를 초과할 수 있는 대규모 AMQP 메시지를 보내 예기치 않은 오류가 발생할 수 있습니다. 이 상황을 방지하려면 메시지가 지정된 최소값보다 큰 경우 메시지를 파일로 저장하도록 브로커를 구성할 수 있습니다. 이러한 방식으로 대용량 메시지를 처리한다는 것은 브로커가 메시지를 메모리에 보유하지 않음을 의미합니다. 대신 브로커는 대규모 메시지 파일을 저장하는 데 사용되는 전용 디렉터리에 메시지를 저장합니다.

OpenShift Container Platform에 브로커 배포의 경우 대용량 메시지 디렉터리는 메시지 스토리지에 브로커에서 사용하는 영구 볼륨(PV)의 /opt/ <custom_resource_name> /data/large-messages 입니다. 브로커가 메시지를 큰 메시지로 저장하면 큐는 대규모 메시지 디렉터리에 있는 파일에 대한 참조를 유지합니다.

참고

AMQP 프로토콜에 대한 브로커 구성에서만 대규모 메시지 크기 제한을 구성할 수 있습니다. AMQ Core 및 Openwire 프로토콜의 경우 클라이언트 연결 구성에서 큰 메시지 크기 제한을 구성할 수 있습니다. 자세한 내용은 Red Hat AMQ Clients 설명서를 참조하십시오.

4.14.1. 대용량 메시지 처리를 위한 AMQP 어셉터 구성

다음 절차에서는 지정된 크기보다 큰 AMQP 메시지를 큰 메시지로 처리하도록 어셉터를 구성하는 방법을 보여줍니다.

사전 요구 사항

  • Operator 기반 브로커 배포에 대해 어셉터를 구성하는 방법에 대해 잘 알고 있어야 합니다. 4.12.1절. “어셉터 구성”을 참조하십시오.
  • 대규모 AMQP 메시지를 전용 대규모 메시지 디렉터리에 저장하려면 브로커 배포에서 영구 스토리지를 사용해야 합니다(즉, 배포를 생성하는 데 사용되는 CR(사용자 정의 리소스) 인스턴스에서 persistenceEnabledtrue 로 설정됨). 영구 스토리지 구성에 대한 자세한 내용은 다음을 참조하십시오.

프로세스

  1. 이전에 AMQP 수락자를 정의한 CR(사용자 정의 리소스) 인스턴스를 엽니다.

    1. OpenShift 명령줄 인터페이스 사용:

      $ oc edit -f <path/to/custom_resource_instance>.yaml
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 왼쪽 탐색 메뉴에서 AdministrationCustom Resource Definitions를 클릭합니다.
      2. ActiveMQArtemis CRD를 클릭합니다.
      3. Instances 탭을 클릭합니다.
      4. 프로젝트 네임스페이스에 해당하는 CR 인스턴스를 찾습니다.

    이전에 구성된 AMQP 수락자는 다음과 유사할 수 있습니다.

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp
        port: 5672
        connectionsAllowed: 5
        expose: true
        sslEnabled: true
    ...
  2. 브로커가 큰 메시지로 처리하는 AMQP 메시지의 최소 크기(바이트)를 지정합니다. 예를 들면 다음과 같습니다.

    spec:
    ...
      acceptors:
      - name: my-acceptor
        protocols: amqp
        port: 5672
        connectionsAllowed: 5
        expose: true
        sslEnabled: true
        amqpMinLargeMessageSize: 204800
        ...
    ...

    이전 예에서 브로커는 포트 5672에서 AMQP 메시지를 수락하도록 구성되어 있습니다. amqpMinLargeMessageSize 값을 기반으로 수락자가 204800바이트보다 크거나 같은 본문이 있는 AMQP 메시지를 수신하는 경우 브로커는 메시지를 큰 메시지로 저장합니다.

    브로커는 메시지를 메시지 스토리지에 사용하는 PV(영구 볼륨)의 대용량 메시지 디렉터리(/opt/ <custom_resource_name> /data/large-messages )에 저장합니다.

    amqpMinLargeMessageSize 속성의 값을 명시적으로 지정하지 않으면 브로커는 기본값 102400(즉, 100KB)을 사용합니다.

    amqpMinLargeMessageSize 를 값 -1 로 설정하면 AMQP 메시지의 대규모 메시지 처리가 비활성화됩니다.

4.15. 브로커 상태 점검 구성

시작, 활성 상태 프로브 및 준비 상태 프로브를 사용하여 AMQ Broker에서 상태 점검을 구성할 수 있습니다.

  • 시작 프로브는 컨테이너 내의 애플리케이션이 시작되었는지 여부를 나타냅니다.
  • 활성 상태 프로브는 컨테이너가 여전히 실행 중인지 확인합니다.
  • 준비 상태 프로브는 컨테이너가 서비스 요청을 수락할 준비가 되었는지 확인

Pod의 시작 프로브 또는 활성 상태 프로브 검사가 실패하면 프로브에서 Pod를 다시 시작합니다.

AMQ Broker에는 기본 준비 상태 및 활성 프로브가 포함됩니다. 기본 활성 프로브는 브로커의 HTTP 포트를 ping하여 브로커가 실행 중인지 확인합니다. 기본 준비 상태 프로브는 브로커에 대해 구성된 각 어셉터 포트에 대한 연결을 열어 브로커가 네트워크 트래픽을 허용할 수 있는지 확인합니다.

기본 활성 및 준비 상태 프로브를 사용하는 제한 사항은 브로커의 파일 시스템과 같은 기본 문제를 식별할 수 없다는 것입니다. 브로커의 명령줄 유틸리티인 Artemis를 사용하여 보다 포괄적인 상태 점검을 실행하는 사용자 정의 활성 상태 프로브 및 준비 상태 프로브를 생성할 수 있습니다.

AMQ Broker에는 기본 시작 프로브가 포함되어 있지 않습니다. ActiveMQArtemis 사용자 정의 리소스(CR)에서 시작 프로브를 구성할 수 있습니다.

4.15.1. 시작 프로브 구성

브로커 컨테이너 내의 AMQ Broker 애플리케이션이 시작되었는지 확인하도록 시작 프로브를 구성할 수 있습니다.

프로세스

  1. 브로커 배포의 CR 인스턴스를 편집합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
      2. 배포에 사용할 CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
      2. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. 브로커 배포에 사용할 인스턴스를 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.

  2. CR의 deploymentPlan 섹션에서 startupProbe 섹션을 추가합니다. 예를 들면 다음과 같습니다.

    spec:
      deploymentPlan:
        startupProbe:
          exec:
            command:
              - /bin/bash
              - '-c'
              - /opt/amq/bin/artemis
              - 'check'
              - 'node'
              - '--up'
              - '--url'
              - 'tcp://$HOSTNAME:61616'
          initialDelaySeconds: 5
          periodSeconds: 10
          timeoutSeconds: 3
          failureThreshold: 30
    command
    컨테이너 내에서 실행할 startup probe 명령입니다. 이 예에서 시작 프로브는 Artemis check node 명령을 사용하여 브로커 Pod의 컨테이너에서 AMQ Broker가 시작되었는지 확인합니다.
    initialDelaySeconds
    컨테이너가 시작된 후 프로브가 실행되기 전에 지연(초)입니다. 기본값은 0입니다.
    periodSeconds
    프로브가 실행되는 간격(초)입니다. 기본값은 10입니다.
    timeoutSeconds
    시작 프로브 명령이 브로커의 응답을 기다리는 시간(초)입니다. 명령에 대한 응답이 수신되지 않으면 명령이 종료됩니다. 기본값은 1 입니다.
    failureThreshold

    프로브가 실패한 것으로 간주되는 시작 프로브의 시간 초과를 포함한 최소 연속 실패입니다. 프로브가 실패한 것으로 간주되면 Pod를 다시 시작합니다. 기본값은 3입니다.

    클러스터의 리소스 및 브로커 저널 크기에 따라 브로커가 프로브 검사를 시작하고 전달할 수 있도록 실패 임계값을 늘려야 할 수 있습니다. 그렇지 않으면 브로커가 실패 임계값에 반복적으로 도달하고 시작 프로브에 의해 매번 브로커가 다시 시작되는 루프 조건을 입력합니다. 예를 들어 failureThreshold30 으로 설정하고 프로브가 기본 간격인 10초에서 실행되는 경우 브로커는 300초로 시작하여 프로브 확인을 전달합니다.

  3. CR을 저장합니다.

추가 리소스

OpenShift Container Platform의 활성 상태 프로브 및 준비 상태 프로브에 대한 자세한 내용은 OpenShift Container Platform 설명서의 상태 점검을 사용하여 애플리케이션 상태 모니터링 을 참조하십시오.

4.15.2. 활성 상태 프로브 및 준비 상태 프로브 구성

다음 예제에서는 활성 상태 프로브 및 준비 상태 프로브를 사용하여 상태 점검을 실행하도록 브로커 배포에 대한 기본 CR(사용자 정의 리소스) 인스턴스를 구성하는 방법을 보여줍니다.

사전 요구 사항

프로세스

  1. 브로커 배포의 CR 인스턴스를 편집합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
      2. 배포에 사용할 CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
      2. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. 브로커 배포에 사용할 인스턴스를 클릭합니다.
      6. YAML 탭을 클릭합니다.
  2. 활성 프로브를 구성하려면 CR의 deploymentPlan 섹션에 livenessProbe 섹션을 추가합니다. 예를 들면 다음과 같습니다.

    spec:
      deploymentPlan:
        livenessProbe:
          initialDelaySeconds: 5
          periodSeconds: 5
          failureThreshold: 30
    initialDelaySeconds

    컨테이너가 시작된 후 프로브가 실행되기 전에 지연(초)입니다. 기본값은 5 입니다.

    참고

    배포에 시작 프로브도 구성된 경우 활성 상태 프로브와 준비 상태 프로브 모두에 대해 지연을 0으로 설정할 수 있습니다. 이러한 두 프로브는 시작 프로브가 전달된 후에만 실행됩니다. 시작 프로브가 이미 통과된 경우 브로커가 성공적으로 시작되었으므로 활성 상태 프로브 및 준비 상태 프로브 실행 지연이 필요하지 않습니다.

    periodSeconds
    프로브가 실행되는 간격(초)입니다. 기본값은 5 입니다.
    failureThreshold

    프로브를 나타내는 활성 프로브의 시간 초과를 포함한 최소 연속 실패가 실패했습니다. 프로브가 실패하면 Pod를 다시 시작합니다. 기본값은 3입니다.

    배포에 활성 프로브가 실행되기 전에 브로커 애플리케이션이 시작되었는지 확인하는 시작 프로브가 구성되지 않은 경우 브로커가 활성 상태 프로브 검사를 시작하고 전달할 수 있도록 실패 임계값을 늘려야 할 수 있습니다. 그렇지 않으면 브로커는 실패 임계값에 반복적으로 도달하고 활성 상태 프로브에 의해 매번 브로커 Pod를 다시 시작하는 루프 조건을 입력할 수 있습니다.

    브로커가 활성 상태 프로브 검사를 시작하고 전달하는 데 필요한 시간은 클러스터의 리소스 및 브로커 저널 크기에 따라 다릅니다. 예를 들어 failureThreshold 를 30으로 설정하고 프로브가 기본 5초 간격으로 실행되는 경우 브로커는 150초 동안 활성 상태 프로브 검사를 시작하고 전달합니다.

    참고

    활성 상태 프로브를 구성하지 않거나 구성된 프로브에서 처리기가 없는 경우 AMQ Broker Operator는 다음 구성이 있는 기본 TCP 프로브를 생성합니다. 기본 TCP 프로브는 지정된 포트의 브로커 컨테이너에 대한 소켓을 열려고 시도합니다.

    spec:
      deploymentPlan:
        livenessProbe:
          tcpSocket:
            port: 8181
          initialDelaySeconds: 30
          timeoutSeconds: 5
  3. 준비 상태 프로브를 구성하려면 CR의 deploymentPlan 섹션에서 readinessProbe 섹션을 추가합니다. 예를 들면 다음과 같습니다.

    spec:
      deploymentPlan:
        readinessProbe:
          initialDelaySeconds: 5
          periodSeconds: 5

    준비 상태 프로브를 구성하지 않으면 기본 제공 스크립트에서 모든 허용자가 연결을 허용할 수 있는지 확인합니다.

  4. 보다 포괄적인 상태 점검을 구성하려면 Artemis check 명령줄 유틸리티를 활성 상태 또는 준비 상태 프로브 구성에 추가합니다.

    1. 브로커에 대한 전체 클라이언트 연결을 생성하는 상태 점검을 구성하려면 livenessProbe 또는 readinessProbe 섹션에서 exec 섹션을 추가합니다. exec 섹션에서 command 섹션을 추가합니다. 명령 섹션에서 artemis 검사 노드 명령 구문을 추가합니다. 예를 들면 다음과 같습니다.

      spec:
        deploymentPlan:
          readinessProbe:
            exec:
              command:
                - bash
                - '-c'
                - /home/jboss/amq-broker/bin/artemis
                - check
                - node
                - '--silent'
                - '--acceptor'
                - <acceptor name>
                - '--user'
                - $AMQ_USER
                - '--password'
                - $AMQ_PASSWORD
            initialDelaySeconds: 30
            timeoutSeconds: 5

      기본적으로 Artemis 검사 노드 명령은 Artemis라는 어셉터의 URI를 사용합니다. 브로커에 Artemis라는 어셉 터가 있는 경우 명령에서 --acceptor <acceptor name > 옵션을 제외할 수 있습니다.

      참고

      $AMQ_USER$AMQ_PASSWORD 는 AMQ Operator에 의해 구성된 환경 변수입니다.

    2. 메시지를 생성하고 사용하는 상태 점검을 구성하려면 활성Probe 또는 readinessProbe 섹션에서 브로커 파일 시스템의 상태를 검증 합니다. exec 섹션에서 command 섹션을 추가합니다. 명령 섹션에서 Artemis check queue 명령 구문을 추가합니다. 예를 들면 다음과 같습니다.

      spec:
        deploymentPlan:
          readinessProbe:
            exec:
              command:
                - bash
                - '-c'
                - /home/jboss/amq-broker/bin/artemis
                - check
                - queue
                - '--name'
                - livenessqueue
                - '--produce'
                - "1"
                - '--consume'
                - "1"
                - '--silent'
                - '--user'
                - $AMQ_USER
                - '--password'
                - $AMQ_PASSWORD
            initialDelaySeconds: 30
            timeoutSeconds: 5
      참고

      지정한 큐 이름은 브로커에 구성되어야 하며 anycastroutingType 이 있어야 합니다. 예를 들면 다음과 같습니다.

      apiVersion: broker.amq.io/v1beta1
      kind: ActiveMQArtemisAddress
      metadata:
        name: livenessqueue
        namespace: activemq-artemis-operator
      spec:
        addressName: livenessqueue
        queueConfiguration:
          purgeOnNoConsumers: false
          maxConsumers: -1
          durable: true
          enabled: true
        queueName: livenessqueue
        routingType: anycast
  5. CR을 저장합니다.

추가 리소스

OpenShift Container Platform의 활성 상태 프로브 및 준비 상태 프로브에 대한 자세한 내용은 OpenShift Container Platform 설명서의 상태 점검을 사용하여 애플리케이션 상태 모니터링 을 참조하십시오.

4.16. 클러스터 스케일 다운을 지원하는 메시지 마이그레이션 활성화

클러스터의 브로커 수를 축소하고 메시지를 클러스터의 나머지 Pod로 마이그레이션하려면 메시지 마이그레이션을 활성화해야 합니다.

메시지 마이그레이션이 활성화된 클러스터를 축소하면 스케일다운 컨트롤러에서 메시지 마이그레이션 프로세스를 관리합니다.

4.16.1. 메시지 마이그레이션 프로세스의 단계

메시지 마이그레이션 프로세스는 다음 단계를 따릅니다.

  1. 배포의 의도적인 스케일 다운으로 인해 배포의 브로커 Pod가 종료되면 Operator는 메시지 마이그레이션을 준비하기 위해 스케일 다운 사용자 정의 리소스를 자동으로 배포합니다.
  2. 고립된 PV(영구 볼륨)를 확인하려면 scaledown 컨트롤러에서 볼륨 클레임의 서신을 확인합니다. 컨트롤러는 볼륨 클레임의 ordinal을 프로젝트의 StatefulSet(즉, 브로커 클러스터)에서 여전히 실행 중인 브로커 Pod의 것과 비교합니다.

    볼륨 클레임의 ordinal이 브로커 클러스터에서 계속 실행 중인 브로커 Pod의 서수보다 높으면 scaledown 컨트롤러에서 해당 ordinal의 브로커 Pod가 종료되었으며 메시징 데이터를 다른 브로커 Pod로 마이그레이션해야 합니다.

  3. scaledown 컨트롤러는 drainer Pod를 시작합니다. drainer Pod는 클러스터의 다른 라이브 브로커 Pod 중 하나에 연결하고 해당 라이브 브로커 Pod로 메시지를 마이그레이션합니다.

다음 그림은 scaledown 컨트롤러 ( drain controller라고도 함)에서 실행 중인 브로커 Pod로 메시지를 마이그레이션하는 방법을 보여줍니다.

그림 4.1. scaledown 컨트롤러를 사용한 메시지 마이그레이션

Ah ocp Pod 드레이닝 3

메시지가 작동 브로커 Pod로 성공적으로 마이그레이션되면 드레인터 Pod가 종료되고 축소 컨트롤러에서 고립된 PV의 PVC를 제거합니다. PV는 "Released" 상태로 반환됩니다.

참고

PV의 회수 정책이 유지 되도록 설정된 경우 PV를 삭제하고 다시 생성할 때까지 다른 Pod에서 PV를 사용할 수 없습니다. 예를 들어, 축소 후 클러스터를 확장하면 PV를 삭제하고 다시 생성할 때까지 Pod에서 PV를 사용할 수 없습니다.

추가 리소스

4.16.2. 메시지 마이그레이션 활성화

ActiveMQArtemis 사용자 정의 리소스(CR)에서 메시지 마이그레이션을 활성화할 수 있습니다.

사전 요구 사항

참고
  • 스케일다운 컨트롤러는 단일 OpenShift 프로젝트 내에서만 작동합니다. 컨트롤러는 별도의 프로젝트의 브로커 간에 메시지를 마이그레이션할 수 없습니다.
  • 브로커 배포를 0(zero)으로 축소하면 메시징 데이터를 마이그레이션할 수 있는 실행 중인 브로커 Pod가 없으므로 메시지 마이그레이션이 수행되지 않습니다. 그러나 배포를 0으로 축소한 다음 원래 배포보다 작은 크기로 백업하면 종료되는 브로커에 대해 드레인터 Pod가 시작됩니다.

프로세스

  1. 브로커 배포의 CR 인스턴스를 편집합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
      2. 배포에 사용할 CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
      2. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. 브로커 배포에 사용할 인스턴스를 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.

  2. CR의 deploymentPlan 섹션에서 messageMigration 속성을 추가하고 true 로 설정합니다. 아직 구성되지 않은 경우 persistenceEnabled 특성을 추가하고 true 로 설정합니다. 예를 들면 다음과 같습니다.

    spec:
      deploymentPlan:
        messageMigration: true
        persistenceEnabled: true
      ...

    이러한 설정은 나중에 클러스터형 브로커 배포 크기를 축소할 때 Operator는 확장 컨트롤러를 자동으로 시작하고 여전히 실행 중인 브로커 Pod로 메시지를 마이그레이션합니다.

  3. CR을 저장합니다.
  4. (선택 사항) 클러스터를 축소하고 메시지 마이그레이션 프로세스를 보려면 다음 단계를 완료합니다.

    1. 기존 브로커 배포에서 실행 중인 포드를 확인합니다.

      $ oc get pods

      다음과 같은 출력이 표시됩니다.

      activemq-artemis-operator-8566d9bf58-9g25l   1/1   Running   0   3m38s
      ex-aao-ss-0                                  1/1   Running   0   112s
      ex-aao-ss-1                                  1/1   Running   0   8s

      이전 출력에서는 3개의 Pod가 실행 중임을 보여줍니다. 하나는 브로커 Operator 자체 및 배포의 각 브로커에 대해 별도의 Pod입니다.

    2. 각 Pod에 로그인하고 각 브로커에 일부 메시지를 보냅니다.

      1. Pod ex-aao-ss-0 에 클러스터 IP 주소가 172.17.0.6 이므로 다음 명령을 실행합니다.

        $ /opt/amq/bin/artemis producer --url tcp://172.17.0.6:61616 --user admin --password admin
    3. Pod ex-aao-ss-1 에 클러스터 IP 주소가 172.17.0.7 인 경우 다음 명령을 실행합니다.

      $ /opt/amq/bin/artemis producer --url tcp://172.17.0.7:61616 --user admin --password admin

      위의 명령은 각 브로커에서 queue이라는 를 생성하고 각 큐에 1000개의 메시지를 추가합니다.

    4. 클러스터를 두 브로커에서 1개로 축소합니다.

      1. 기본 브로커 CR, broker_activemqartemis_cr.yaml 을 엽니다.
      2. CR에서 deploymentPlan.size1 로 설정합니다.
      3. 명령줄에서 변경 사항을 적용합니다.

        $ oc apply -f deploy/crs/broker_activemqartemis_cr.yaml

        Pod ex-aao-sss-1 이 종료되기 시작합니다. scaledown 컨트롤러는 동일한 이름의 새 드레이닝 Pod를 시작합니다. 이 드레인러 Pod는 브로커 Pod ex-aao-sss-1에서 클러스터의 다른 브로커 Pod인 ex- aao-ss-0 으로 모든 메시지를 마이그레이션한 후 종료됩니다.

    5. drainer Pod가 종료되면 브로커 Pod의 ex-aao-sss-0 의 메시지 수를 확인합니다. 드레인러 Pod가 종료된 브로커 Pod에서 1000개의 메시지를 성공적으로 마이그레이션했음을 나타내는 큐의 메시지 수가 2000개입니다.

4.17. OpenShift Container Platform 노드에서 브로커 Pod 배치 제어

노드 선택기, 허용 오차 또는 유사성 및 유사성 방지 규칙을 사용하여 OpenShift Container Platform 노드에 AMQ Broker Pod 배치를 제어할 수 있습니다.

노드 선택기
노드 선택기를 사용하면 특정 노드에 브로커 Pod를 예약할 수 있습니다.
허용 오차
허용 오차를 사용하면 톨러레이션이 노드에 구성된 테인트와 일치하는 경우 노드에 브로커 Pod를 예약할 수 있습니다. 일치하는 Pod 허용 오차가 없으면 테인트를 사용하면 노드에서 Pod 수락을 거부할 수 있습니다.
affinity/Anti-affinity
노드 유사성 규칙은 노드의 라벨에 따라 Pod를 예약할 수 있는 노드를 제어합니다. Pod 유사성 및 유사성 방지 규칙은 해당 노드에서 이미 실행 중인 Pod에 따라 Pod를 예약할 수 있는 노드를 제어합니다.

4.17.1. 노드 선택기를 사용하여 특정 노드에 Pod 배치

노드 선택기는 노드 레이블에 키-값 쌍이 일치하는 노드에 브로커 Pod를 예약해야 하는 키-값 쌍을 지정합니다.

다음 예제에서는 특정 노드에서 브로커 Pod를 예약하도록 노드 선택기를 구성하는 방법을 보여줍니다.

사전 요구 사항

프로세스

  1. 기본 브로커 CRD를 기반으로 CR(사용자 정의 리소스) 인스턴스를 생성합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. 다운로드 및 추출한 Operator 설치 아카이브의 deploy/crs 디렉터리에 포함된 broker_activemqartemis_cr.yaml 이라는 샘플 CR 파일을 엽니다.
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. Create ActiveMQArtemis 를 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

  2. CR의 deploymentPlan 섹션에서 nodeSelector 섹션을 추가하고 Pod의 노드를 선택하기 위해 일치시킬 노드 레이블을 추가합니다. 예를 들면 다음과 같습니다.

    spec:
        deploymentPlan:
          nodeSelector:
            app: broker1

    이 예에서 브로커 Pod는 app: broker1 레이블이 있는 노드에 예약됩니다.

  3. CR 인스턴스를 배포합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 생성하는 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR 인스턴스를 생성합니다.

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 구성을 완료하면 생성 을 클릭합니다.

추가 리소스

OpenShift Container Platform의 노드 선택기에 대한 자세한 내용은 OpenShift Container Platform 설명서의 노드 선택기를 사용하여 특정 노드에 Pod 배치를 참조하십시오.

4.17.2. 허용 오차를 사용하여 Pod 배치 제어

테인트 및 허용 오차는 특정 노드에서 Pod를 예약할 수 있는지 여부를 제어합니다. 테인트를 사용하면 Pod에 일치하는 톨러레이션이 없으면 노드에서 Pod 일정을 거부할 수 있습니다. 테인트를 사용하여 일치하는 톨러레이션이 있는 브로커 Pod와 같은 특정 Pod용으로 노드가 예약되도록 노드에서 Pod를 제외할 수 있습니다.

일치하는 허용 오차가 있으면 브로커 Pod를 노드에 예약할 수 있지만 해당 노드에서 Pod가 예약되는 것을 보장하지는 않습니다. 테인트가 구성된 노드에 브로커 Pod가 예약되도록 하려면 선호도 규칙을 구성할 수 있습니다. 자세한 내용은 다음을 참조하십시오. 4.17.3절. “유사성 및 유사성 방지 규칙을 사용하여 Pod 배치 제어”

다음 예제에서는 노드에 구성된 테인트와 일치하도록 허용 오차를 구성하는 방법을 보여줍니다.

사전 요구 사항

  • CR 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 숙지해야 합니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
  • 브로커 Pod 예약을 위해 예약할 노드에 테인트를 적용합니다. 테인트는 키, 값 및 효과로 구성됩니다. 테인트 효과에 따라 다음이 결정됩니다.

    • 노드의 기존 Pod가 제거됨
    • 기존 Pod는 노드에 남아 있을 수 있지만 일치하는 톨러레이션이 없으면 새 Pod를 예약할 수 없습니다.
    • 필요한 경우 새 Pod를 노드에 예약할 수 있지만 기본 설정은 노드에서 새 Pod를 예약하지 않는 것입니다.

테인트 적용에 대한 자세한 내용은 OpenShift Container Platform 설명서에서 노드 테인트를 사용하여 Pod 배치 제어를 참조하십시오.

프로세스

  1. 기본 브로커 CRD를 기반으로 CR(사용자 정의 리소스) 인스턴스를 생성합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. 다운로드 및 추출한 Operator 설치 아카이브의 deploy/crs 디렉터리에 포함된 broker_activemqartemis_cr.yaml 이라는 샘플 CR 파일을 엽니다.
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. Create ActiveMQArtemis 를 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

  2. CR의 deploymentPlan 섹션에서 tolerations 섹션을 추가합니다. 허용 오차 섹션에서 일치하려는 노드 테인트에 대한 허용 오차를 추가합니다. 예를 들면 다음과 같습니다.

    spec:
         deploymentPlan:
            tolerations:
            - key: "app"
              value: "amq-broker"
              effect: "NoSchedule"

    이 예에서 허용 오차는 app=amq-broker:NoSchedule 의 노드 테인트와 일치하므로 이 테인트가 구성된 노드에서 Pod를 예약할 수 있습니다.

참고

브로커 Pod가 올바르게 예약되도록 하려면 CR의 tolerations 섹션에 tolerationsSeconds 속성을 지정하지 마십시오.

  1. CR 인스턴스를 배포합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 생성하는 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR 인스턴스를 생성합니다.

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 구성을 완료하면 생성 을 클릭합니다.

추가 리소스

OpenShift Container Platform의 테인트 및 허용 오차에 대한 자세한 내용은 OpenShift Container Platform 설명서의 노드 테인트를 사용하여 Pod 배치 제어를 참조하십시오.

4.17.3. 유사성 및 유사성 방지 규칙을 사용하여 Pod 배치 제어

노드 유사성, Pod 유사성 또는 Pod 유사성 방지 규칙을 사용하여 Pod 배치를 제어할 수 있습니다. 노드 유사성을 사용하면 Pod에서 대상 노드 그룹에 대한 유사성을 지정할 수 있습니다. Pod 유사성 및 유사성 방지를 사용하면 노드에서 이미 실행 중인 다른 Pod를 기준으로 Pod를 예약할 수 있거나 예약할 수 없는 방법에 대한 규칙을 지정할 수 있습니다.

4.17.3.1. 노드 유사성 규칙을 사용하여 Pod 배치 제어

노드 유사성을 사용하면 브로커 Pod에서 해당 Pod를 배치할 수 있는 노드 그룹에 대한 선호도를 지정할 수 있습니다. Pod에 생성하는 유사성 규칙과 동일한 키-값 쌍이 있는 라벨이 있는 모든 노드에 브로커 Pod를 예약할 수 있습니다.

다음 예제에서는 노드 유사성 규칙을 사용하여 Pod 배치를 제어하도록 브로커를 구성하는 방법을 보여줍니다.

사전 요구 사항

  • CR 인스턴스를 사용하여 기본 브로커 배포를 생성하는 방법을 숙지해야 합니다. 3.4.1절. “기본 브로커 인스턴스 배포”을 참조하십시오.
  • OpenShift Container Platform 클러스터의 노드에 공통 레이블을 할당하여 브로커 Pod를 예약할 수 있습니다(예: zone: emea ).

프로세스

  1. 기본 브로커 CRD를 기반으로 CR(사용자 정의 리소스) 인스턴스를 생성합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. 다운로드 및 추출한 Operator 설치 아카이브의 deploy/crs 디렉터리에 포함된 broker_activemqartemis_cr.yaml 이라는 샘플 CR 파일을 엽니다.
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 기본 브로커 CRD를 기반으로 새 CR 인스턴스를 시작합니다. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. Create ActiveMQArtemis 를 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

  2. CR의 deploymentPlan 섹션에서 affinity,nodeAffinity,requiredDuringSchedulingIgnoredDuringExecution, nodeSelectorTerms 섹션을 추가합니다. nodeSelectorTerms 섹션에서 - matchExpressions 매개변수를 추가하고 일치시킬 노드 레이블의 key-value 문자열을 지정합니다. 예를 들면 다음과 같습니다.

    spec:
      deploymentPlan:
        affinity:
          nodeAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
              - matchExpressions:
                - key: zone
                  operator: In
                  values:
                  - emea

    이 예에서 유사성 규칙을 사용하면 키가 zone 이고 값이 emea 인 모든 노드에서 Pod를 예약할 수 있습니다.

  3. CR 인스턴스를 배포합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. CR 파일을 저장합니다.
      2. 브로커 배포를 생성하는 프로젝트로 전환합니다.

        $ oc project <project_name>
      3. CR 인스턴스를 생성합니다.

        $ oc create -f <path/to/custom_resource_instance>.yaml
    2. OpenShift 웹 콘솔 사용:

      1. CR 구성을 완료하면 생성 을 클릭합니다.

추가 리소스

OpenShift Container Platform의 유사성 규칙에 대한 자세한 내용은 OpenShift Container Platform 설명서의 노드 유사성 규칙을 사용하여 노드에 대한 Pod 배치 제어를 참조하십시오.

4.17.3.2. 유사성 방지 규칙을 사용하여 다른 Pod에 상대적인 Pod 배치

유사성 방지 규칙을 사용하면 노드에서 이미 실행 중인 Pod의 라벨에 따라 브로커 Pod를 예약할 수 있는 Openshift 노드를 제한할 수 있습니다.

유사성 방지 규칙을 사용하여 단일 장애 지점을 생성하는 동일한 Openshift 노드에 여러 브로커 Pod가 예약되지 않도록 할 수 있습니다.

사전 요구 사항

프로세스

  1. 첫 번째 브로커 배포의 ActiveMQArtemis CR 인스턴스를 편집합니다.
  2. CR의 deploymentPlan 섹션에서 labels 섹션을 추가합니다. 두 번째 배포의 레이블을 기반으로 anti-affinity 규칙을 생성할 수 있도록 브로커의 식별 레이블을 생성합니다. 예를 들면 다음과 같습니다.

    spec:
      ...
        deploymentPlan:
          labels:
            name: broker1
  3. CR을 저장합니다.
  4. 두 번째 브로커 배포를 위해 ActiveMQArtemis CR 인스턴스를 편집합니다.
  5. CR의 deploymentPlan 섹션에서 affinity,podAntiAffinity,requiredDuringSchedulingIgnoredDuringExecution, labelSelector 섹션을 추가합니다. labelSelector 섹션에서 matchExpressions 매개변수를 추가하고 일치시킬 레이블의 키-값 문자열을 지정합니다. 이 배포의 Pod는 일치하는 라벨이 있는 Pod가 포함된 노드에 예약할 수 없습니다.

    spec:
      deploymentPlan:
        affinity:
          podAntiAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                    - key: name
                      operator: In
                      values:
                        - broker1
                topologyKey: topology.kubernetes.io/zone

    이 예에서 Pod 유사성 방지 규칙은 Pod가 name 이고 값이 broker1 인 Pod와 동일한 노드에 배치되지 않으며, 이는 첫 번째 배포의 브로커에 할당된 레이블입니다.

  6. CR을 저장합니다.

추가 리소스

OpenShift Container Platform의 유사성 규칙에 대한 자세한 내용은 OpenShift Container Platform 설명서의 노드 유사성 규칙을 사용하여 노드에 대한 Pod 배치 제어를 참조하십시오.

4.18. 브로커의 로깅 구성

AMQ Broker는 Log4j 2 로깅 유틸리티를 사용하여 메시지 로깅을 제공합니다. 브로커를 배포할 때 기본 Log4j 2 구성을 사용합니다. 기본 구성을 변경하려면 시크릿 또는 configMap에 새 Log4j 2 구성을 생성해야 합니다. secret 또는 configMap의 이름을 기본 브로커 CR(사용자 정의 리소스)에 추가한 후 Operator는 Operator가 각 Pod에 마운트하는 파일에 저장된 새 로깅 구성을 사용하도록 각 브로커를 구성합니다.

사전 요구 사항

  • Log4j 2 구성 옵션에 대해 잘 알고 있습니다.

프로세스

  1. AMQ Broker에서 사용할 log4j 2 구성이 포함된 파일을 준비합니다.

    브로커가 사용하는 기본 Log4j 2 구성 파일은 각 브로커 Pod의 /home/jboss/amq-broker/etc/log4j2.properties 파일에 있습니다. 기본 구성 파일의 내용을 시크릿 또는 configMap에 새 Log4j 2 구성을 생성하는 기준으로 사용할 수 있습니다. 기본 Log4j 2 구성 파일의 내용을 가져오려면 다음 단계를 완료합니다.

    1. OpenShift Container Platform 웹 콘솔 사용:

      1. 워크로드포드 를 클릭합니다.
      2. ex-aao-ss s Pod를 클릭합니다.
      3. 터미널 탭을 클릭합니다.
      4. cat 명령을 사용하여 브로커 포드에 /home/jboss/amq-broker/etc/log4j2.properties 파일의 내용을 표시하고 콘텐츠를 복사합니다.
      5. OpenShift Container Platform CLI가 설치된 로컬 파일에 콘텐츠를 붙여넣고 파일을 logging.properties 로 저장합니다.
    2. OpenShift 명령줄 인터페이스 사용:

      1. 배포에서 Pod 이름을 가져옵니다.

        $ oc get pods -o wide
        
        NAME                          STATUS   IP
        amq-broker-operator-54d996c   Running  10.129.2.14
        ex-aao-ss-0                   Running  10.129.2.15
      2. oc cp 명령을 사용하여 Pod에서 로컬 디렉터리로 로그 구성 파일을 복사합니다.

        $ oc cp <pod name>:/home/jboss/amq-broker/etc/log4j2.properties logging.properties -c <name>-container

        여기서 <name> 부분은 컨테이너 이름의 -ss 문자열 앞에 있는 접두사입니다. 예를 들면 다음과 같습니다.

        $ oc cp ex-aao-ss-0:/home/jboss/amq-broker/etc/log4j2.properties logging.properties -c ex-aao-container
        참고

        파일에서 configMap 또는 보안을 생성할 때 configMap 또는 secret의 키는 파일 이름으로 기본 설정되고 값은 파일 콘텐츠로 설정됩니다. logging.properties 라는 파일에서 보안을 생성하면 새 로깅 구성에 필요한 키가 secret 또는 configMap에 삽입됩니다.

  2. logging.properties 파일을 편집하고 AMQ Broker에서 사용할 Log4j 2 구성을 생성합니다.

    예를 들어 기본 구성을 사용하면 AMQ Broker는 메시지를 콘솔에만 기록합니다. AMQ Broker가 디스크에 메시지를 기록하도록 구성을 업데이트할 수 있습니다.

  3. 업데이트된 Log4j 2 구성을 시크릿 또는 ConfigMap에 추가합니다.

    1. 브로커 배포를 위해 프로젝트에서 시크릿 또는 ConfigMap을 생성할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

      oc login -u <user> -p <password> --server=<host:port>
    2. 시크릿에 로그 설정을 구성하려면 oc create secret 명령을 사용합니다. 예를 들면 다음과 같습니다.

      oc create secret generic newlog4j-logging-config --from-file=logging.properties
    3. ConfigMap에서 로그 설정을 구성하려면 oc create configmap 명령을 사용합니다. 예를 들면 다음과 같습니다.

      oc create configmap newlog4j-logging-config --from-file=logging.properties

      Operator에 새 로깅 구성이 포함되어 있음을 인식할 수 있도록 configMap 또는 시크릿 이름의 접미사가 -logging-config 여야 합니다.

  4. 브로커 배포의 CR(사용자 정의 리소스) 인스턴스에 시크릿 또는 ConfigMap을 추가합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 왼쪽 창에서 OperatorsInstalled Operator 를 클릭합니다.
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
      4. AMQ Broker 탭을 클릭합니다.
      5. ActiveMQArtemis 인스턴스 이름을 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

    3. Log4j 2 로깅 구성이 포함된 secret 또는 configMap을 CR에 추가합니다. 다음 예제에서는 CR에 추가된 보안 및 configMap을 보여줍니다.

      apiVersion: broker.amq.io/v1beta1
      kind: ActiveMQArtemis
      metadata:
        name: ex-aao
      spec:
        deploymentPlan:
          ...
          extraMounts:
            secrets:
            - "newlog4j-logging-config"
          ...
      apiVersion: broker.amq.io/v1beta1
      kind: ActiveMQArtemis
      metadata:
        name: ex-aao
      spec:
        deploymentPlan:
          ...
          extraMounts:
            configMaps:
            - "newlog4j-logging-config"
          ...
  5. CR을 저장합니다.

각 브로커 Pod에서 Operator는 생성한 시크릿 또는 configMap에 로깅 구성이 포함된 logging.properties 파일을 마운트합니다. 또한 Operator는 기본 로그 구성 파일 대신 마운트된 로그 구성 파일을 사용하도록 각 브로커를 구성합니다.

참고

configMap 또는 시크릿에서 로깅 구성을 업데이트하면 각 브로커는 업데이트된 로깅 구성을 자동으로 사용합니다.

4.19. Pod 중단 예산 구성

Pod 중단 예산은 유지 관리 창과 같이 자발적으로 중단되는 동안 동시에 사용할 수 있어야 하는 클러스터의 최소 Pod 수를 지정합니다.

프로세스

  1. 브로커 배포의 CR 인스턴스를 편집합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
      2. 배포에 사용할 CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift Container Platform에 로그인합니다.
      2. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
      3. ActiveMQArtemis CRD를 클릭합니다.
      4. Instances 탭을 클릭합니다.
      5. 브로커 배포에 사용할 인스턴스를 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.

  2. CR의 spec 섹션에서 podDisruptionBudget 요소를 추가하고 자발적으로 중단하는 동안 사용할 수 있어야 하는 배포의 최소 Pod 수를 지정합니다. 다음 예에서는 최소 하나의 Pod를 사용할 수 있어야 합니다.

    spec:
      ...
      podDisruptionBudget:
        minAvailable: 1
      ...
  3. CR을 저장합니다.

4.20. 관리 작업에 대한 역할 기반 액세스 제어 구성

RBAC(역할 기반 액세스 제어)는 속성 및 메서드의 액세스를 제한하는 데 사용됩니다. Cryostat는 AMQ Broker에서 관리 작업을 지원하기 위해 관리 API를 노출하는 방법입니다. 이전에는 ActiveMQArtemisSecurity CR(사용자 정의 리소스)에서 RBAC 구성을 설정하고 변경 사항을 적용하기 위해 브로커를 다시 시작하여 Cryostat에 대한 액세스를 제한할 수 있었습니다. 7.12부터 ActiveMQArtemis CR의 Cryostat에 대한 액세스를 제한할 수 있으며 변경 사항을 적용하려면 브로커를 다시 시작할 필요가 없습니다.

프로세스

  1. 브로커 배포에 사용할 ActiveMQArtemis CR 인스턴스를 편집합니다.
  2. 다음 환경 변수를 추가하여 ActiveMQArtemis CR에 지정하는 RBAC 구성을 사용하도록 브로커를 구성합니다.

    spec:
      ..
      env:
      - name: JAVA_ARGS_APPEND
        value: "-Dhawtio.role=* -Djavax.management.builder.initial=org.apache.activemq.artemis.core.server.management.ArtemisRbacMBeanServerBuilder"
      ..
  3. brokerProperties 속성에서 관리 작업에 대한 역할 기반 액세스 제어 구성을 추가합니다.

    관리 작업의 일치 주소 형식은 다음과 같습니다.

    mops.<리소스 유형otherwise리소스 이름>.<작업>

    예를 들어 다음 구성은 manager 역할 보기를 부여하고 activemq.management 주소에 대한 편집 권한을 부여합니다. 작업 위치의 별표(*)는 모든 작업에 대한 액세스 권한을 부여합니다.

    spec:
      ..
      brokerProperties:
      - securityRoles."mops.address.activemq.management.*".manager.view=true
      - securityRoles."mops.address.activemq.management.*".manager.edit=true

    다음 예에서 mops 접두사 뒤의 숫자 기호(#)는 amq 역할 보기를 부여하고 모든 Cryostat에 대한 권한을 편집합니다.

    spec:
      ..
      brokerProperties:
      - securityRoles."mops.#".amq.view=true
      - securityRoles."mops.#".amq.edit=true
      ..
  4. 다음 예와 같이 resourceTemplates 속성을 사용하여 스크립트를 실행하는 init 컨테이너를 정의하여 각 브로커 컨테이너의 /amq/init/config/amq-broker/etc/management.xml 파일에서 기본 RBAC 구성을 제거합니다. 브로커가 ActiveMQArtemis CR에서 생성한 새 RBAC 구성을 사용하도록 기본 RBAC 구성을 제거해야 합니다.

    spec:
      ..
      resourceTemplates:
      - selector:
          kind: "StatefulSet"
        patch:
          kind: "StatefulSet"
          spec:
          template:
           spec:
            initContainers:
            - name: "<BROKER_NAME>-container-init"
              args:
              -  '-c'
              -  '/opt/amq/bin/launch.sh && /opt/amq-broker/script/default.sh; echo "Empty management.xml";echo "<management-context xmlns=\"http://activemq.apache.org/schema\" />" > /amq/init/config/amq-broker/etc/management.xml'

    <BROKER_NAME>을 CR 인스턴스의 metadata.name 속성 값으로 바꿉니다.

  5. CR을 저장합니다.

4.21. Operator에서 생성한 Openshift 리소스 사용자 정의

AMQ Broker 배포는 배포, Pod, 상태 저장 세트 및 서비스 리소스와 같은 OpenShift 리소스를 생성합니다. 이러한 리소스는 AMQ Broker Operator가 관리합니다. 특정 OpenShift 리소스를 관리하는 Operator만 해당 리소스를 변경할 수 있습니다.

다음과 같은 특정 작업을 수행하려는 경우 Operator가 관리하는 OpenShift 리소스를 사용자 정의하는 것이 유용할 수 있습니다.

  • 다른 서비스에서 리소스를 처리하는 방법을 제어하는 사용자 지정 주석을 추가합니다.
  • 브로커 사용자 정의 리소스에 노출되지 않는 속성 수정

resourceTemplates 속성을 사용하여 AMQ Broker Operator가 생성한 리소스를 사용자 지정할 수 있습니다. 리소스에 주석 또는 레이블을 추가하려면 주석 또는 라벨 속성을 포함하도록 resourceTemplates 속성을 구성합니다. 다음 예에서 annotations 속성은 Operator가 관리하는 모든 서비스에 주석을 추가하는 데 사용됩니다.

spec:
  ..
  resourceTemplates:
   - selector:
       kind: "Service"
     annotations:
       name: "amq-operator-managed"
  ..
참고

selector 속성은 사용자 지정되는 Operator 관리 리소스를 결정합니다. 예를 들어 selector 값은 kind: "Service" 이며 모든 서비스 리소스를 사용자 지정합니다. selector 속성이 비어 있으면 모든 Operator 관리 리소스에 변경 사항이 적용됩니다.

리소스에 대한 주석 또는 레이블이 아닌 항목을 사용자 지정하려면 resourceTemplates 속성과 함께 patch 속성을 사용해야 합니다. patch 속성을 지정하면 Operator는 전략적 병합을 사용하여 리소스를 업데이트합니다.

참고

patch 속성을 사용하는 경우 업데이트할 특정 리소스를 식별하려면 selector 속성을 채워야 합니다.

다음 예에서 patch 속성은 StatefulSet 리소스에서 minReadySeconds 속성의 기본값을 변경하는 데 사용됩니다.

spec:
  ..
  resourceTemplates:
  - selector:
      kind: "StatefulSet"
    patch:
      kind: "StatefulSet"
      spec:
       template:
        spec:
          minReadySeconds: 10
  ..

추가 리소스

전략적 병합에 대한 자세한 내용은 전략적 병합 패치를 사용하여 배포 업데이트를 참조하십시오.

4.22. AMQ Broker에 플러그인 등록

CR의 brokerProperties 속성에 플러그인을 등록하여 AMQ Broker의 기능을 확장할 수 있습니다.

프로세스

  1. 브로커 배포의 CR(사용자 정의 리소스)을 편집합니다.
  2. brokerProperties 속성에서 플러그인의 클래스 이름을 지정하고 플러그인의 속성을 정의하는 <key>=<value> 쌍의 쉼표로 구분된 문자열을 포함합니다.

    다음 예에서는 AMQ Broker와 함께 제공되는 LoggingActiveMQServerPlugin 플러그인이 등록됩니다.

    spec:
      ...
      brokerProperties:
      - brokerPlugins.\"org.apache.activemq.artemis.core.server.plugin.impl.LoggingActiveMQServerPlugin.class\".init=LOG_CONNECTION_EVENTS=true,LOG_SESSION_EVENTS=true,LOG_CONSUMER_EVENTS=true
      ...
  3. CR을 저장합니다.

    플러그인 인스턴스가 생성되면 init 메서드가 플러그인의 속성을 설정하는 데 사용되는 <key>=<value> 쌍을 포함하는 문자열을 전달합니다.

참고

사용자 지정 플러그인을 생성하는 경우 플러그인 클래스의 JAR 파일이 브로커의 Java 클래스 경로에 있는지 확인합니다. 자세한 내용은 4.4절. “타사 JAR 파일 추가”의 내용을 참조하십시오.

4.22.1. brokerProperties 구성 분리

CR에 brokerProperties 섹션이 포함되어 있고 CR이 최대 크기 제한 1MB인 경우 brokerProperties 구성을 하나 이상의 Java 속성 파일로 분리할 수 있습니다. 또한 별도의 파일에서 brokerProperties 구성을 분리하여 유지 관리를 위해 brokerProperties 항목을 논리적으로 그룹화해야 할 수 있습니다.

프로세스

  1. 브로커에 적용할 brokerProperties 구성이 포함된 Java 속성 형식으로 파일을 생성합니다. 속성 파일에서 각 속성을 별도의 줄에 추가합니다. 예를 들면 다음과 같습니다.

    securityRoles.address1.group2.send=true
    securityRoles.address2.group1.consume=true
    securityRoles.address2.group2.createAddress=true
  2. .properties 확장자를 사용하여 파일을 저장합니다(예: securityRoles.properties ).
  3. 생성한 .properties 파일이 포함된 보안을 생성합니다.

    oc create secret generic address-settings-bp --from-file=securityRoles.properties
    참고

    시크릿 이름에는 -bp 접미사가 있어야 합니다. 시크릿에 -bp 접미사가 있는 경우 Operator는 브로커가 브로커 Pod에 마운트된 디렉터리에서 속성 파일을 검색하도록 구성합니다.

  4. Operator가 각 브로커 Pod의 시크릿에 있는 속성 파일을 마운트하도록 extraMounts 속성 속성의 보안에 대한 참조를 추가합니다.

    deploymentPlan:
      ...
      extraMounts:
        secrets:
        - "address-settings-bp"
      ...

    Operator는 시크릿에 있는 .properties 파일을 각 브로커 Pod의 /amq/extra/secrets/ <secret name > 디렉터리에 마운트합니다.

    시작 시 브로커는 .properties 확장자가 있는 파일을 각각 마운트하고, 파일을 알파벳순으로 정렬하고, 파일의 구성을 차례로 적용합니다. 속성 파일 내에서 브로커는 속성이 나열된 순서대로 적용됩니다.

4.23. 고가용성을 위해 leader-follower 브로커 배포 구성

leader-follower 구성에는 별도의 배포에 단일 브로커가 있습니다. 각 배포의 브로커는 동일한 JDBC 데이터베이스를 사용하여 메시지를 저장하도록 구성해야 합니다. 데이터베이스 전용 액세스 권한을 부여하는 JDBC 잠금을 얻기 위해 경쟁하는 브로커에 의해 고가용성을 달성합니다. JDBC 잠금을 얻는 브로커는 클라이언트 요청을 제공하는 리더 브로커가 됩니다. JDBC 잠금을 취득하지 못하는 브로커는 후속 조치가 됩니다. 팔로워는 지속적으로 JDBC 잠금을 획득하려고 시도하며, 성공하면 즉시 클라이언트를 제공하는 리더가 됩니다.

leader-follower 배포는 하나 이상의 브로커를 사용하는 단일 배포를 위해 Openshift에서 제공하는 노드 장애로부터 복구(MTTR)할 때 보다 신속하게 복구(MTTR)할 수 있습니다. 리더-추어 배포에서 브로커는 클러스터 장애로부터 보호하기 위해 별도의 클러스터에 있을 수 있습니다. 이러한 클러스터는 다른 데이터 센터에 있을 수 있으므로 데이터 센터 중단에 브로커 서비스를 탄력적으로 만들 수도 있습니다.

사전 요구 사항

AMQ Broker에서 사용하려는 JDBC 데이터베이스의 JAR 파일이 포함된 컨테이너 이미지가 있습니다. 컨테이너 이미지 생성에 대한 자세한 내용은 Openshift 설명서에서 이미지 생성 을 참조하십시오. 각 브로커의 구성에서 init 컨테이너를 지정하여 컨테이너 이미지에서 런타임 시 브로커에 사용할 수 있는 위치로 JAR 파일을 복사할 수 있습니다.

  1. 별도의 브로커 배포를 생성하도록 두 개의 ActiveMQArtemis 사용자 지정 리소스 인스턴스를 구성합니다.

    각 사용자 정의 리소스에서 고유한 이름을 지정하고 클러스터형persistenceEnabled 속성이 false 로 설정되어 있는지 확인합니다. size 속성을 1 로 설정하여 각 배포에서 단일 브로커를 생성합니다. 예를 들면 다음과 같습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: peer-broker-a
    spec:
      deploymentPlan:
        size: 1
        clustered: false
        persistenceEnabled: false
    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: peer-broker-b
    spec:
      deploymentPlan:
        size: 1
        clustered: false
        persistenceEnabled: false
    참고

    동일한 Openshift 클러스터에서 두 브로커 배포를 모두 구성하는 경우 브로커 Pod가 클러스터의 개별 노드에 프로비저닝되므로 두 브로커는 노드 장애의 영향을 받지 않습니다. 노드에서 Pod 배치를 제어하는 방법에 대한 자세한 내용은 4.17절. “OpenShift Container Platform 노드에서 브로커 Pod 배치 제어” 을 참조하십시오.

  2. 각 브로커 구성에 활성 프로브를 추가합니다.

    활성 상태 프로브를 구성하지 않으면 브로커의 상태를 확인하기 위해 기본 프로브가 활성화됩니다. 기본 프로브는 AMQ 관리 콘솔에 연결할 수 있는지 확인합니다. leader-follower 구성에서 특정 시간에 후속 조치인 브로커의 AMQ 관리 콘솔에 연결할 수 없으므로 해당 브로커에서 활성 프로브가 실패합니다. 활성 프로브가 실패할 때마다 브로커를 재시작하여 브로커를 영구 재시작 루프에 배치합니다. 결과적으로 후속 브로커는 CrashLoopBackOff 상태로 전환되고 현재 리더가 실패하면 리더가 될 수 없습니다.

    기본 활성 프로브가 실행되지 않도록 하려면 브로커가 리더 또는 후속자일 때 성공적으로 실행할 수 있는 활성 상태 프로브를 구성해야 합니다. 다음 예에서 활성 프로브는 브로커를 실행하는 명령이 실행되었는지 확인합니다. 이 명령은 cli.lock 파일의 존재로 표시됩니다.

    spec:
      ..
      livenessProbe:
        exec:
          command:
          - test
          - -f
          - /home/jboss/amq-broker/lock/cli.lock
      ..

    활성 프로브 구성에 대한 자세한 내용은 4.15.2절. “활성 상태 프로브 및 준비 상태 프로브 구성” 을 참조하십시오.

  3. 각 브로커 구성에서 brokerProperties 속성을 사용하여 JDBC 데이터베이스 지속성을 활성화합니다. 예를 들면 다음과 같습니다.

    spec:
      ..
      brokerProperties:
      - storeConfiguration=DATABASE
      - storeConfiguration.jdbcDriverClassName=<class name>
      - storeConfiguration.jdbcConnectionUrl=jdbc:<Database URL>
      - HAPolicyConfiguration=SHARED_STORE_PRIMARY
      - storeConfiguration.jdbcLockRenewPeriodMillis=2000
      - storeConfiguration.jdbcLockExpirationMillis=6000

    JDBC 데이터베이스 지속성 활성화에 대한 자세한 내용은 4.5.2절. “데이터베이스 지속성 구성” 을 참조하십시오.

  4. 각 브로커 구성에서 JDBC 데이터베이스에 연결하는 데 필요한 JAR 파일을 로드하도록 브로커를 구성합니다.

    • resourceTemplates 특성을 사용하여 각 브로커에 대한 StatefulSet 리소스를 사용자 지정합니다. 사용자 지정에서 patch 속성을 사용하여 준비한 사용자 지정 컨테이너 이미지에서 JAR 파일을 브로커 Pod에 복사하는 init 컨테이너를 지정합니다.
    • env 속성을 사용하여 ARTEMIS_EXTRA_LIBS 환경 변수를 생성하여 JDBC 데이터베이스의 JAR 파일이 복사되는 디렉터리를 포함하도록 브로커의 Java 클래스 경로를 확장합니다. Java classpath를 확장하면 브로커는 런타임 시 Pod의 지정된 디렉터리에서 JAR 파일을 로드할 수 있습니다.

      spec:
        ..
        env:
        - name: ARTEMIS_EXTRA_LIBS
          value: '/amq/init/config/extra-libs'
        resourceTemplates:
        - selector:
            kind: StatefulSet
          patch:
            kind: StatefulSet
            spec:
              template:
                spec:
                  initContainers:
                  - name: jdbc-driver-init
                    image: <custom container image with JAR>
                    volumeMounts:
                    - name: amq-cfg-dir
                      mountPath: /amq/init/config
                    command:
                    - "bash"
                    - "-c"
                    - "mkdir -p /amq/init/config/extra-libs && cp <__JAR file_> /amq/init/config/extra-libs"

      Operator에서 생성한 Openshift 리소스를 사용자 정의하는 방법에 대한 자세한 내용은 4.21절. “Operator에서 생성한 Openshift 리소스 사용자 정의” 을 참조하십시오.

  5. 각 사용자 정의 리소스를 저장합니다.

    다음 예제에서는 Oracle 데이터베이스를 사용하는 leader-follower 브로커 배포를 위한 전체 구성을 보여줍니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: peer-broker-a
    spec:
      deploymentPlan:
        size: 1
        clustered: false
        persistenceEnabled: false
        livenessProbe:
          exec:
            command:
            - test
            - -f
            - /home/jboss/amq-broker/lock/cli.lock
      env:
        - name: ARTEMIS_EXTRA_LIBS
          value: '/amq/init/config/extra-libs'
      brokerProperties:
        - criticalAnalyser=false
        - storeConfiguration=DATABASE
        - storeConfiguration.jdbcDriverClassName=oracle.jdbc.OracleDriver
        - storeConfiguration.jdbcConnectionUrl=jdbc:<Database URL>
        - storeConfiguration.jdbcLockRenewPeriodMillis=2000
        - storeConfiguration.jdbcLockExpirationMillis=6000
        - HAPolicyConfiguration=SHARED_STORE_PRIMARY
      acceptors:
      - name: ext-acceptor
        protocols: CORE
        port: 61626
        expose: true
        sslEnabled: true
        sslSecret: ext-acceptor-ssl-secret
      console:
        expose: true
      resourceTemplates:
      - selector:
          kind: StatefulSet
        patch:
          kind: StatefulSet
          spec:
            template:
              spec:
                initContainers:
                - name: oracle-database-jdbc-driver-init
                  image: <custom container image with JAR>
                  volumeMounts:
                  - name: amq-cfg-dir
                    mountPath: /amq/init/config
                  command:
                  - "bash"
                  - "-c"
                  - "mkdir -p /amq/init/config/extra-libs && cp <JAR file> /amq/init/config/extra-libs"
    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: peer-broker-b
    spec:
      deploymentPlan:
        size: 1
        clustered: false
        persistenceEnabled: false
        livenessProbe:
          exec:
            command:
            - test
            - -f
            - /home/jboss/amq-broker/lock/cli.lock
      env:
        - name: ARTEMIS_EXTRA_LIBS
          value: '/amq/init/config/extra-libs'
      brokerProperties:
        - criticalAnalyser=false
        - storeConfiguration=DATABASE
        - storeConfiguration.jdbcDriverClassName=oracle.jdbc.OracleDriver
        - storeConfiguration.jdbcConnectionUrl=jdbc:<Database URL>
        - storeConfiguration.jdbcLockRenewPeriodMillis=2000
        - storeConfiguration.jdbcLockExpirationMillis=6000
        - HAPolicyConfiguration=SHARED_STORE_PRIMARY
      acceptors:
      - name: ext-acceptor
        protocols: CORE
        port: 61626
        expose: true
        sslEnabled: true
        sslSecret: ext-acceptor-ssl-secret
      console:
        expose: true
      resourceTemplates:
      - selector:
          kind: StatefulSet
        patch:
          kind: StatefulSet
          spec:
            template:
              spec:
                initContainers:
                - name: oracle-database-jdbc-driver-init
                  image: <custom container image with JAR>
                  volumeMounts:
                  - name: amq-cfg-dir
                    mountPath: /amq/init/config
                  command:
                  - "bash"
                  - "-c"
                  - "mkdir -p /amq/init/config/extra-libs && cp <JAR file> /amq/init/config/extra-libs"

4.24. 재해 복구를 위한 데이터 미러링 구성

미러링은 재해 복구를 위해 브로커에서 하나 이상의 다른 브로커로 데이터를 복사하는 프로세스입니다. 미러의 소스 및 대상 브로커는 데이터 센터 중단을 방지하기 위해 다른 데이터 센터의 별도의 OpenShift 클러스터에 있을 수 있습니다. 미러링은 데이터 백업에 사용하거나 유지 관리 기간 중에 사용할 장애 조치 브로커를 생성할 수도 있습니다.

참고

미러가 생성되기 전에 존재하는 메시지는 미러링되지 않습니다.

프로세스

  1. 두 개의 ActiveMQArtemis CR(사용자 정의 리소스) 인스턴스를 구성하여 소스 브로커와 미러링된 데이터에 대한 대상 브로커를 생성합니다. 각각에 대해 고유한 이름을 지정합니다. 예를 들면 다음과 같습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: production-broker
      namespace: production
    spec:
      deploymentPlan:
        size: 1
    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: mirror-broker
      namespace: dr
    spec:
      deploymentPlan:
        size: 1
  2. 대상 브로커의 CR에 미러 연결에 대한 어셉터를 추가합니다. 예를 들면 다음과 같습니다.

    metadata:
      name: mirror-broker
      namespace: dr
    spec:
      ...
      acceptors:
      - expose: true
        name: amqp
        port: 5672
        protocols: amqp
      ...

    어셉터를 생성하면 다음 형식으로 수락자에 대한 경로가 노출됩니다.

    <브로커 이름>-<수락자 이름>-<ordinal>-svc-rte.<namespace>.<hostname>

    이 절차의 뒷부분에서 소스 브로커에 미러 구성을 추가하면 이 경로를 사용하여 대상 브로커에 대한 연결을 생성합니다.

    <ordinal>은 StatefulSet에 의해 브로커 Pod에 할당된 서수입니다. 클러스터의 첫 번째 브로커 포드에 0이 할당됩니다. 두 번째 포드에는 1의 오디널이 할당됩니다. Pod의 ordinal 값은 STATEFUL_SET_ORDINAL 변수에 저장됩니다. 소스 브로커의 미러 연결 세부 정보에서 서수 값 대신 이 변수를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

    <브로커 이름>-<수락자 이름>-$STATEFUL_SET_ORDINAL}-svc-rte.<namespace>.<hostname>

    STATEFUL_SET_ORDINAL 변수를 사용하면 소스 및 대상 클러스터의 브로커 수를 확장하면 소스가 동일한 오디네탈 대상에 대한 미러 연결을 생성해야 합니다.

  3. 미러 연결을 통해 데이터를 안전하게 보내려면 연결에 대한 TLS(Transport Layer Security)를 구성합니다. 요구 사항에 따라 다양한 방법을 사용하여 SSL/TLS 인증서를 생성할 수 있습니다. 예를 들어 신뢰할 수 있는 CA(인증 기관), cert-manager Operator for OpenShift 또는 SSL(Secure Sockets Layer) 툴을 사용할 수 있습니다.

    다음 예제에서는 SSL/TLS 툴을 사용하여 자체 서명된 인증서를 수동으로 생성하여 브로커 간에 상호 TLS 인증(mTLS)을 구성하는 단계를 요약합니다.

    1. 대상 브로커의 자체 서명된 SSL/TLS 인증서를 생성합니다. 예를 들면 다음과 같습니다.

      keytool -genkey -trustcacerts -alias 브로커 -keyalg RSA -keystore broker.ks -keypass 암호 -storepass 암호

    2. 생성한 SSL/TLS 인증서의 공개 키를 파일로 내보내 소스 브로커에서 사용할 키를 신뢰 저장소 파일로 가져올 수 있습니다. 예를 들면 다음과 같습니다.

      keytool -export -noprompt -alias broker -keystore broker.ks -file for_source_truststore -storepass 암호

    3. 소스 브로커에서 사용할 신뢰 저장소 파일로 내보낸 SSL/TLS 인증서의 공개 키를 가져옵니다. 예를 들면 다음과 같습니다.

      keytool -import -noprompt -trustcacerts -alias broker -keystore client.ts -file for_source_truststore -storepass 암호

    4. 소스 브로커의 자체 서명된 SSL/TLS 인증서를 생성합니다. 예를 들면 다음과 같습니다.

      keytool -genkey -trustcacerts -alias 브로커 -keyalg RSA -keystore broker.ks -keypass 암호 -storepass 암호

    5. 생성한 SSL/TLS 인증서의 공개 키를 내보내 대상 브로커에서 사용할 키를 신뢰 저장소 파일로 가져올 수 있습니다.

      keytool -export -noprompt -alias broker -keystore broker.ks -file for_target_truststore -storepass 암호

    6. 대상 브로커에서 사용할 신뢰 저장소 파일로 내보낸 SSL/TLS 인증서의 공개 키를 가져옵니다. 예를 들면 다음과 같습니다.

      keytool -import -noprompt -trustcacerts -alias broker -keystore client.ts -file for_target_truststore -storepass 암호

    7. 소스 브로커용으로 생성한 키 저장소 및 신뢰 저장소 파일을 소스 브로커의 네임스페이스에 있는 시크릿에 추가합니다. 예를 들면 다음과 같습니다.

      oc create secret generic mirror --from-file=broker.ks=broker.ks --from-file=client.ts --from-literal=keyStorePassword=password --from-literal=trustStorePassword=password

      이 단계를 반복하여 대상 브로커에 대해 생성한 키 저장소 및 신뢰 저장소 파일을 대상 브로커의 네임스페이스의 시크릿에 추가합니다.

    8. 대상 브로커에 대해 구성된 수락자에서 sslEnabled 속성을 true 로 설정하고 대상 브로커의 네임스페이스에서 생성한 시크릿 이름을 지정합니다. 예를 들면 다음과 같습니다.

      metadata:
        name: mirror-broker
        namespace: dr
      spec:
        ...
        acceptors:
        - expose: true
          name: amqp
          port: 5672
          protocols: amqp
          sslEnabled: true
          sslSecret: mirror
        ...
    9. 소스 브로커의 CR에서 소스 브로커의 네임스페이스에서 생성한 보안에 대한 참조를 extraMounts 속성에 추가합니다. Operator가 각 브로커 Pod의 시크릿에 키 저장소 및 신뢰 저장소 파일을 마운트하려면 이 단계가 필요합니다. 예를 들면 다음과 같습니다.

      spec:
        ...
        deploymentPlan:
          extraMounts:
            secrets:
            - mirror
        ...

      시크릿의 키 저장소 및 신뢰 저장소 파일은 브로커 Pod의 /amq/extra/secrets/<시크릿 이름 > 디렉터리에 마운트됩니다.

  4. 소스 브로커의 CR에서 brokerProperties 속성 아래에 있는 미러 연결 세부 정보를 구성합니다. 연결 URI의 경우 대상 브로커에서 생성한 어셉터에 대해 노출된 경로를 지정합니다. SSL/TLS를 사용하여 미러 연결을 보호하려면 URI에 다음을 포함합니다.

    • 포트 번호 443
    • SSL/TLS를 활성화하는 sslEnabled=true
    • 키 저장소 및 신뢰 저장소 파일의 경로와 인증 정보

    예를 들면 다음과 같습니다.

    spec:
      ...
      brokerProperties:
      - AMQPConnections.datacenter1.uri=tcp://broker-dr-amqp-${STATEFUL_SET_ORDINAL}-svc-rte-dr.apps.lab.redhat.com:443?;sslEnabled=true;trustStorePath=/amq/extra/secrets/mirror/client.ts;trustStorePassword=password;keyStorePath=/amq/extra/secrets/mirror/broker.ks;keyStorePassword=password
      - AMQPConnections.datacenter1.connectionElements.mirror.type=MIRROR
      ...
    참고

    필요한 경우 소스 브로커에 대한 여러 미러 대상을 구성할 수 있습니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      brokerProperties:
      - AMQPConnections.datacenter1.uri=tcp://primary-mirror-broker-amqp-${STATEFUL_SET_ORDINAL}-svc.dr.svc.cluster.local:61616
      - AMQPConnections.datacenter1.connectionElements.mirror.type=MIRROR
      - AMQPConnections.datacenter2.uri=tcp://backup-mirror-broker-amqp-${STATEFUL_SET_ORDINAL}-svc.dr.svc.cluster.local:61616
      - AMQPConnections.datacenter2.connectionElements.mirror.type=MIRROR
      ...
  5. 소스 브로커의 CR에서 필요에 따라 추가 미러 구성 속성을 구성합니다. 예를 들면 다음과 같습니다.

    - AMQPConnections.datacenter1.user=admin
    - AMQPConnections.datacenter1.password=admin
    - AMQPConnections.datacenter1.retryInterval=5000
    - AMQPConnections.datacenter1.connectionElements.mirror.messageAcknowledgements=true
    - AMQPConnections.datacenter1.connectionElements.mirror.queueCreation=true
    - AMQPConnections.datacenter1.connectionElements.mirror.queueRemoval=true
    - AMQPConnections.datacenter1.connectionElements.mirror.addressFilter=addresses
    참고

    영숫자 문자열을 사용하여 AMQP 연결의 이름을 지정할 수 있습니다. 이전 예에서 AMQP 연결 이름은 datacenter1 입니다.

    AMQPConnections.<name>.user
    필요한 이벤트를 미러링할 수 있는 권한이 있는 대상 브로커의 사용자 이름입니다.
    AMQPConnections.<이름>.password
    대상 브로커에 있는 사용자의 암호입니다.
    AMQPConnections.<name>.retryInterval
    대상 브로커에 연결을 시도하는 사이의 간격(밀리초)입니다.
    AMQPConnections.<name>.connectionElements.mirror.messageAcknowledgements
    메시지 승인이 미러링되는지 여부를 지정합니다. 기본값은 true입니다.
    AMQPConnections.<name>.connectionElements.mirror.queueCreation
    큐 또는 주소 생성 이벤트가 미러링되는지 여부를 지정합니다. 기본값은 true입니다.
    AMQPConnections.<name>.connectionElements.mirror.queueRemoval
    큐 또는 주소 제거 이벤트가 미러링되는지 여부를 지정합니다. 기본값은 true입니다.
    AMQPConnections.<name>.connectionElements.mirror.addressFilter

    소스 브로커가 이벤트가 미러링되는 주소를 포함하거나 제외하는 데 사용할 수 있는 필터입니다. 예를 들어 임시 큐가 미러링되지 않도록 제외하려고 할 수 있습니다.

    필터를 쉼표로 구분된 주소 목록으로 지정합니다. 제외할 주소 목록을 지정하려면 각 주소 앞에 느낌표(!)를 추가합니다. 다음 예에서 us.europe. 로 시작하는 주소에 대한 이벤트는 미러링되지 않습니다.

    AMQPConnections.<name>.connectionElements.mirror.addressFilter=!us.,!europe.

    참고

    포함할 주소를 하나 이상 지정하면 다른 모든 주소에 대한 이벤트가 미러링되지 않습니다. 제외할 주소를 하나 이상 지정하면 다른 모든 주소에 대한 이벤트가 미러링됩니다.

  6. 소스 브로커에 대한 CR의 status 섹션에서 BrokerPropertiesApplied 조건의 상태가 true 인지 확인하여 CR에 지정한 모든 속성이 적용되었는지 확인합니다. 자세한 내용은 3.7절. “브로커 배포에 대한 상태 정보 보기”의 내용을 참조하십시오.
  7. 다음과 유사한 행이 소스 브로커 Pod의 로그를 확인하여 미러 연결이 설정되었는지 확인합니다.

    broker-prod-ss-0 broker-prod-container Connected 서버 AMQP 연결 dr의 broker-dr-amqp-0-svc-rte-dr.lab.redhat.com:443 후 0 재시도 후

5장. Operator 기반 브로커 배포를 위한 AMQ 관리 콘솔에 연결

Operator 기반 배포의 각 브로커 Pod는 포트 8161에서 AMQ 관리 콘솔의 자체 인스턴스를 호스팅합니다.

다음 절차에서는 배포된 브로커를 위해 AMQ 관리 콘솔에 연결하는 방법을 설명합니다.

사전 요구 사항

5.1. AMQ 관리 콘솔에 연결

브로커 배포에 대한 CR(사용자 정의 리소스) 인스턴스에서 AMQ 관리 콘솔에 대한 액세스를 활성화하면 Operator는 AMQ Management Console에 대한 액세스를 제공할 각 브로커 Pod에 대한 전용 서비스 및 경로를 자동으로 생성합니다.

자동으로 생성된 서비스의 기본 이름은 < custom-resource-name> -wconsj- <broker-pod-ordinal> -svc 형식으로 되어 있습니다. 예를 들어 my-broker-deployment-wconsj-0-svc. 자동으로 생성된 경로의 기본 이름은 < custom-resource-name> -wconsj- <broker-pod-ordinal> -svc-rte 형식으로 되어 있습니다. 예를 들어 my-broker-deployment-wconsj-0-svc-rte.

다음 절차에서는 실행 중인 브로커 Pod의 콘솔에 액세스하는 방법을 보여줍니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 네트워킹 경로를클릭합니다.

    경로 페이지에서 지정된 브로커 Pod의 wconsj 경로를 식별합니다. 예를 들어 my-broker-deployment-wconsj-0-svc-rte.

  2. Location 에서 경로에 해당하는 링크를 클릭합니다.

    웹 브라우저에서 새 탭이 열립니다.

  3. 관리 콘솔 링크를 클릭합니다.

    AMQ Management 콘솔 로그인 페이지가 열립니다.

    참고

    인증 정보는 CR의 requireLogin 속성이 true 로 설정된 경우에만 AMQ Management Console에 로그인해야 합니다. 이 속성은 브로커 AMQ 관리 콘솔에 로그인하는 데 로그인 인증 정보가 필요한지 여부를 지정합니다. 기본적으로 requireLogin 속성은 false 로 설정됩니다. requireLoginfalse 로 설정된 경우 사용자 이름과 암호를 입력하라는 메시지가 표시되면 텍스트를 입력하여 유효한 사용자 이름과 암호를 제공하지 않고 AMQ Management Console에 로그인할 수 있습니다.

  4. requireLogin 속성이 true 로 설정된 경우 사용자 이름과 암호를 입력합니다.

    브로커 및 AMQ 관리 콘솔에 연결하는 데 사용할 수 있는 사전 구성된 사용자의 인증 정보를 입력할 수 있습니다. 이러한 속성이 CR(사용자 정의 리소스) 인스턴스에 구성된 경우 adminUseradminPassword 속성에서 이러한 인증 정보를 찾을 수 있습니다. 이러한 속성은 CR에 구성되지 않고 Operator에서 인증 정보를 자동으로 생성합니다. 자동으로 생성된 인증 정보를 얻으려면 5.2절. “AMQ 관리 콘솔 로그인 인증 정보에 액세스” 를 참조하십시오.

    다른 사용자로 로그인하려면 AMQ Management Console에 로그인하는 데 필요한 권한을 가지려면 사용자가 hawtio.role 시스템 속성에 지정된 보안 역할에 속해야 합니다. hawtio.role 시스템 속성의 기본 역할은 사전 구성된 사용자가 속하는 admin 입니다.

5.2. AMQ 관리 콘솔 로그인 인증 정보에 액세스

브로커 배포에 사용된 사용자 정의 리소스(CR) 인스턴스에 adminUseradminPassword 값을 지정하지 않으면 Operator에서 이러한 인증 정보를 자동으로 생성하여 시크릿에 저장합니다. 기본 시크릿 이름은 < custom-resource-name> -credentials-secret 형식으로 되어 있습니다(예: my-broker-deployment-credentials-secret ).

참고

adminUseradminPassword 의 값은 CR의 requireLogin 매개변수가 true 로 설정된 경우에만 관리 콘솔에 로그인해야 합니다.

requireLoginfalse 로 설정된 경우 사용자 이름과 암호를 입력하라는 메시지가 표시되면 텍스트를 입력하여 유효한 사용자 이름 암호를 제공하지 않고 콘솔에 로그인할 수 있습니다.

다음 절차에서는 로그인 자격 증명에 액세스하는 방법을 보여줍니다.

프로세스

  1. OpenShift 프로젝트의 전체 시크릿 목록을 참조하십시오.

    1. OpenShift Container Platform 웹 콘솔에서 워크로드 시크릿 클릭합니다.
    2. 명령줄에서 다음을 수행합니다.

      $ oc get secrets
  2. 적절한 시크릿을 열어 Base64로 인코딩된 콘솔 로그인 인증 정보를 표시합니다.

    1. OpenShift Container Platform 웹 콘솔에서 이름에 브로커 사용자 정의 리소스 인스턴스가 포함된 시크릿을 클릭합니다. YAML 탭을 클릭합니다.
    2. 명령줄에서 다음을 수행합니다.

      $ oc edit secret <my-broker-deployment-credentials-secret>
  3. 시크릿에서 값을 디코딩하려면 다음과 같은 명령을 사용합니다.

    $ echo 'dXNlcl9uYW1l' | base64 --decode
    console_admin

추가 리소스

6장. Operator 기반 브로커 배포 업그레이드

Operator 기반 브로커 배포를 업그레이드하려면 Operator 및 브로커 컨테이너 이미지를 업그레이드해야 합니다.

6.1. 사전 준비 사항

이 섹션에서는 Operator 기반 브로커 배포를 위해 Operator 및 브로커 컨테이너 이미지를 업그레이드하기 전에 몇 가지 중요한 고려 사항에 대해 설명합니다.

  • Operator 업그레이드부터 Operator와 브로커 이미지를 두 단계로 업그레이드하여 업그레이드가 원활하게 실행되도록 합니다.

    Operator 업그레이드에서 브로커 이미지의 업그레이드를 분리하려면 업그레이드된 Operator가 브로커 컨테이너 이미지를 새 Operator에서 지원하는 최신 버전으로 자동으로 업그레이드하지 못하도록 해야 합니다. CR에서 version 속성을 설정하여 이 자동 업그레이드를 방지할 수 있습니다. 예를 들어 version 속성 값을 현재 배포된 브로커 이미지의 버전으로 설정할 수 있으며 CR의 status 섹션에 표시됩니다. 자세한 내용은 6.6.1절. “버전 번호를 사용하여 이미지 자동 업그레이드 제한”의 내용을 참조하십시오.

  • OpenShift CLI(명령줄 인터페이스) 또는 OperatorHub를 사용하여 Operator를 업그레이드하려면 OpenShift 클러스터에 대한 클러스터 관리자 권한이 필요합니다.
  • 원래 CLI를 사용하여 Operator 를 설치한 경우 CLI를 사용하여 Operator를 업그레이드해야 합니다. 원래 OperatorHub를 사용하여 Operator를 설치했습니다(즉, OpenShift Container Platform 웹 콘솔에서 프로젝트에 대한 Operator 설치 Operator 에 표시되는 경우 OperatorHub를 사용하여 Operator를 업그레이드해야 합니다. 이러한 업그레이드 방법에 대한 자세한 내용은 다음을 참조하십시오.

  • redeliveryDelayMultiplierredeliveryCollisionAvoidanceFactor 속성이 7.8.x 또는 7.9.x 배포의 기본 브로커 CR에 구성된 경우 새 Operator는 7.10.x 이상으로 업그레이드한 후 CR을 조정할 수 없습니다. 두 속성의 데이터 유형이 7.10.x의 float에서 문자열로 변경되어 조정이 실패합니다.

    spec.deploymentPlan.addressSettings.addressSetting 속성에서 redeliveryDelayMultiplierredeliveryCollisionAvoidanceFactor 속성을 삭제하여 이 문제를 해결할 수 있습니다. 그런 다음 brokerProperties 속성 아래에 속성을 구성합니다. 예를 들면 다음과 같습니다.

    spec:
        ...
        brokerProperties:
        - "addressSettings.#.redeliveryMultiplier=2.1"
        - "addressSettings.#.redeliveryCollisionAvoidanceFactor=1.2"
    참고

    brokerProperties 속성에서 삭제한 redeliveryDelayMultiplier 속성 이름 대신 redeliveryMultiplier 속성 이름을 사용합니다.

6.2. 자동 Operator 업그레이드

OperatorHub를 사용하여 Operator를 설치하고 Install Operator 페이지에서 Update Approval 옵션에 대해 자동으로 기본값을 사용한 경우 OperatorHub는 현재 Operator와 동일한 마이크로 버전이 있는 각 새 버전으로 Operator를 자동으로 업그레이드합니다. 예를 들어 현재 Operator 버전이 7.11.6인 경우 OperatorHub는 Operator를 버전 7.11.7로 자동으로 업그레이드합니다.

마이너 Operator 버전 간 자동 업그레이드는 지원되지 않습니다. 예를 들어 현재 Operator가 버전 7.11.7인 경우 버전 7.12.x로 자동 업그레이드할 수 없습니다. Operator의 마이너 버전 간에 업그레이드하려면 현재 Operator를 수동으로 제거하고 해당 마이너 버전의 Operator를 사용할 수 있는 채널에서 새 Operator를 설치해야 합니다. OperatorHub 또는 OpenShift CLI(명령줄 인터페이스)를 사용하여 Operator의 마이너 버전 간에 수동으로 업그레이드할 수 있습니다.

참고

Operator를 설치 제거해도 제거 절차 중에 이 Operator의 모든 피연산자 인스턴스 삭제 확인란을 선택하지 않는 경우 Operator에서 관리하는 브로커에는 영향을 미치지 않습니다. 자세한 내용은 6.3.2절. “Operator 업그레이드”의 내용을 참조하십시오.

6.3. OperatorHub를 사용하여 Operator 수동 업그레이드

OperatorHub를 사용하여 Operator를 설치하기 위해 원래 OperatorHub를 사용한 경우에만 OperatorHub를 업그레이드합니다(즉, OpenShift Container Platform 웹 콘솔의 프로젝트에 대한 Operator 설치 Operator 에 Operator가 나타납니다). 원래 OpenShift CLI(명령줄 인터페이스)를 사용하여 Operator를 설치한 경우 CLI를 사용하여 Operator를 업그레이드합니다. CLI를 사용하여 Operator를 업그레이드하는 방법을 알아보려면 6.4절. “CLI를 사용하여 Operator 수동 업그레이드” 을 참조하십시오.

참고

7.10.0 또는 7.10.1에서 업그레이드하는 경우 이러한 버전의 Operator 업그레이드를 완료하는 방법을 설명하는 특정 섹션을 참조하십시오.

6.3.1. 사전 준비 사항

이 섹션에서는 OperatorHub를 사용하여 AMQ Broker Operator의 인스턴스를 업그레이드하기 전에 몇 가지 중요한 고려 사항에 대해 설명합니다.

  • OperatorHub에서 최신 Operator 버전을 설치할 때 Operator Lifecycle Manager가 OpenShift 클러스터의 CRD를 자동으로 업데이트합니다. 기존 CRD를 제거하지 않아야 합니다. 기존 CRD를 제거하면 모든 CR 및 브로커 인스턴스도 제거됩니다.
  • 최신 Operator 버전에 대한 CRD로 클러스터를 업데이트하면 이 업데이트가 클러스터의 모든 프로젝트에 영향을 미칩니다. 이전 버전의 Operator에서 배포한 브로커 Pod는 OpenShift Container Platform 웹 콘솔에서 상태를 업데이트할 수 없게 될 수 있습니다. 실행 중인 브로커 Pod의 로그 탭을 클릭하면 'UpdatepodStatus'가 실패했음을 나타내는 메시지가 표시됩니다. 그러나 해당 프로젝트의 브로커 Pod 및 Operator는 예상대로 계속 작동합니다. 영향을 받는 프로젝트의 이 문제를 해결하려면 최신 버전의 Operator를 사용하도록 해당 프로젝트를 업그레이드해야 합니다.
  • 7.10.0 또는 7.10.1에서 업그레이드하는 경우 이러한 버전의 Operator 업그레이드를 완료하는 방법을 설명하는 특정 섹션을 참조하십시오. 이러한 버전을 업그레이드하려면 Operator 업그레이드가 배포에서 브로커 Pod를 다시 시작하지 못하도록 하는 추가 단계가 필요합니다.

    6.3.3절. “7.10.0에서 Operator 업그레이드”

    6.3.4절. “7.10.1에서 Operator 업그레이드”

6.3.2. Operator 업그레이드

업그레이드를 완료하려면 현재 Operator를 설치 제거하고 새 Operator를 설치해야 합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 클러스터 관리자로 로그인합니다.
  2. 프로젝트에서 기존 AMQ Broker Operator를 설치 제거합니다.
  3. 왼쪽 탐색 메뉴에서 OperatorsInstalled Operators 를 클릭합니다.
  4. 페이지 상단에 있는 프로젝트 드롭다운 메뉴에서 Operator를 제거할 프로젝트를 선택합니다.
  5. 설치하려는 Red Hat Integration - AMQ Broker 인스턴스를 찾습니다.
  6. Operator 인스턴스의 경우 오른쪽에서 더 많은 옵션 아이콘(세 개의 수직 점)을 클릭합니다. Operator 설치 제거를 선택합니다.

    주의

    이 Operator의 모든 피연산자 인스턴스 삭제 확인란이 선택 되지 않았는지 확인합니다. 이 확인란이 선택되면 Operator가 관리하는 브로커 인스턴스가 Operator가 제거될 때 삭제됩니다.

  7. 확인 대화 상자에서 설치 제거를 클릭합니다.
  8. OperatorHub를 사용하여 AMQ Broker 7.12용 Operator의 최신 버전을 설치합니다. 자세한 내용은 3.3.2절. “OperatorHub에서 Operator 배포”의 내용을 참조하십시오.
  9. 왼쪽 탐색 메뉴에서 OperatorsInstalled Operators 를 클릭합니다.
  10. 설치된 Red Hat Integration - AMQ Broker 인스턴스에 올바른 버전 번호가 표시되는지 확인합니다.

6.3.3. 7.10.0에서 Operator 업그레이드

7.10.0 Operator를 설치 제거하고 업그레이드를 완료하려면 새 Operator를 설치해야 합니다. 이 프로세스에는 새 Operator가 배포에서 브로커 Pod를 다시 시작하지 못하도록 하는 추가 단계가 포함되어 있으므로 중단이 발생합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 클러스터 관리자로 로그인합니다.
  2. 프로젝트에서 기존 AMQ Broker Operator를 설치 제거합니다.

    1. 왼쪽 탐색 메뉴에서 OperatorsInstalled Operators 를 클릭합니다.
    2. 페이지 상단에 있는 프로젝트 드롭다운 메뉴에서 Operator를 제거할 프로젝트를 선택합니다.
    3. 설치하려는 Red Hat Integration - AMQ Broker 인스턴스를 찾습니다.
    4. Operator 인스턴스의 경우 오른쪽에서 더 많은 옵션 아이콘(세 개의 수직 점)을 클릭합니다. Operator 설치 제거를 선택합니다.
    5. 확인 대화 상자에서 설치 제거를 클릭합니다.
  3. 7.10.0 Operator를 업그레이드하면 새 Operator가 StatefulSet을 삭제하여 사용자 정의 및 Operator 미터링 라벨을 제거합니다. 이 레이블은 7.10.0에서 Operator에 의해 StatefulSet 선택기에 잘못 추가되었습니다. Operator가 StatefulSet을 삭제하면 기존 브로커 Pod도 삭제되어 임시 브로커가 중단됩니다. 중단을 방지하려면 다음 단계를 완료하여 StatefulSet을 삭제하고 브로커 Pod를 분리하여 계속 실행합니다.

    1. 기존 Operator 배포가 포함된 프로젝트의 관리자로 OpenShift Container Platform CLI에 로그인합니다.

      $ oc login -u <user>
    2. Operator 버전을 업그레이드하려는 OpenShift 프로젝트로 전환합니다.

      $ oc project <project-name>
    3. --cascade=orphan 옵션을 사용하여 StatefulSet을 삭제하여 브로커 Pod를 분리합니다. 분리된 브로커 Pod는 StatefulSet이 삭제된 후에도 계속 실행됩니다.

      $ oc delete statefulset <statefulset-name> --cascade=orphan
  4. 기본 브로커 CR에 deploymentPlan.labels 속성에 application 또는 ActiveMQArtemis 라는 레이블이 있는지 확인합니다.

    7.10.0에서는 CR에 이러한 사용자 지정 레이블을 구성할 수 있었습니다. 이러한 라벨은 Operator가 Pod에 라벨을 할당하도록 예약되어 있으며 7.10.0 후에는 사용자 정의 라벨로 추가할 수 없습니다. 이러한 사용자 정의 레이블이 7.10.0의 기본 브로커 CR에 구성된 경우 Pod의 Operator가 사용자 정의 라벨을 덮어씁니다. CR에 이러한 라벨 중 하나가 있는 경우 다음 단계를 완료하여 Pod에서 올바른 라벨을 복원하고 CR에서 라벨을 제거합니다.

    1. OpenShift CLI(명령줄 인터페이스)에서 다음 명령을 실행하여 올바른 Pod 레이블을 복원합니다. 다음 예에서 'ex-aao'는 배포된 StatefulSet의 이름입니다.

      $ for pod in $(oc get pods | grep -o '^ex-aao[^ ]*'); do oc label --overwrite pods $pod ActiveMQArtemis=ex-aao application=ex-aao-app; done
    2. CR의 deploymentPlan.labels 속성에서 애플리케이션ActiveMQArtemis 레이블을 삭제합니다.

      1. OpenShift 명령줄 인터페이스 사용:

        1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

          oc login -u <user> -p <password> --server=<host:port>
        2. 배포에 사용할 CR을 편집합니다.

          oc edit ActiveMQArtemis <statefulset name> -n <namespace>
        3. CR의 deploymentPlan.labels 요소에서 application 또는 ActiveMQArtemis 라는 사용자 지정 레이블을 삭제합니다.
        4. CR을 저장합니다.
      2. OpenShift Container Platform 웹 콘솔 사용:

        1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
        2. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
        3. ActiveMQArtemis CRD를 클릭합니다.
        4. Instances 탭을 클릭합니다.
        5. 브로커 배포에 사용할 인스턴스를 클릭합니다.
        6. YAML 탭을 클릭합니다.

          콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

        7. CR의 deploymentPlan.labels 요소에서 application 또는 ActiveMQArtemis 라는 사용자 지정 레이블을 삭제합니다.
        8. 저장을 클릭합니다.
  5. OperatorHub를 사용하여 AMQ Broker 7.12용 Operator의 최신 버전을 설치합니다. 자세한 내용은 3.3.2절. “OperatorHub에서 Operator 배포”의 내용을 참조하십시오.

    새 Operator는 이전 브로커 배포를 인식하고 관리할 수 있습니다. CR의 image 또는 version 필드에 값을 설정하면 Operator 조정 프로세스에서 Operator가 시작될 때 브로커 Pod를 해당 이미지로 업그레이드합니다. 자세한 내용은 6.6절. “브로커 컨테이너 이미지의 자동 업그레이드 제한”의 내용을 참조하십시오. 그러지 않으면 Operator가 각 브로커 Pod를 최신 컨테이너 이미지로 업그레이드합니다.

    참고

    조정 프로세스가 시작되지 않으면 배포를 스케일링하여 프로세스를 시작할 수 있습니다. 자세한 내용은 3.4.1절. “기본 브로커 인스턴스 배포”의 내용을 참조하십시오.

  6. 필요에 따라 업그레이드된 브로커에서 사용할 수 있는 새로운 기능의 CR에 속성을 추가합니다.

6.3.4. 7.10.1에서 Operator 업그레이드

업그레이드를 완료하려면 7.10.1 Operator를 설치 제거하고 새 Operator를 설치해야 합니다. 이 프로세스에는 구성에 따라 새 Operator가 브로커 Pod를 재시작하지 못하도록 완료해야 하는 추가 단계가 포함되어 있으므로 중단이 발생합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 클러스터 관리자로 로그인합니다.
  2. 기본 브로커 CR에 deploymentPlan.labels 속성에 application 또는 ActiveMQArtemis 라는 레이블이 있는지 확인합니다.

    이러한 라벨은 Operator가 Pod에 라벨을 할당하도록 예약되며 7.10.1 후에는 사용할 수 없습니다. 이러한 사용자 정의 레이블이 기본 브로커 CR에 구성된 경우 Pod의 Operator가 사용자 정의 라벨을 덮어씁니다.

  3. 이러한 사용자 정의 레이블이 기본 브로커 CR에 구성되지 않은 경우 OperatorHub를 사용하여 AMQ Broker 7.12용 Operator의 최신 버전을 설치합니다. 자세한 내용은 3.3.2절. “OperatorHub에서 Operator 배포”의 내용을 참조하십시오.
  4. 이러한 사용자 정의 라벨 중 하나가 기본 브로커 CR에 구성된 경우 새 Operator를 설치하기 전에 기존 Operator를 제거하려면 다음 단계를 완료하고 올바른 Pod 레이블을 복원하고 CR에서 라벨을 제거합니다.

    참고

    Operator를 설치 제거하면 Operator가 StatefulSet을 삭제하지 않고 사용자 정의 라벨을 제거하여 기존 브로커 Pod도 삭제하여 임시 브로커가 중단될 수 있습니다.

    1. 프로젝트에서 기존 AMQ Broker Operator를 설치 제거합니다.

      1. 왼쪽 탐색 메뉴에서 OperatorsInstalled Operators 를 클릭합니다.
      2. 페이지 상단에 있는 프로젝트 드롭다운 메뉴에서 Operator를 제거할 프로젝트를 선택합니다.
      3. 설치하려는 Red Hat Integration - AMQ Broker 인스턴스를 찾습니다.
      4. Operator 인스턴스의 경우 오른쪽에서 더 많은 옵션 아이콘(세 개의 수직 점)을 클릭합니다. Operator 설치 제거를 선택합니다.
      5. 확인 대화 상자에서 설치 제거를 클릭합니다.
    2. OpenShift CLI(명령줄 인터페이스)에서 다음 명령을 실행하여 올바른 Pod 레이블을 복원합니다. 다음 예에서 'ex-aao'는 배포된 StatefulSet의 이름입니다.

      $ for pod in $(oc get pods | grep -o '^ex-aao[^ ]*'); do oc label --overwrite pods $pod ActiveMQArtemis=ex-aao application=ex-aao-app; done
    3. CR의 deploymentPlan.labels 속성에서 애플리케이션ActiveMQArtemis 레이블을 삭제합니다.

      1. OpenShift 명령줄 인터페이스 사용:

        1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

          oc login -u <user> -p <password> --server=<host:port>
        2. 배포에 사용할 CR을 편집합니다.

          oc edit ActiveMQArtemis <statefulset name> -n <namespace>
        3. CR의 deploymentPlan.labels 속성에서 application 또는 ActiveMQArtemis 라는 사용자 지정 레이블을 삭제합니다.
        4. CR 파일을 저장합니다.
      2. OpenShift Container Platform 웹 콘솔 사용:

        1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
        2. 왼쪽 창에서 AdministrationCustom Resource Definitions 를 클릭합니다.
        3. ActiveMQArtemis CRD를 클릭합니다.
        4. Instances 탭을 클릭합니다.
        5. 브로커 배포에 사용할 인스턴스를 클릭합니다.
        6. YAML 탭을 클릭합니다.

          콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

        7. CR의 deploymentPlan.labels 속성에서 application 또는 ActiveMQArtemis 라는 사용자 지정 레이블을 삭제합니다.
        8. 저장을 클릭합니다.
  5. OperatorHub를 사용하여 AMQ Broker 7.12용 Operator의 최신 버전을 설치합니다. 자세한 내용은 3.3.2절. “OperatorHub에서 Operator 배포”의 내용을 참조하십시오.

    새 Operator는 이전 브로커 배포를 인식하고 관리할 수 있습니다. CR의 image 또는 version 필드에 값을 설정하면 Operator 조정 프로세스에서 Operator가 시작될 때 브로커 Pod를 해당 이미지로 업그레이드합니다. 자세한 내용은 6.6절. “브로커 컨테이너 이미지의 자동 업그레이드 제한”의 내용을 참조하십시오. 그러지 않으면 Operator가 각 브로커 Pod를 최신 컨테이너 이미지로 업그레이드합니다.

    참고

    조정 프로세스가 시작되지 않으면 배포를 스케일링하여 프로세스를 시작할 수 있습니다. 자세한 내용은 3.4.1절. “기본 브로커 인스턴스 배포”의 내용을 참조하십시오.

  6. 필요에 따라 업그레이드된 브로커에서 사용할 수 있는 새로운 기능의 CR에 속성을 추가합니다.

6.4. CLI를 사용하여 Operator 수동 업그레이드

이 섹션의 절차에서는 OpenShift CLI(명령줄 인터페이스)를 사용하여 Operator의 다른 버전을 AMQ Broker 7.12에 사용할 수 있는 최신 버전으로 업그레이드하는 방법을 보여줍니다.

6.4.1. 사전 요구 사항

  • CLI를 사용하여 Operator를 처음 설치한 경우에만 Operator를 업그레이드합니다. 원래 OperatorHub를 사용하여 Operator를 설치했습니다(즉, Operator가 OpenShift Container Platform 웹 콘솔의 프로젝트에 Operator 설치된 Operator에 표시됨) OperatorHub를 사용하여 Operator를 업그레이드합니다. OperatorHub를 사용하여 Operator를 업그레이드하는 방법을 알아보려면 6.3절. “OperatorHub를 사용하여 Operator 수동 업그레이드” 을 참조하십시오.

6.4.2. CLI를 사용하여 Operator 업그레이드

OpenShift CLI(명령줄 인터페이스)를 사용하여 Operator를 AMQ Broker 7.12의 최신 버전으로 업그레이드할 수 있습니다.

프로세스

  1. 웹 브라우저에서 AMQ Broker 7.12.3소프트웨어 다운로드 페이지로 이동합니다.
  2. 버전 드롭다운 목록의 값이 7.12.3 으로 설정되고 릴리스 탭이 선택되어 있는지 확인합니다.
  3. AMQ Broker 7.12.3 Operator 설치 및 예제 파일 옆에 있는 Download 를 클릭합니다.

    amq-broker-operator-7.12.3-ocp-install-examples-rhel8.zip 압축 아카이브가 자동으로 시작됩니다.

  4. 다운로드가 완료되면 아카이브를 선택한 설치 디렉터리로 이동합니다. 다음 예제에서는 아카이브를 ~/broker/operator 라는 디렉터리로 이동합니다.

    $ mkdir ~/broker/operator
    $ mv amq-broker-operator-7.12.3-ocp-install-examples-rhel8.zip ~/broker/operator
  5. 선택한 설치 디렉터리에서 아카이브의 내용을 추출합니다. 예를 들면 다음과 같습니다.

    $ cd ~/broker/operator
    $ unzip amq-broker-operator-operator-7.12.3-ocp-install-examples-rhel8.zip
  6. 기존 Operator 배포가 포함된 프로젝트의 관리자로 OpenShift Container Platform에 로그인합니다.

    $ oc login -u <user>
  7. Operator 버전을 업그레이드하려는 OpenShift 프로젝트로 전환합니다.

    $ oc project <project-name>
  8. 다운로드 및 추출한 최신 Operator 아카이브의 배포 디렉터리에서 operator.yaml 파일을 엽니다.

    참고

    operator.yaml 파일에서 Operator는 SHA( Secure Hash Algorithm ) 값으로 표시되는 이미지를 사용합니다. 숫자 기호(#) 기호로 시작하는 주석 행은 SHA 값이 특정 컨테이너 이미지 태그에 해당함을 나타냅니다.

  9. 이전 Operator 배포를 위해 operator.yaml 파일을 엽니다. 이전 구성에서 지정한 기본값이 아닌 모든 값이 operator.yaml 구성 파일에 복제되었는지 확인합니다.
  10. operator.yaml 파일에서 Operator의 이름은 기본적으로 amq-broker-controller-manager 입니다. 이전 배포의 Operator 이름이 amq-broker-controller-manager 가 아닌 경우 amq-broker-controller-manager 의 모든 인스턴스를 이전 Operator 이름으로 교체합니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      selector
        matchLabels
          name: amq-broker-operator
      ...
  11. operator.yaml 파일에서 Operator의 서비스 계정 이름은 amq-broker-controller-manager 입니다. 이전 버전에서는 Operator의 서비스 계정 이름은 amq-broker-operator 였습니다.

    1. 이전 배포에서 서비스 계정 이름을 사용하려면 operator.yaml 파일의 서비스 계정 이름을 이전 배포에서 사용된 이름으로 교체합니다. 예를 들면 다음과 같습니다.

      spec:
        ...
        serviceAccountName: amq-broker-operator
        ...
    2. 새 서비스 계정 이름, amq-broker-controller-manager 를 Operator에 사용하려면 프로젝트에서 서비스 계정, 역할 및 역할 바인딩을 업데이트합니다.

      $ oc apply -f deploy/service_account.yaml
      $ oc apply -f deploy/role.yaml
      $ oc apply -f deploy/role_binding.yaml
  12. Operator에 포함된 CRD를 업데이트합니다.

    1. 기본 브로커 CRD를 업데이트합니다.

      $ oc apply -f deploy/crds/broker_activemqartemis_crd.yaml
    2. 주소 CRD를 업데이트합니다.

      $ oc apply -f deploy/crds/broker_activemqartemisaddress_crd.yaml
    3. scaledown 컨트롤러 CRD를 업데이트합니다.

      $ oc apply -f deploy/crds/broker_activemqartemisscaledown_crd.yaml
    4. 보안 CRD를 업데이트합니다.

      $ oc apply -f deploy/crds/broker_activemqartemissecurity_crd.yaml
  13. AMQ Broker Operator 7.10.0에서만 업그레이드하는 경우 Operator 및 StatefulSet을 삭제합니다.

    기본적으로 새 Operator는 StatefulSet을 삭제하여 사용자 정의 및 Operator 미터링 레이블을 제거합니다. 이 레이블은 7.10.0의 Operator에서 StatefulSet 선택기에 잘못 추가되었습니다. Operator가 StatefulSet을 삭제하면 기존 브로커 Pod도 삭제되어 임시 브로커가 중단됩니다. 중단을 방지하려면 브로커 Pod를 삭제하지 않고 Operator 및 StatefulSet을 삭제하려면 다음 단계를 완료합니다.

    1. Operator를 삭제합니다.

      $ oc delete -f deploy/operator.yaml
      참고

      Operator를 삭제해도 Operator에서 관리하는 브로커 인스턴스는 제거되지 않습니다.

    2. --cascade=orphan 옵션을 사용하여 StatefulSet을 삭제하여 브로커 Pod를 분리합니다. 분리된 브로커 Pod는 StatefulSet이 삭제된 후에도 계속 실행됩니다.

      $ oc delete statefulset <statefulset-name> --cascade=orphan
  14. AMQ Broker Operator 7.10.0 또는 7.10.1에서 업그레이드하는 경우 기본 브로커 CR에 deploymentPlan.labels 속성에 구성된 애플리케이션 또는 ActiveMQArtemis 라는 레이블이 있는지 확인합니다.

    이러한 라벨은 Operator가 Pod에 라벨을 할당하도록 예약되며 7.10.1 이후 사용자 정의 라벨로 허용되지 않습니다. 이러한 사용자 정의 레이블이 기본 브로커 CR에 구성된 경우 Pod의 Operator가 사용자 정의 라벨을 덮어씁니다. 이러한 사용자 정의 라벨 중 하나가 기본 브로커 CR에 구성된 경우 다음 단계를 완료하여 Pod에서 올바른 라벨을 복원하고 CR에서 라벨을 제거합니다.

    1. 7.10.0에서 업그레이드하는 경우 이전 단계에서 Operator를 삭제했습니다. 7.10.1에서 업그레이드하는 경우 Operator를 삭제합니다.

      $ oc delete -f deploy/operator.yaml
    2. 다음 명령을 실행하여 올바른 Pod 레이블을 복원합니다. 다음 예에서 'ex-aao'는 배포된 StatefulSet의 이름입니다.

      $ for pod in $(oc get pods | grep -o '^ex-aao[^ ]*'); do oc label --overwrite pods $pod ActiveMQArtemis=ex-aao application=ex-aao-app; done
    3. CR의 deploymentPlan.labels 속성에서 애플리케이션ActiveMQArtemis 레이블을 삭제합니다.

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        oc login -u <user> -p <password> --server=<host:port>
      2. 다운로드 및 추출한 Operator 설치 아카이브의 deploy/crs 디렉터리에 포함된 broker_activemqartemis_cr.yaml 이라는 샘플 CR 파일을 엽니다.
      3. CR의 deploymentPlan.labels 속성에서 application 또는 ActiveMQArtemis 라는 사용자 지정 레이블을 삭제합니다.
      4. CR 파일을 저장합니다.
      5. CR 인스턴스를 배포합니다.

        1. 브로커 배포를 위해 프로젝트로 전환합니다.

          $ oc project <project_name>
        2. CR을 적용합니다.

          $ oc apply -f <path/to/broker_custom_resource_instance>.yaml
    4. 이전 Operator를 삭제한 경우 새 Operator를 배포합니다.

       $ oc create -f deploy/operator.yaml
  15. 업데이트된 Operator 구성을 적용합니다.

    $ oc apply -f deploy/operator.yaml
  16. 필요에 따라 업그레이드된 브로커에서 사용할 수 있는 새로운 기능의 CR에 속성을 추가합니다.

6.5. 브로커 컨테이너 이미지 업그레이드

Operator가 업그레이드되면 여러 버전의 AMQ Broker를 관리할 수 있습니다. 새 Operator에서 지원하는 버전 목록은 Operator 로그에서 확인할 수 있습니다. 예를 들면 다음과 같습니다.

operator의 INFO 설정 버전: 7.12.1.OPR.1 2024-08-14T15:04:17 INFO 설정 Supported ActiveMQArtemis Kubernetes 이미지 버전: 7.11.0 7.11.1 7.11.1 7.11.4 7.11.5 7.11.6 7.11.7 7.12.0 7.12.1

권장되는 경우 새 Operator가 Operator 업그레이드와 동시에 브로커 이미지를 자동으로 업그레이드하지 못하도록 사용자 정의 리소스에 version 속성을 구성한 경우 브로커 이미지를 업그레이드하도록 버전 번호를 변경할 수 있습니다. 자세한 내용은 6.6절. “브로커 컨테이너 이미지의 자동 업그레이드 제한”의 내용을 참조하십시오.

참고

version 속성이 사용자 정의 리소스에 구성되지 않은 경우 Operator는 관리하는 각 브로커를 Operator가 지원하는 브로커 컨테이너 이미지의 최신 버전으로 자동으로 업그레이드합니다. 7.12.3 Operator의 경우 지원되는 브로커 컨테이너 이미지의 최신 버전은 7.12.3입니다.

6.6. 브로커 컨테이너 이미지의 자동 업그레이드 제한

기본적으로 Operator는 관리하는 각 브로커를 Operator 버전에서 지원하는 사용 가능한 최신 컨테이너 이미지로 자동 업그레이드합니다. 배포의 CR(사용자 정의 리소스)에서는 버전 번호 또는 특정 컨테이너 이미지의 URL을 지정하여 Operator에서 이미지를 업그레이드하는 기능을 제한할 수 있습니다.

6.6.1. 버전 번호를 사용하여 이미지 자동 업그레이드 제한

새 버전을 사용할 수 있게 되면 브로커가 자동으로 업그레이드되는 컨테이너 이미지의 버전을 제한할 수 있습니다.

참고

버전 번호를 기반으로 업그레이드를 제한하면 Operator가 배포된 버전에 대한 보안 수정 사항이 포함된 새 이미지를 사용하도록 브로커를 자동으로 업그레이드합니다.

프로세스

  1. 브로커 배포의 기본 브로커 CR 인스턴스를 편집합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에서 CR을 편집하고 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        $ oc login -u <user> -p <password> --server=<host:port>
      2. CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 왼쪽 창에서 OperatorsInstalled Operator 를 클릭합니다.
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
      4. AMQ Broker 탭을 클릭합니다.
      5. ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 편집할 수 있습니다.

        참고

        CR의 status 섹션에서 .status.version.brokerVersion 필드에 현재 배포된 AMQ Broker 버전이 표시됩니다.

  2. spec.version 속성에서 Operator가 배포의 브로커 및 init 컨테이너 이미지를 업그레이드할 수 있는 버전을 지정합니다. 다음은 지정할 수 있는 값의 예입니다.

    다음 예에서 Operator는 배포의 현재 컨테이너 이미지를 7.12.0으로 업그레이드합니다.

    spec:
       version: '7.12.0'
        ...

    다음 예에서 Operator는 배포의 현재 컨테이너 이미지를 사용 가능한 최신 7.11.x 이미지로 업그레이드합니다. 예를 들어 배포에서 7.11.1 컨테이너 이미지를 사용하는 경우 Operator는 이미지를 7.11.6으로 자동 업그레이드하지만 7.12.3으로 업그레이드하지 않습니다.

    spec:
        version: '7.11'
        ...

    다음 예에서 Operator는 배포의 현재 컨테이너 이미지를 최신 7.x.x 이미지로 업그레이드합니다. 예를 들어 배포에서 7.11.6 이미지를 사용하는 경우 Operator는 이미지를 7.12.3으로 자동으로 업그레이드합니다.

    spec:
        version: '7'
        ...
    참고

    컨테이너 이미지의 마이너 버전(예: 7.11.x에서 7.12.x) 간에 업그레이드하려면 새 컨테이너 이미지와 동일한 마이너 버전이 있는 Operator가 필요합니다. 예를 들어 7.11.6에서 7.12.3으로 업그레이드하려면 7.12.x Operator를 설치해야 합니다.

  3. CR을 저장합니다.
중요

CR에서 spec.version 속성을 사용하여 브로커 컨테이너 이미지의 자동 업그레이드를 제한하는 경우 CR에 spec.deploymentPlan.image 또는 spec.deploymentPlan.initImage 속성도 포함되어 있지 않아야 합니다. 이러한 두 속성은 모두 spec.version 속성을 재정의합니다. CR에 이러한 속성 중 하나와 spec.version 속성 중 하나가 있는 경우 배포된 브로커 및 init 이미지의 버전이 다를 수 있으므로 브로커가 실행되지 않을 수 있습니다.

CR을 저장하면 먼저 Operator가 기존 배포에 지정된 AMQ Broker 버전으로의 업그레이드를 사용할 수 있는지 확인합니다. 업그레이드할 잘못된 버전의 AMQ Broker(예: 아직 사용할 수 없는 버전)를 지정한 경우 Operator는 경고 메시지를 기록하고 추가 조치를 수행하지 않습니다.

그러나 지정된 버전으로 업그레이드할 수 있는 경우 Operator 배포의 각 브로커를 업그레이드하여 새 AMQ Broker 버전에 해당하는 브로커 컨테이너 이미지를 사용합니다.

Operator에서 사용하는 브로커 컨테이너 이미지는 Operator 배포의 operator.yaml 구성 파일의 환경 변수에 정의되어 있습니다. 환경 변수 이름에는 AMQ Broker 버전에 대한 식별자가 포함됩니다. 예를 들어 환경 변수 RELATED_IMAGE_ActiveMQ_Artemis_Broker_Kubernetes_7123 은 AMQ Broker 7.12.3에 해당합니다.

Operator가 CR 변경 사항을 적용하면 배포의 각 브로커 Pod를 재시작하여 각 Pod가 지정된 이미지 버전을 사용하도록 합니다. 배포에 여러 브로커가 있는 경우 한 번에 하나의 브로커 Pod만 종료하고 다시 시작합니다.

추가 리소스

6.6.2. 이미지 URL을 사용하여 이미지 자동 업그레이드 제한

특정 컨테이너 이미지를 사용하도록 배포의 브로커를 업그레이드하려면 CR에서 이미지의 레지스트리 URL을 지정할 수 있습니다. Operator가 브로커를 지정된 컨테이너 이미지로 업그레이드한 후 CR의 이미지 URL을 교체할 때까지 추가 업그레이드가 수행되지 않습니다. 예를 들어 Operator는 배포된 이미지에 대한 보안 수정 사항이 포함된 최신 이미지를 사용하도록 브로커를 자동으로 업그레이드하지 않습니다.

중요

이미지 URL을 사용하여 자동 업그레이드를 제한하려면 CR의 spec.deploymentPlan.imagespec.deploymentPlan.initImage 속성에 대한 URL을 지정하여 브로커 및 init 컨테이너 이미지가 일치하는지 확인합니다. 하나의 컨테이너 이미지의 URL만 지정하면 브로커와 init 컨테이너 이미지가 달라질 수 있으므로 브로커가 실행되지 않을 수 있습니다.

참고

CR에 spec.deploymentPlan.imagespec.deploymentPlan.initImage 속성 외에 spec.version 속성이 있는 경우 Operator는 spec.version 속성을 무시합니다.

프로세스

  1. Operator에서 현재 이미지를 업그레이드할 수 있는 브로커 및 init 컨테이너 이미지의 URL을 가져옵니다.

    1. Red Hat Catalog에서 브로커 컨테이너 구성 요소 페이지: AMQ Broker for RHEL 8(Multiarch) 을 엽니다.
    2. 아키텍처 드롭다운 메뉴에서 아키텍처를 선택합니다.
    3. 태그 드롭다운에서 설치하려는 이미지에 해당하는 태그를 선택합니다. 태그는 릴리스 날짜를 기반으로 하는 시간순으로 표시됩니다. 태그는 릴리스 버전과 할당된 태그로 구성됩니다.
    4. 이 이미지 가져오기 탭을 엽니다.
    5. Manifest 필드에서 복사 아이콘을 클릭합니다.
    6. URL을 텍스트 파일에 붙여넣습니다.
    7. Red Hat Catalog에서 init 컨테이너 구성 요소 페이지를 엽니다. AMQ Broker Init for RHEL 8 (Multiarch)
    8. init 컨테이너 이미지의 URL을 가져오려면 다음 단계를 반복하여 브로커 컨테이너 이미지의 URL을 가져옵니다.
  2. 브로커 배포의 기본 브로커 CR 인스턴스를 편집합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에서 CR을 편집하고 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.

        $ oc login -u <user> -p <password> --server=<host:port>
      2. CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 왼쪽 창에서 OperatorsInstalled Operator 를 클릭합니다.
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
      4. AMQ Broker 탭을 클릭합니다.
      5. ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 CR 인스턴스를 구성할 수 있는 YAML 편집기가 열립니다.

    3. 텍스트 파일에 기록한 브로커 및 init 컨테이너 이미지의 URL을 복사하여 CR의 spec.deploymentPlan.imagespec.deploymentPlan.initImage 필드에 삽입합니다. 예를 들면 다음과 같습니다.

      spec:
        ...
        deploymentPlan:
          image: registry.redhat.io/amq7/amq-broker-rhel8@55ae4e28b100534d63c34ab86f69230d274c999d46d1493f26fe3e75ba7a0cec
          initImage: registry.redhat.io/amq7/amq-broker-init-rhel8@442339c33549f2be9fe3b5c71184a753a3cf10b000b2ecc5bc9a062dd91c8def
        ...
  3. CR을 저장합니다.

    CR을 저장하면 Operator는 새 이미지를 사용하도록 브로커를 업그레이드하고 spec.deploymentPlan.imagespec.deploymentPlan.initImage 속성 값을 다시 업데이트할 때까지 이러한 이미지를 사용합니다.

  4. 향후 Operator 업그레이드가 배포에서 브로커를 다시 시작하지 못하도록 하려면 CR을 편집하고 spec.version 속성에 배포된 브로커의 버전 번호를 지정합니다.

    spec.version 속성이 CR에 구성되지 않은 경우 Operator의 후속 업그레이드로 브로커 Pod가 다시 시작됩니다. spec.version 속성에 버전 번호를 명시적으로 설정하지 않는 한 새 Operator에서 지원되는 최신 브로커 버전을 StatefulSet의 라벨에 추가하므로 Pod를 다시 시작해야 합니다.

    브로커를 시작한 후 CR의 status 섹션에서 spec.version 속성에 지정할 버전 번호 값을 찾을 수 있습니다. 자세한 내용은 브로커 배포에 대한 상태 정보 보기를 참조하십시오.

참고

이미지 URL을 설정하지 않고 AMQ Broker를 이미 배포한 경우 Operator가 배포된 현재 이미지를 업그레이드하지 못하도록 이미지 URL을 다시 설정할 수 있습니다. CR의 status 섹션에 있는 .status.version.image.status.version.initImage 속성에 배포된 이미지의 레지스트리 URL을 찾을 수 있습니다.

.status.version.image.status.version.initImage 속성에서 이미지 URL을 복사하여 spec.deploymentPlan.imagespec.deploymentPlan.initImage 속성에 각각 삽입하면 Operator는 현재 배포된 이미지를 업그레이드하지 않습니다.

추가 리소스

7장. 브로커 모니터링

7.1. Fuse Console에서 브로커 보기

AMQ Management Console 대신 OpenShift에 Fuse Console을 사용하도록 Operator 기반 브로커 배포를 구성할 수 있습니다. 브로커 배포를 적절하게 구성한 경우 Fuse Console은 브로커를 검색하고 전용 Artemis 탭에 표시합니다. AMQ 관리 콘솔에서 수행하는 것과 동일한 브로커 런타임 데이터를 볼 수 있습니다. 주소 및 큐 생성과 같은 기본 관리 작업을 수행할 수도 있습니다.

다음 절차에서는 OpenShift의 Fuse Console이 배포에 브로커를 검색하고 표시할 수 있도록 브로커 배포에 대해 CR(사용자 정의 리소스) 인스턴스를 구성하는 방법을 설명합니다.

사전 요구 사항

  • OpenShift용 Fuse Console은 OCP 클러스터 또는 해당 클러스터의 특정 네임스페이스에 배포해야 합니다. 콘솔을 특정 네임스페이스에 배포한 경우 콘솔에서 브로커를 검색할 수 있도록 브로커 배포가 동일한 네임스페이스에 있어야 합니다. 그렇지 않으면 Fuse Console 및 브로커가 동일한 OCP 클러스터에 배포하는 것으로 충분합니다. OCP에 Fuse Online을 설치하는 방법에 대한 자세한 내용은 OpenShift Container Platform에 Fuse Online 설치 및 설치를 참조하십시오.
  • 브로커 배포가 이미 생성되어 있어야 합니다. 예를 들어 CR(사용자 정의 리소스) 인스턴스를 사용하여 기본 Operator 기반 배포를 생성하는 방법을 알아보려면 3.4.1절. “기본 브로커 인스턴스 배포” 를 참조하십시오.

프로세스

  1. 브로커 배포에 사용한 CR 인스턴스를 엽니다. 예를 들어 기본 배포의 CR은 다음과 유사할 수 있습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
    spec:
      deploymentPlan:
        size: 4
        image: registry.redhat.io/amq7/amq-broker-rhel8:7.12
            ...
  2. deploymentPlan 섹션에서 jolokiaAgentEnabledmanagementRBACEnabled 속성을 추가하고 다음과 같이 값을 지정합니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
    spec:
      deploymentPlan:
        size: 4
        image: registry.redhat.io/amq7/amq-broker-rhel8:7.12
        ...
        jolokiaAgentEnabled: true
        managementRBACEnabled: false
    jolokiaAgentEnabled
    Fuse Console이 배포에서 브로커의 런타임 데이터를 검색하고 표시할 수 있는지 여부를 지정합니다. Fuse Console을 사용하려면 값을 true 로 설정합니다.
    managementRBACEnabled

    배포의 브로커에 RBAC(역할 기반 액세스 제어)가 활성화되어 있는지 여부를 지정합니다. Fuse Console에서 자체 역할 기반 액세스 제어를 사용하므로 Fuse Console을 사용하려면 값을 false설정해야 합니다.

    중요

    Fuse Console을 사용하기 위해 managementRBACEnabled 의 값을 false 로 설정하면 브로커의 management Cryostat가 더 이상 권한 부여가 필요하지 않습니다. AMQ 관리 콘솔을 사용해서는 안되며 managementRBACEnabled 는 브로커의 모든 관리 작업이 무단 사용에 노출될 수 있으므로 false 로 설정되어 있어야 합니다.

  3. CR 인스턴스를 저장합니다.
  4. 이전에 브로커 배포를 생성한 프로젝트로 전환합니다.

    $ oc project <project_name>
  5. 명령줄에서 변경 사항을 적용합니다.

    $ oc apply -f <path/to/custom_resource_instance>.yaml
  6. Fuse Console에서 Fuse 애플리케이션을 보려면 온라인 탭을 클릭합니다. 실행 중인 브로커를 보려면 왼쪽 탐색 메뉴에서 Artemis 를 클릭합니다.

추가 리소스

7.2. Prometheus를 사용하여 브로커 런타임 지표 모니터링

다음 섹션에서는 OpenShift Container Platform에서 AMQ Broker에 대한 Prometheus 메트릭 플러그인을 구성하는 방법을 설명합니다. 플러그인을 사용하여 브로커 런타임 메트릭을 모니터링하고 저장할 수 있습니다. Grafana와 같은 그래픽 툴을 사용하여 Prometheus 플러그인이 수집하는 데이터의 고급 시각화 및 대시보드를 구성할 수도 있습니다.

참고

Prometheus 지표 플러그인을 사용하면 Prometheus 형식으로 브로커 지표를 수집하고 내보낼 수 있습니다. 그러나 Red Hat 은 Prometheus 자체의 설치 또는 구성이나 Grafana와 같은 시각화 툴을 지원하지 않습니다. Prometheus 또는 Grafana의 설치, 구성 또는 실행에 대한 지원이 필요한 경우 커뮤니티 지원 및 문서와 같은 리소스의 제품 웹 사이트를 방문하십시오.

7.2.1. 메트릭 개요

브로커 인스턴스의 상태 및 성능을 모니터링하려면 AMQ Broker의 Prometheus 플러그인을 사용하여 브로커 런타임 지표를 모니터링하고 저장할 수 있습니다. AMQ Broker Prometheus 플러그인은 브로커 런타임 지표를 Prometheus 형식으로 내보내 Prometheus 자체를 사용하여 데이터에 대한 쿼리를 시각화하고 실행할 수 있습니다.

Grafana와 같은 그래픽 툴을 사용하여 Prometheus 플러그인이 수집하는 지표에 대한 고급 시각화 및 대시보드를 구성할 수도 있습니다.

플러그인에서 Prometheus 형식으로 내보내는 메트릭은 다음과 같습니다.

브로커 메트릭

artemis_address_memory_usage
메모리 내 메시지에 이 브로커의 모든 주소에서 사용하는 바이트 수입니다.
artemis_address_memory_usage_percentage
이 브로커의 모든 주소에서 global-max-size 매개변수의 백분율로 사용하는 메모리입니다.
artemis_connection_count
이 브로커에 연결된 클라이언트 수입니다.
artemis_total_connection_count
시작된 이후 이 브로커에 연결된 클라이언트 수입니다.

주소 지표

artemis_routed_message_count
하나 이상의 큐 바인딩으로 라우팅되는 메시지 수입니다.
artemis_unrouted_message_count
큐 바인딩으로 라우팅 되지 않은 메시지 수입니다.

대기열 메트릭

artemis_consumer_count
지정된 대기열의 메시지를 사용하는 클라이언트 수입니다.
artemis_delivering_durable_message_count
지정된 큐가 현재 소비자에 전달 중인 메시지의 수입니다.
artemis_delivering_durable_persistent_size
지정된 큐가 현재 소비자에 전달 중인 영속적인 메시지 크기입니다.
artemis_delivering_message_count
지정된 대기열에서 현재 소비자에게 전달하는 메시지 수입니다.
artemis_delivering_persistent_size
지정된 대기열에서 현재 소비자에게 전달 중인 메시지의 영구 크기입니다.
artemis_durable_message_count
현재 지정된 큐에 있는 Cryostat 메시지 수입니다. 여기에는 예약, 페이지링 및 전송 중 메시지가 포함됩니다.
artemis_durable_persistent_size
현재 지정된 큐에 있는 Cryostat 메시지의 영구 크기입니다. 여기에는 예약, 페이지링 및 전송 중 메시지가 포함됩니다.
artemis_messages_acknowledged
큐가 생성된 이후 지정된 큐에서 확인된 메시지 수입니다.
artemis_messages_added
큐가 생성된 이후 지정된 큐에 추가된 메시지 수입니다.
artemis_message_count
현재 지정된 큐에 있는 메시지 수입니다. 여기에는 예약, 페이지링 및 전송 중 메시지가 포함됩니다.
artemis_messages_killed
큐가 생성된 이후 지정된 큐에서 제거된 메시지 수입니다. 메시지가 구성된 최대 전송 시도 수를 초과하면 브로커가 메시지를 종료합니다.
artemis_messages_expired
큐가 생성된 이후 지정된 큐에서 만료된 메시지 수입니다.
artemis_persistent_size
현재 지정된 큐에 있는 모든 메시지(비효율 및 실행 불가능한)의 영구 크기입니다. 여기에는 예약, 페이지링 및 전송 중 메시지가 포함됩니다.
artemis_scheduled_durable_message_count
지정된 큐의 예약된 메시지 수입니다.
artemis_scheduled_durable_persistent_size
지정된 큐의 영구 크기, 예약된 메시지입니다.
artemis_scheduled_message_count
지정된 큐의 예약된 메시지 수입니다.
artemis_scheduled_persistent_size
지정된 큐에 있는 예약된 메시지의 영구 크기입니다.

위에 나열되지 않은 상위 수준 브로커 메트릭의 경우 하위 수준 메트릭을 집계하여 이를 계산할 수 있습니다. 예를 들어 총 메시지 수를 계산하려면 브로커 배포의 모든 큐의 artemis_message_count 메트릭을 집계할 수 있습니다.

AMQ Broker를 온프레미스 배포하는 경우 브로커를 호스팅하는 JVM(Java Virtual Machine)에 대한 지표도 Prometheus 형식으로 내보냅니다. 이는 OpenShift Container Platform에서 AMQ Broker 배포에 적용되지 않습니다.

7.2.2. CR을 사용하여 Prometheus 플러그인 활성화

AMQ Broker를 설치하면 Prometheus 지표 플러그인이 설치에 포함됩니다. 활성화하면 플러그인은 브로커의 런타임 지표를 수집하고 Prometheus 형식으로 내보냅니다.

다음 절차에서는 CR을 사용하여 AMQ Broker에 대한 Prometheus 플러그인을 활성화하는 방법을 보여줍니다. 이 절차에서는 AMQ Broker 7.9 이상의 신규 및 기존 배포를 지원합니다.

실행 중인 브로커의 대체 절차는 7.2.3절. “환경 변수를 사용하여 실행 중인 브로커 배포에 대한 Prometheus 플러그인 활성화” 를 참조하십시오.

프로세스

  1. 브로커 배포에 사용하는 CR 인스턴스를 엽니다. 예를 들어 기본 배포의 CR은 다음과 유사할 수 있습니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
    spec:
      deploymentPlan:
        size: 4
        image: registry.redhat.io/amq7/amq-broker-rhel8:7.12
      ...
  2. deploymentPlan 섹션에서 enableMetricsPlugin 속성을 추가하고 아래 표시된 대로 값을 true 로 설정합니다.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: ex-aao
    spec:
      deploymentPlan:
        size: 4
        image: registry.redhat.io/amq7/amq-broker-rhel8:7.12
        ...
        enableMetricsPlugin: true
    enableMetricsPlugin
    배포의 브로커에 Prometheus 플러그인이 활성화되어 있는지 여부를 지정합니다.
  3. CR 인스턴스를 저장합니다.
  4. 이전에 브로커 배포를 생성한 프로젝트로 전환합니다.

    $ oc project <project_name>
  5. 명령줄에서 변경 사항을 적용합니다.

    $ oc apply -f <path/to/custom_resource_instance>.yaml

    지표 플러그인은 Prometheus 형식으로 브로커 런타임 지표를 수집하기 시작합니다.

추가 리소스

7.2.3. 환경 변수를 사용하여 실행 중인 브로커 배포에 대한 Prometheus 플러그인 활성화

다음 절차에서는 환경 변수를 사용하여 AMQ Broker에 대한 Prometheus 플러그인을 활성화하는 방법을 보여줍니다. 대체 절차는 7.2.2절. “CR을 사용하여 Prometheus 플러그인 활성화” 를 참조하십시오.

사전 요구 사항

  • AMQ Broker Operator를 사용하여 생성된 브로커 Pod에 대한 Prometheus 플러그인을 활성화할 수 있습니다. 그러나 배포된 브로커는 AMQ Broker 7.7 이상에 브로커 컨테이너 이미지를 사용해야 합니다.

프로세스

  1. 브로커 배포가 포함된 프로젝트에 대한 관리자 권한으로 OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. 웹 콘솔에서 프로젝트를 클릭합니다. 브로커 배포가 포함된 프로젝트를 선택합니다.
  3. 프로젝트에서 StatefulSets 또는 DeploymentConfigs를 보려면 WorkloadsStatefulSets 를 클릭합니다.
  4. 브로커 배포에 해당하는 StatefulSet 또는 DeploymentConfig를 클릭합니다.
  5. 브로커 배포의 환경 변수에 액세스하려면 환경 탭을 클릭합니다.
  6. 새 환경 변수 AMQ_ENABLE_METRICS_PLUGIN 을 추가합니다. 변수 값을 true 로 설정합니다.

    AMQ_ENABLE_METRICS_PLUGIN 환경 변수를 설정하면 OpenShift가 StatefulSet 또는 DeploymentConfig에서 각 브로커 Pod를 다시 시작합니다. 배포에 Pod가 여러 개 있는 경우 OpenShift는 각 포드를 차례로 다시 시작합니다. 각 브로커 Pod가 다시 시작되면 해당 브로커의 Prometheus 플러그인이 브로커 런타임 메트릭을 수집하기 시작합니다.

7.2.4. 실행중인 브로커 Pod에 대한 Prometheus 지표에 액세스

다음 절차에서는 실행 중인 브로커 Pod에 대한 Prometheus 메트릭에 액세스하는 방법을 보여줍니다.

사전 요구 사항

프로세스

  1. 메트릭이 액세스하려는 브로커 Pod의 경우 Pod를 AMQ 브로커 관리 콘솔에 연결하기 위해 이전에 생성한 경로를 식별해야 합니다. 경로 이름은 메트릭에 액세스하는 데 필요한 URL의 일부를 형성합니다.

    1. 네트워킹 경로를 클릭합니다.
    2. 선택한 브로커 Pod의 경우 Pod를 AMQ Broker 관리 콘솔에 연결하기 위해 생성된 경로를 확인합니다. Hostname 에서 표시된 전체 URL을 기록해 둡니다. 예를 들면 다음과 같습니다.

      http://rte-console-access-pod1.openshiftdomain
  2. Prometheus 지표에 액세스하려면 웹 브라우저에서 "/metrics" 가 추가된 이전에 명시된 경로 이름을 입력합니다. 예를 들면 다음과 같습니다.

    http://rte-console-access-pod1.openshiftdomain/metrics
참고

콘솔 구성에서 SSL을 사용하지 않는 경우 URL에 http 를 지정합니다. 이 경우 호스트 이름의 DNS 확인은 트래픽을 OpenShift 라우터의 포트 80으로 보냅니다. 콘솔 구성에서 SSL을 사용하는 경우 URL에 https 를 지정합니다. 이 경우 브라우저가 기본적으로 OpenShift 라우터의 포트 443으로 설정됩니다. 이렇게 하면 OpenShift 라우터에서 기본적으로 라우터가 수행하는 SSL 트래픽에 포트 443도 사용하는 경우 콘솔에 성공적으로 연결할 수 있습니다.

7.3. Cryostat를 사용하여 브로커 런타임 데이터 모니터링

이 예에서는 Jolokia REST 인터페이스를 사용하여 브로커를 모니터링하는 방법을 보여줍니다.

사전 요구 사항

프로세스

  1. 실행 중인 Pod 목록을 가져옵니다.

    $ oc get pods
    
    NAME                 READY     STATUS    RESTARTS   AGE
    ex-aao-ss-1   1/1       Running   0          14d
  2. oc logs 명령을 실행합니다.

    $ oc logs -f ex-aao-ss-1
    
    ...
    Running Broker in /home/jboss/amq-broker
    ...
    2021-09-17 09:35:10,813 INFO  [org.apache.activemq.artemis.integration.bootstrap] AMQ101000: Starting ActiveMQ Artemis Server
    2021-09-17 09:35:10,882 INFO  [org.apache.activemq.artemis.core.server] AMQ221000: live Message Broker is starting with configuration Broker Configuration (clustered=true,journalDirectory=data/journal,bindingsDirectory=data/bindings,largeMessagesDirectory=data/large-messages,pagingDirectory=data/paging)
    2021-09-17 09:35:10,971 INFO  [org.apache.activemq.artemis.core.server] AMQ221013: Using NIO Journal
    2021-09-17 09:35:11,114 INFO  [org.apache.activemq.artemis.core.server] AMQ221057: Global Max Size is being adjusted to 1/2 of the JVM max size (-Xmx). being defined as 2,566,914,048
    2021-09-17 09:35:11,369 WARNING [org.jgroups.stack.Configurator] JGRP000014: BasicTCP.use_send_queues has been deprecated: will be removed in 4.0
    2021-09-17 09:35:11,385 WARNING [org.jgroups.stack.Configurator] JGRP000014: Discovery.timeout has been deprecated: GMS.join_timeout should be used instead
    2021-09-17 09:35:11,480 INFO  [org.jgroups.protocols.openshift.DNS_PING] serviceName [ex-aao-ping-svc] set; clustering enabled
    2021-09-17 09:35:24,540 INFO  [org.openshift.ping.common.Utils] 3 attempt(s) with a 1000ms sleep to execute [GetServicePort] failed. Last failure was [javax.naming.CommunicationException: DNS error]
    ...
    2021-09-17 09:35:25,044 INFO  [org.apache.activemq.artemis.core.server] AMQ221034: Waiting indefinitely to obtain live lock
    2021-09-17 09:35:25,045 INFO  [org.apache.activemq.artemis.core.server] AMQ221035: Live Server Obtained live lock
    2021-09-17 09:35:25,206 INFO  [org.apache.activemq.artemis.core.server] AMQ221080: Deploying address DLQ supporting [ANYCAST]
    2021-09-17 09:35:25,240 INFO  [org.apache.activemq.artemis.core.server] AMQ221003: Deploying ANYCAST queue DLQ on address DLQ
    2021-09-17 09:35:25,360 INFO  [org.apache.activemq.artemis.core.server] AMQ221080: Deploying address ExpiryQueue supporting [ANYCAST]
    2021-09-17 09:35:25,362 INFO  [org.apache.activemq.artemis.core.server] AMQ221003: Deploying ANYCAST queue ExpiryQueue on address ExpiryQueue
    2021-09-17 09:35:25,656 INFO  [org.apache.activemq.artemis.core.server] AMQ221020: Started EPOLL Acceptor at ex-aao-ss-1.ex-aao-hdls-svc.broker.svc.cluster.local:61616 for protocols [CORE]
    2021-09-17 09:35:25,660 INFO  [org.apache.activemq.artemis.core.server] AMQ221007: Server is now live
    2021-09-17 09:35:25,660 INFO  [org.apache.activemq.artemis.core.server] AMQ221001: Apache ActiveMQ Artemis Message Broker version 2.16.0.redhat-00022 [amq-broker, nodeID=8d886031-179a-11ec-9e02-0a580ad9008b]
    2021-09-17 09:35:26,470 INFO  [org.apache.amq.hawtio.branding.PluginContextListener] Initialized amq-broker-redhat-branding plugin
    2021-09-17 09:35:26,656 INFO  [org.apache.activemq.hawtio.plugin.PluginContextListener] Initialized artemis-plugin plugin
    ...
  3. 쿼리를 실행하여 MaxConsumers 에 대한 브로커를 모니터링합니다.

    $ curl -k -u admin:admin http://console-broker.amq-demo.apps.example.com/console/jolokia/read/org.apache.activemq.artemis:broker=%22amq-broker%22,component=addresses,address=%22TESTQUEUE%22,subcomponent=queues,routing-type=%22anycast%22,queue=%22TESTQUEUE%22/MaxConsumers
    
    {"request":{"mbean":"org.apache.activemq.artemis:address=\"TESTQUEUE\",broker=\"amq-broker\",component=addresses,queue=\"TESTQUEUE\",routing-type=\"anycast\",subcomponent=queues","attribute":"MaxConsumers","type":"read"},"value":-1,"timestamp":1528297825,"status":200}

8장. reference

8.1. 사용자 정의 리소스 구성 참조

CRD(Custom Resource Definition)는 Operator와 함께 배포된 사용자 정의 OpenShift 오브젝트의 구성 항목 스키마입니다. 해당 CR(사용자 정의 리소스) 인스턴스를 배포하여 CRD에 표시된 구성 항목의 값을 지정합니다.

다음 하위 섹션에서는 기본 브로커 CRD를 기반으로 사용자 정의 리소스 인스턴스에서 설정할 수 있는 구성 항목을 자세히 설명합니다.

8.1.1. 브로커 사용자 정의 리소스 구성 참조

기본 브로커 CRD를 기반으로 하는 CR 인스턴스를 사용하면 OpenShift 프로젝트에 배포할 브로커를 구성할 수 있습니다. 다음 표에서는 CR 인스턴스에서 구성할 수 있는 항목을 설명합니다.

중요

배포하는 해당 CR(사용자 정의 리소스)에 별표(*)로 표시된 구성 항목이 필요합니다. 필수가 아닌 항목의 값을 명시적으로 지정하지 않으면 구성은 기본값을 사용합니다.

표 8.1. broker CR 참조
항목하위 항목설명 및 사용

adminUser*

 

브로커 및 관리 콘솔에 연결하는 데 필요한 관리자 사용자 이름입니다.

값을 지정하지 않으면 값이 자동으로 생성되어 시크릿에 저장됩니다. 기본 시크릿 이름의 형식은 < custom_resource_name> -credentials-secret 입니다. 예를 들어 my-broker-deployment-credentials-secret.

유형: 문자열

: my-user

기본값: 자동으로 생성 된 임의의 값

adminPassword*

 

브로커 및 관리 콘솔에 연결하는 데 필요한 관리자 암호입니다.

값을 지정하지 않으면 값이 자동으로 생성되어 시크릿에 저장됩니다. 기본 시크릿 이름의 형식은 < custom_resource_name> -credentials-secret 입니다. 예를 들어 my-broker-deployment-credentials-secret.

유형: 문자열

: my-password

기본값: 자동으로 생성 된 임의의 값

ingressDomain

 

허용자, 커넥터 및 관리 콘솔을 위해 생성된 경로 및 인그레스의 호스트 이름에 사용자 지정 도메인을 추가합니다.

유형: 문자열

: mydomain.com

deploymentPlan*

 

브로커 배포 구성

 

이미지*

배포의 각 브로커에 사용되는 브로커 컨테이너 이미지의 전체 경로입니다.

CR에 이미지 값을 명시적으로 지정할 필요가 없습니다. 자리 표시자 의 기본값은 Operator가 사용할 적절한 이미지를 아직 결정하지 않았음을 나타냅니다.

Operator에서 사용할 브로커 컨테이너 이미지를 선택하는 방법을 알아보려면 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법” 을 참조하십시오.

유형: 문자열

: registry.redhat.io/amq7/amq-broker-rhel8@sha256:55ae4e28b100534d63c34ab86f69230d274c999d1493f26fe3e75ba7a0ce

기본값: 자리 표시자

 

크기*

배포에 생성할 브로커 Pod 수입니다.

값을 2 이상으로 지정하면 브로커 배포가 기본적으로 클러스터형됩니다. 클러스터 사용자 이름과 암호는 기본적으로 adminUseradminPassword 와 동일한 시크릿에 자동으로 생성되고 저장됩니다.

유형: int

: 1

기본값: 1

 

requireLogin

브로커에 연결하는 데 로그인 인증 정보가 필요한지 여부를 지정합니다.

유형: 부울

: false

기본값: true

 

persistenceEnabled

배포의 각 브로커 Pod에 저널 스토리지를 사용할지 여부를 지정합니다. true 로 설정하면 각 브로커 Pod에 PVC(영구 볼륨 클레임)를 사용하여 Operator에서 요청할 수 있는 사용 가능한 PV(영구 볼륨)가 필요합니다.

유형: 부울

: false

기본값: true

 

initImage

브로커를 구성하는 데 사용되는 init 컨테이너 이미지입니다.

사용자 정의 이미지를 제공하려는 경우를 제외하고 CR에서 initImage 값을 명시적으로 지정할 필요가 없습니다.

Operator에서 사용할 기본 제공 Init Container 이미지를 선택하는 방법을 알아보려면 2.7절. “Operator에서 컨테이너 이미지를 선택하는 방법” 을 참조하십시오.

사용자 정의 Init Container 이미지를 지정하는 방법을 알아보려면 4.11절. “사용자 정의 Init Container 이미지 지정” 을 참조하십시오.

유형: 문자열

: registry.redhat.io/amq7/amq-broker-init-rhel8@sha256:442339c33549c3be9fe3b5c71184a753a3cf10b000b2ecc5bc9a062dd91c8def

기본값: 지정되지 않음

 

journalType

비동기 I/O(AIO) 또는 비차단 I/O(NIO) 사용 여부를 지정합니다.

유형: 문자열

: aio

기본값: nio

 

messageMigration

브로커 배포의 의도적인 축소로 인해 브로커 Pod가 종료되면 브로커 클러스터에서 계속 실행 중인 다른 브로커 Pod로 메시지를 마이그레이션할지 여부를 지정합니다.

유형: 부울

: false

기본값: true

 

resources.limits.cpu

배포의 Pod에서 실행되는 각 브로커 컨테이너가 사용할 수 있는 최대 호스트 노드 CPU 양(밀리코어)입니다.

유형: 문자열

: "500m"

기본값: OpenShift Container Platform 버전에서 사용하는 것과 동일한 기본값을 사용합니다. 클러스터 관리자를 참조하십시오.

 

resources.limits.memory

배포의 Pod에서 실행 중인 각 브로커 컨테이너에서 사용할 수 있는 최대 호스트 노드 메모리(바이트)입니다. 바이트 표기법(예: K, M, G) 또는 바이너리 동등한 바이너리(Ki, Mi, Gi)를 지원합니다.

유형: 문자열

: "1024M"

기본값: OpenShift Container Platform 버전에서 사용하는 것과 동일한 기본값을 사용합니다. 클러스터 관리자를 참조하십시오.

 

resources.requests.cpu

배포의 Pod에서 각 브로커 컨테이너가 명시적으로 요청하는 호스트 노드 CPU의 양입니다.

유형: 문자열

: "250m"

기본값: OpenShift Container Platform 버전에서 사용하는 것과 동일한 기본값을 사용합니다. 클러스터 관리자를 참조하십시오.

 

resources.requests.memory

배포의 Pod에서 명시적으로 요청하는 각 브로커 컨테이너의 호스트 노드 메모리 양(바이트)입니다. 바이트 표기법(예: K, M, G) 또는 바이너리 동등한 바이너리(Ki, Mi, Gi)를 지원합니다.

유형: 문자열

: "512M"

기본값: OpenShift Container Platform 버전에서 사용하는 것과 동일한 기본값을 사용합니다. 클러스터 관리자를 참조하십시오.

 

storage.size

배포의 각 브로커에 영구 스토리지에 필요한 PVC(영구 볼륨 클레임)의 크기(바이트)입니다. 이 속성은 persistenceEnabledtrue 로 설정된 경우에만 적용됩니다. 지정한 값에 단위가 포함되어야 합니다. 바이트 표기법(예: K, M, G) 또는 바이너리 동등한 바이너리(Ki, Mi, Gi)를 지원합니다.

유형: 문자열

: 4Gi

기본값: 2Gi

 

jolokiaAgentEnabled

배포의 브로커에 대해 Jolokia JVM 에이전트가 활성화되어 있는지 여부를 지정합니다. 이 속성의 값을 true 로 설정하면 Fuse Console에서 브로커의 런타임 데이터를 검색하고 표시할 수 있습니다.

유형: 부울

: true

기본값: false

 

managementRBACEnabled

배포의 브로커에 RBAC(역할 기반 액세스 제어)가 활성화되어 있는지 여부를 지정합니다. Fuse Console은 자체 역할 기반 액세스 제어를 사용하므로 Fuse Console을 false설정해야 합니다.

유형: 부울

: false

기본값: true

 

유사성

Pod에 대한 예약 제약 조건을 지정합니다. 선호도 속성에 대한 자세한 내용은 OpenShift Container Platform 설명서의 속성을 참조하십시오.

 

허용 오차

Pod의 허용 오차를 지정합니다. 허용 오차 속성에 대한 자세한 내용은 OpenShift Container Platform 설명서의 속성을 참조하십시오.

 

nodeSelector

해당 노드에 예약할 Pod의 노드 레이블과 일치하는 라벨을 지정합니다.

 

storageClassName

PVC(영구 볼륨 클레임)에 사용할 스토리지 클래스의 이름을 지정합니다. 스토리지 클래스는 관리자가 사용 가능한 스토리지를 설명하고 분류할 수 있는 방법을 제공합니다. 예를 들어 스토리지 클래스에는 특정 수준의 서비스 수준, 백업 정책 또는 연결된 기타 관리 정책이 있을 수 있습니다.

유형: 문자열

: gp3

기본값: 지정되지 않음

 

startupProbe

브로커 컨테이너 내의 AMQ Broker 애플리케이션이 시작되었는지 확인하도록 시작 프로브를 구성합니다. 시작 프로브 속성에 대한 자세한 내용은 OpenShift Container Platform 설명서의 속성을 참조하십시오.

 

livenessProbe

실행 중인 브로커 컨테이너에서 주기적인 상태 점검을 구성하여 브로커가 실행 중인지 확인합니다. 활성 프로브 속성에 대한 자세한 내용은 OpenShift Container Platform 설명서의 속성을 참조하십시오.

 

readinessProbe

브로커가 네트워크 트래픽을 수락하고 있는지 확인하도록 실행 중인 브로커 컨테이너에서 주기적인 상태 점검을 구성합니다. 준비 상태 프로브 속성에 대한 자세한 내용은 OpenShift Container Platform 설명서의 속성을 참조하십시오.

 

extraMounts

구성 정보가 포함된 시크릿 또는 configMAP를 브로커 Pod의 파일로 마운트합니다. 예를 들어 AMQ Broker에 대한 사용자 지정 로깅 구성이 포함된 보안을 마운트할 수 있습니다.

유형: object

예제 참조 4.18절. “브로커의 로깅 구성”

기본값: 지정되지 않음

 

labels

브로커 pod에 라벨을 할당합니다.

유형: 문자열

: location: "production"

기본값: 지정되지 않음

 

podSecurityContext

브로커 Pod를 실행하는 데 사용되는 보안 옵션을 정의합니다. 다음 기본 보안 값을 사용하면 브로커 Pod를 OpenShift Container Platform restricted SCC(보안 컨텍스트 제약 조건)에서 실행할 수 있습니다.

runAsNonRoot: true

seccompProfile: type:RuntimeDefault

브로커를 사용자 정의 SCC에서 실행하려면 CR에서 다음 podSecurityContext 옵션을 구성할 수 있습니다. CR에서 podSecurityContext 옵션을 구성하는 경우 기본값이 적용되지 않으므로 사용자 정의 SCC에서 실행하는 데 필요한 모든 옵션을 구성해야 합니다.

  • fsGroup
  • fsGroupChangePolicy
  • runAsGroup
  • runAsUser
  • runAsNonRoot
  • seLinuxOptions
  • seccompProfile
  • supplementalGroups
  • sysctls
  • windowsOptions

podSecurityContext 옵션에 대한 자세한 내용은 OpenShift Container Platform 설명서의 속성을 참조하십시오.

 

containerSecurityContext

Pod에서 브로커 컨테이너를 실행하는 데 사용되는 보안 옵션을 정의합니다. 다음 기본값을 사용하면 컨테이너가 OpenShift Container Platform restricted SCC(보안 컨텍스트 제약 조건)에서 실행됩니다.

  • allowPrivilegeEscalation: false
  • 기능:drop:ALL
  • runAsNonRoot: true
  • seccompProfile: type:RuntimeDefault

브로커를 사용자 정의 SCC에서 실행하려면 CR에서 다음 containerSecurityContext 옵션을 구성할 수 있습니다. CR에서 containerSecurityContext 옵션을 구성하는 경우 기본값이 적용되지 않으므로 사용자 정의 SCC에서 실행하는 데 필요한 모든 옵션을 구성해야 합니다.

  • allowPrivilegeEscalation
  • capabilities
  • privileged
  • procMount
  • readOnlyRootFilesystem
  • runAsGroup
  • runAsNonRoot
  • runAsUser
  • seLinuxOptions
  • seccompProfile
  • windowsOptions

containerSecurityContext 옵션에 대한 자세한 내용은 OpenShift Container Platform 설명서의 속성을 참조하십시오.

 

podSecurity.serviceAccountName

브로커 Pod의 서비스 계정 이름을 지정합니다.

유형: 문자열

: amq-broker-controller-manager

기본값: default

콘솔

 

브로커 관리 콘솔 구성.

 

expose

OpenShift Container Platform 외부의 클라이언트에 관리 콘솔을 노출할지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

exposeMode

경로 또는 인그레스를 사용하여 관리 콘솔을 노출할지 여부를 지정합니다. 기본적으로 관리 콘솔은 경로만 사용하여 노출됩니다.

유형: 문자열

: ingress

기본값: route

Ingress를 사용하여 콘솔을 노출하는 경우 CR에서 ingressHost 또는 ingressDomain 값을 지정해야 합니다.

 

ingressHost

관리 콘솔에 노출된 경로 및 수신에 대한 사용자 정의 호스트 값을 지정합니다. 호스트 값에 다음 변수를 포함할 수 있습니다.

* $(CR_NAME) - CR의 metadata.name 속성 값입니다.

* $(CR_NAMESPACE) - 사용자 정의 리소스의 네임스페이스입니다.

* $(BROKER_ORDINAL) - StatefulSet에서 브로커 Pod에 할당된 서수 번호입니다.

* $(ITEM_NAME) - 콘솔 이름입니다. 기본 이름은 wconsj입니다.

* $(RES_TYPE) - 리소스 유형입니다. 경로에는 rte 의 리소스 유형이 있습니다. 수신에는 리소스 유형의 ing 이 있습니다.

* $(INGRESS_DOMAIN) - spec.ingressDomain 속성이 CR에 구성된 경우 값입니다.

유형: 문자열

: console-$(CR_NAME)-$(ITEM_NAME)-$(BROKER_ORDINAL).mydomain.com

 

sslEnabled

관리 콘솔 포트에서 SSL을 사용할지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

sslSecret

브로커 키 저장소, 신뢰 저장소 및 해당 암호(모든 Base64 인코딩)가 저장되는 시크릿입니다. sslSecret 의 값을 지정하지 않으면 콘솔에서 기본 시크릿 이름을 사용합니다. 기본 시크릿 이름은 < custom_resource_name> -console-secret 형식으로 되어 있습니다. 이 속성은 sslEnabled 속성이 true 로 설정된 경우에만 적용됩니다.

유형: 문자열

: my-broker-deployment-console-secret

기본값: 지정되지 않음

 

useClientAuth

관리 콘솔에 클라이언트 권한 부여가 필요한지 여부를 지정합니다.

유형: 부울

: true

기본값: false

acceptors.acceptor

 

단일 허용자 구성 인스턴스입니다.

 

name*

acceptor 이름.

유형: 문자열

: my-acceptor

기본값: 해당 없음

 

port

어셉터 인스턴스에 사용할 포트 번호입니다.

유형: int

: 5672

사용자가 정의한 첫 번째 승인자의 경우 61626 기본값 입니다. 그런 다음 기본값은 사용자가 정의한 모든 후속 수락자에 대해 10씩 증가합니다.

 

프로토콜

어셉터 인스턴스에서 활성화할 메시징 프로토콜입니다.

유형: 문자열

: amqp,core

기본값: all

 

sslEnabled

acceptor 포트에서 SSL이 활성화되어 있는지 여부를 지정합니다. true 로 설정하면 TLS/SSL에 필요한 인증 정보에 대해 sslSecret 에 지정된 시크릿 이름을 찾습니다.

유형: 부울

: true

기본값: false

 

sslSecret

브로커 키 저장소, 신뢰 저장소 및 해당 암호(모든 Base64 인코딩)가 저장되는 시크릿입니다.

sslSecret 의 사용자 정의 시크릿 이름을 지정하지 않으면 acceptor는 기본 시크릿 이름을 가정합니다. 기본 시크릿 이름의 형식은 < custom_resource_name> - <acceptor_name> - -secret 입니다.

허용자가 기본 이름을 가정하는 경우에도 항상 이 시크릿을 직접 생성해야 합니다.

유형: 문자열

: my-broker-deployment-my-acceptor-secret

기본값: <custom_resource_name> - <acceptor_name&gt; -secret

 

enabledCipherSuites

TLS 통신에 사용할 암호화 제품군의 쉼표로 구분된 목록입니다.

클라이언트 애플리케이션에서 지원하는 가장 안전한 암호화 제품군을 지정합니다. 브로커와 클라이언트에 공통되는 암호화 제품군의 쉼표로 구분된 목록을 지정하거나 암호화 모음을 지정하지 않는 경우 브로커와 클라이언트는 사용할 암호화 제품군을 서로 협상합니다. 지정할 암호화 모음을 모르는 경우 먼저 디버그 모드에서 실행 중인 클라이언트와 broker-client 연결을 설정하여 브로커와 클라이언트 모두에 공통된 암호화 제품군을 확인할 수 있습니다. 그런 다음 브로커에서 enabledCipherSuites 를 구성합니다.

사용 가능한 암호화 제품군은 브로커 및 클라이언트에서 사용하는 TLS 프로토콜 버전에 따라 다릅니다. 브로커를 업그레이드한 후 기본 TLS 프로토콜 버전이 변경되면 브로커와 클라이언트가 공통 암호화 제품군을 사용할 수 있도록 이전 TLS 프로토콜 버전을 선택해야 할 수 있습니다. 자세한 내용은 enabledProtocols 를 참조하십시오.

유형: 문자열

기본값: 지정되지 않음

 

enabledProtocols

TLS 통신에 사용할 쉼표로 구분된 프로토콜 목록입니다.

유형: 문자열

: TLSv1,TLSv1.1,TLSv1.2

기본값: 지정되지 않음

TLS 프로토콜 버전을 지정하지 않으면 브로커는 JVM의 기본 버전을 사용합니다. 브로커가 JVM의 기본 TLS 프로토콜 버전을 사용하고 브로커를 업그레이드한 후 해당 버전이 변경되면 브로커 및 클라이언트에서 사용하는 TLS 프로토콜 버전이 호환되지 않을 수 있습니다. 이후 TLS 프로토콜 버전을 사용하는 것이 좋지만, enabledProtocols 에서 이전 버전을 지정하여 최신 TLS 프로토콜 버전을 지원하지 않는 클라이언트와 상호 운용할 수 있습니다.

 

keyStoreProvider

브로커가 사용하는 키 저장소 공급자의 이름입니다.

유형: 문자열

: SunJCE

기본값: 지정되지 않음

 

trustStoreProvider

브로커가 사용하는 truststore 공급자의 이름입니다.

유형: 문자열

: SunJCE

기본값: 지정되지 않음

 

trustStoreType

브로커가 사용하는 신뢰 저장소 유형입니다.

유형: 문자열

: JCEKS

기본값: JKS

 

needClientAuth

브로커가 수락자에 양방향 TLS가 필요하다는 것을 고객에게 알리는지 여부를 지정합니다. 이 속성은 wantClientAuth 를 재정의합니다.

유형: 부울

: true

기본값: 지정되지 않음

 

wantClientAuth

브로커가 클라이언트에 두 방향 TLS가 수락자에서 요청 되지만 필수는 아님을 알리는지 여부를 지정합니다. 이 속성은 needClientAuth 로 재정의됩니다.

유형: 부울

: true

기본값: 지정되지 않음

 

verifyHost

클라이언트 인증서의 CN(일반 이름)을 호스트 이름과 비교할지 여부를 지정하여 일치하는지 확인합니다. 이 옵션은 양방향 TLS가 사용되는 경우에만 적용됩니다.

유형: 부울

: true

기본값: 지정되지 않음

 

sslProvider

SSL 공급자가 JDK 또는 OPENSSL인지 여부를 지정합니다.

유형: 문자열

: OPENSSL

기본값: JDK

 

sniHost

들어오는 연결의 server_name 확장과 일치하는 정규식입니다. 이름이 일치하지 않으면 수락자에 대한 연결이 거부됩니다.

유형: 문자열

: some_regular_expression

기본값: 지정되지 않음

 

expose

OpenShift Container Platform 외부의 클라이언트에 어셉터를 노출할지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

exposeMode

경로 또는 수신을 사용하여 어셉터를 노출할지 여부를 지정합니다. 기본적으로 어셉터는 경로를 사용하여 노출됩니다.

유형: 문자열

: ingress

기본값: route

Ingress를 사용하여 커넥터를 노출하는 경우 CR에 ingressHost 또는 ingressDomain 속성을 포함해야 합니다.

 

ingressHost

허용자에 노출된 경로 및 수신에 대한 사용자 정의 호스트 값을 지정합니다. 호스트에 대해 다음 변수를 포함할 수 있습니다.

* $(CR_NAME) - CR의 metadata.name 속성 값입니다.

* $(CR_NAMESPACE) - 사용자 정의 리소스의 네임스페이스입니다.

* $(BROKER_ORDINAL) - StatefulSet에서 브로커 Pod에 할당된 서수 번호입니다.

* $(ITEM_NAME) - 수락자의 이름입니다.

* $(RES_TYPE) - 리소스 유형입니다. 경로에는 rte 의 리소스 유형이 있습니다. 수신에는 리소스 유형의 ing 이 있습니다.

* $(INGRESS_DOMAIN) - spec.ingressDomain 속성이 CR에 구성된 경우 값입니다.

유형: 문자열

: my-acceptor-$(CR_NAME)-$(ITEM_NAME)-$(BROKER_ORDINAL).mydomain.com

 

anycastPrefix

클라이언트에서 anycast 라우팅 유형을 사용해야 함을 지정하는 데 사용되는 접두사입니다.

유형: 문자열

: jms.queue

기본값: 지정되지 않음

 

multicastPrefix

클라이언트에서 멀티 캐스트 라우팅 유형을 사용하도록 지정하는 데 사용하는 접두사입니다.

유형: 문자열

: /topic/

기본값: 지정되지 않음

 

connectionsAllowed

허용되는 연결 수입니다. 이 제한에 도달하면 로그에 DEBUG 메시지가 표시되고 연결이 거부됩니다. 사용 중인 클라이언트 유형에 따라 연결이 거부될 때 발생하는 작업이 결정됩니다.

유형: 정수

: 2

기본값: 0 (제한되지 않은 연결)

 

amqpMinLargeMessageSize

브로커가 AMQP 메시지를 큰 메시지로 처리하는 데 필요한 최소 메시지 크기(바이트)입니다. AMQP 메시지의 크기가 이 값과 같거나 크면 브로커는 메시지 저장을 위해 브로커가 사용하는 영구 볼륨(PV)의 대규모 메시지 디렉터리(/opt/ <custom_resource_name> /data/large-messages )에 메시지를 저장합니다. 값을 -1 로 설정하면 AMQP 메시지의 대규모 메시지 처리가 비활성화됩니다.

유형: 정수

: 204800

기본값: 102400 (100 KB)

 

BindToAllInterfaces

true로 설정하면 Pod의 내부 IP 주소 대신 0.0.0.0 IP 주소로 브로커 수락자를 구성합니다. 브로커 승인자의 IP 주소가 0.0.0.0인 경우 Pod에 대해 구성된 모든 인터페이스에 바인딩되며 클라이언트는 OpenShift Container Platform 포트 전달을 사용하여 트래픽을 브로커로 보낼 수 있습니다. 일반적으로 이 구성을 사용하여 서비스를 디버그합니다. port-forwarding에 대한 자세한 내용은 OpenShift Container Platform 설명서의 컨테이너의 애플리케이션에 액세스하는 데 포트 전달을 참조하십시오.

참고

포트 전달을 잘못 사용하면 환경에 대한 보안 위험이 발생할 수 있습니다. 가능한 경우 프로덕션 환경에서 포트 전달을 사용하지 마십시오.

유형: 부울

: true

기본값: false

connectors.connector

 

단일 커넥터 구성 인스턴스입니다.

 

name*

커넥터의 이름입니다.

유형: 문자열

: my-connector

기본값: 해당 없음

 

type

생성할 커넥터 유형입니다. tcp 또는 vm.

유형: 문자열

: vm

기본값: tcp

 

host*

연결할 호스트 이름 또는 IP 주소입니다.

유형: 문자열

: 192.168.0.58

기본값: 지정되지 않음

 

포트*

커넥터 인스턴스에 사용할 포트 번호입니다.

유형: int

: 22222

기본값: 지정되지 않음

 

sslEnabled

커넥터 포트에서 SSL이 활성화되어 있는지 여부를 지정합니다. true 로 설정하면 TLS/SSL에 필요한 인증 정보에 대해 sslSecret 에 지정된 시크릿 이름을 찾습니다.

유형: 부울

: true

기본값: false

 

sslSecret

브로커 키 저장소, 신뢰 저장소 및 해당 암호(모든 Base64 인코딩)가 저장되는 시크릿입니다.

sslSecret 의 사용자 정의 시크릿 이름을 지정하지 않으면 커넥터는 기본 시크릿 이름을 가정합니다. 기본 시크릿 이름의 형식은 < custom_resource_name> - <connector_name> - -secret 입니다.

커넥터가 기본 이름을 가정하는 경우에도 항상 이 시크릿을 직접 생성해야 합니다.

유형: 문자열

: my-broker-deployment-my-connector-secret

기본값: <custom_resource_name> - <connector_name&gt; - 시크릿

 

enabledCipherSuites

TLS 통신에 사용할 암호화 제품군의 쉼표로 구분된 목록입니다.

유형: 문자열

참고: 커넥터의 경우 암호화 제품군 목록을 지정하지 않는 것이 좋습니다.

기본값: 지정되지 않음

 

keyStoreProvider

브로커가 사용하는 키 저장소 공급자의 이름입니다.

유형: 문자열

: SunJCE

기본값: 지정되지 않음

 

trustStoreProvider

브로커가 사용하는 truststore 공급자의 이름입니다.

유형: 문자열

: SunJCE

기본값: 지정되지 않음

 

trustStoreType

브로커가 사용하는 신뢰 저장소 유형입니다.

유형: 문자열

: JCEKS

기본값: JKS

 

enabledProtocols

TLS 통신에 사용할 쉼표로 구분된 프로토콜 목록입니다.

유형: 문자열

: TLSv1,TLSv1.1,TLSv1.2

기본값: 지정되지 않음

 

needClientAuth

브로커가 커넥터에 양방향 TLS가 필요함을 알리는지 여부를 지정합니다. 이 속성은 wantClientAuth 를 재정의합니다.

유형: 부울

: true

기본값: 지정되지 않음

 

wantClientAuth

브로커가 클라이언트에 양방향 TLS가 커넥터에서 요청 되지만 필수는 아님을 알리는지 여부를 지정합니다. 이 속성은 needClientAuth 로 재정의됩니다.

유형: 부울

: true

기본값: 지정되지 않음

 

verifyHost

클라이언트 인증서의 CN(일반 이름)을 호스트 이름과 비교할지 여부를 지정하여 일치하는지 확인합니다. 이 옵션은 양방향 TLS가 사용되는 경우에만 적용됩니다.

유형: 부울

: true

기본값: 지정되지 않음

 

sslProvider

SSL 공급자가 JDK 또는 OPENSSL 인지 여부를 지정합니다.

유형: 문자열

: OPENSSL

기본값: JDK

 

sniHost

발신 연결의 server_name 확장과 일치하는 정규식입니다. 이름이 일치하지 않으면 커넥터 연결이 거부됩니다.

유형: 문자열

: some_regular_expression

기본값: 지정되지 않음

 

expose

OpenShift Container Platform 외부의 클라이언트에 커넥터를 노출할지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

exposeMode

경로 또는 수신을 사용하여 커넥터를 노출할지 여부를 지정합니다. 기본적으로 커넥터는 경로를 사용하여만 노출됩니다.

유형: 문자열

: ingress

기본값: route

Ingress를 사용하여 커넥터를 노출하는 경우 CR에 ingressHost 또는 ingressDomain 속성을 포함해야 합니다.

 

ingressHost

경로에 대한 사용자 정의 호스트 값을 지정하고 커넥터에 노출된 인그레스를 지정합니다. 호스트 값에 다음 변수를 포함할 수 있습니다.

* $(CR_NAME) - CR의 metadata.name 속성 값입니다.

* $(CR_NAMESPACE) - 사용자 정의 리소스의 네임스페이스입니다.

* $(BROKER_ORDINAL) - StatefulSet에서 브로커 Pod에 할당된 서수 번호입니다.

* $(ITEM_NAME) - 커넥터의 이름입니다.

* $(RES_TYPE) - 리소스 유형입니다. 경로에는 rte 의 리소스 유형이 있습니다. 수신에는 리소스 유형의 ing 이 있습니다.

* $(INGRESS_DOMAIN) - spec.ingressDomain 속성이 CR에 구성된 경우 값입니다.

유형: 문자열

: my-connector-$(CR_NAME)-$(ITEM_NAME)-$(BROKER_ORDINAL).$(INGRESS_DOMAIN).mydomain.com

addressSettings.applyRule

 

Operator가 일치하는 각 주소 또는 주소 집합에 대해 CR에 추가하는 구성을 적용하는 방법을 지정합니다.

지정할 수 있는 값은 다음과 같습니다.

merge_all

CR 기본 구성에 모두 지정된 주소 설정의 경우 동일한 주소 또는 주소 집합과 일치하는 기본 구성입니다.

  • 기본 구성에 지정된 속성 값을 CR에 지정된 속성 값으로 바꿉니다.
  • CR 또는 기본 구성에 고유하게 지정된 속성 값을 유지합니다. 각 항목을 최종 병합된 구성에 포함합니다.

CR 또는 특정 주소 또는 주소 집합과 일치하는 기본 구성에 지정된 주소 설정의 경우 이를 최종 병합된 구성에 포함합니다.

merge_replace

CR 동일한 주소 또는 주소 집합과 일치하는 기본 구성에 지정된 주소 설정의 경우 CR 에 지정된 설정을 최종 병합된 구성에 포함합니다. CR에 지정되지 않은 경우에도 기본 구성에 지정된 속성은 포함하지 마십시오.

+ CR 또는 특정 주소 또는 주소 집합과 일치하는 기본 구성에 지정된 주소 설정의 경우 이를 최종 병합된 구성에 포함합니다.

replace_all
기본 구성에 지정된 모든 주소 설정을 CR에 지정된 주소로 바꿉니다. 최종 메그레이션 구성은 CR에 지정된 구성과 정확히 일치합니다.

유형: 문자열

: replace_all

기본값: merge_all

addressSettings.addressSetting

 

일치하는 주소 또는 주소 집합에 대한 주소 설정입니다.

 

addressFullPolicy

maxSizeBytes 로 구성된 주소가 가득 차면 발생하는 작업을 지정합니다. 사용 가능한 정책은 다음과 같습니다.

PAGE
전체 주소로 전송된 메시지는 디스크로 페이징됩니다.
DROP
전체 주소로 전송된 메시지는 자동으로 삭제됩니다.
FAIL
전체 주소로 전송된 메시지는 삭제되고 메시지 생산자가 예외를 받습니다.
블록

메시지 생산자는 추가 메시지를 전송하려고 할 때 차단됩니다.

BLOCK 정책은 AMQP, OpenWire 및 Core Protocol에서만 작동합니다. 이러한 프로토콜은 흐름 제어를 지원하기 때문입니다.

유형: 문자열

: DROP

기본값: PAGE

 

autoCreateAddresses

브로커가 메시지를 보낼 때 브로커가 자동으로 주소를 생성하는지 또는 존재하지 않는 주소에 바인딩된 큐에서 메시지를 사용하려고 하는지 여부를 지정합니다.

유형: 부울

: false

기본값: true

 

autoCreateDeadLetterResources

브로커가 전달되지 않은 메시지를 수신할 dead letter 주소와 큐를 자동으로 생성하는지 여부를 지정합니다.

매개변수가 true 로 설정된 경우 브로커는 dead letter address 및 관련 dead letter 큐를 자동으로 생성합니다. 자동으로 생성된 주소의 이름은 deadLetterAddress 에 대해 지정한 값과 일치합니다.

유형: 부울

: true

기본값: false

 

autoCreateExpiryResources

브로커가 만료된 메시지를 수신하기 위해 주소와 큐를 자동으로 생성하는지 여부를 지정합니다.

매개변수가 true 로 설정된 경우 브로커는 만료 주소 및 관련 만료 큐를 자동으로 생성합니다. 자동으로 생성된 주소의 이름은 expiryAddress 에 지정된 값과 일치합니다.

유형: 부울

: true

기본값: false

 

autoCreateJmsQueues

이 속성은 더 이상 사용되지 않습니다. 대신 autoCreateQueues 를 사용합니다.

 

autoCreateJmsTopics

이 속성은 더 이상 사용되지 않습니다. 대신 autoCreateQueues 를 사용합니다.

 

autoCreateQueues

클라이언트가 메시지를 보내거나 아직 존재하지 않는 큐에서 메시지를 사용하려고 할 때 브로커가 큐를 자동으로 생성하는지 여부를 지정합니다.

유형: 부울

: false

기본값: true

 

autoDeleteAddresses

브로커에 더 이상 큐가 없는 경우 브로커가 자동으로 생성된 주소를 자동으로 삭제하는지 여부를 지정합니다.

유형: 부울

: false

기본값: true

 

autoDeleteAddressDelay

주소에 큐가 없는 경우 브로커가 자동으로 생성된 주소를 삭제하기 전에 대기하는 시간(밀리초)입니다.

유형: 정수

: 100

기본값: 0

 

autoDeleteJmsQueues

이 속성은 더 이상 사용되지 않습니다. 대신 autoDeleteQueues 를 사용합니다.

 

autoDeleteJmsTopics

이 속성은 더 이상 사용되지 않습니다. 대신 autoDeleteQueues 를 사용합니다.

 

autoDeleteQueues

큐에 소비자가 없고 메시지가 없는 경우 브로커가 자동으로 생성된 큐를 자동으로 삭제하는지 여부를 지정합니다.

유형: 부울

: false

기본값: true

 

autoDeleteCreatedQueues

큐에 소비자가 없고 메시지가 없는 경우 브로커가 수동으로 생성된 큐를 자동으로 삭제하는지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

autoDeleteQueuesDelay

브로커가 큐에 소비자가 없을 때 자동으로 생성된 큐를 자동으로 삭제하기 전에 대기하는 시간(밀리초)입니다.

유형: 정수

: 10

기본값: 0

 

autoDeleteQueuesMessageCount

브로커가 큐를 자동으로 삭제할 수 있는지 여부를 평가하기 전에 큐에 있을 수 있는 최대 메시지 수입니다.

유형: 정수

: 5

기본값: 0

 

configDeleteAddresses

구성 파일이 다시 로드되면 이 매개변수는 구성 파일에서 삭제된 주소(및 해당 대기열)를 처리하는 방법을 지정합니다. 다음 값을 지정할 수 있습니다.

OFF
구성 파일이 다시 로드될 때 브로커는 주소를 삭제하지 않습니다.
FORCE
구성 파일이 다시 로드될 때 브로커에서 주소와 큐를 삭제합니다. 큐에 메시지가 있는 경우 해당 메시지도 제거됩니다.

유형: 문자열

: FORCE

기본값: OFF

 

configDeleteQueues

구성 파일이 다시 로드되면 이 설정은 브로커가 구성 파일에서 삭제된 큐를 처리하는 방법을 지정합니다. 다음 값을 지정할 수 있습니다.

OFF
구성 파일이 다시 로드될 때 브로커에서 큐를 삭제하지 않습니다.
FORCE
브로커는 구성 파일이 다시 로드될 때 큐를 삭제합니다. 큐에 메시지가 있는 경우 해당 메시지도 제거됩니다.

유형: 문자열

: FORCE

기본값: OFF

 

deadLetterAddress

브로커가 dead (즉, 전달되지 않은) 메시지를 보내는 주소입니다.

유형: 문자열

: DLA

기본값: 없음

 

deadLetterQueuePrefix

브로커가 자동으로 생성된 dead letter 큐의 이름에 적용되는 접두사입니다.

유형: 문자열

: myDLQ.

기본값: DLQ.

 

deadLetterQueueSuffix

브로커가 자동으로 생성된 dead letter 큐에 적용되는 접미사입니다.

유형: 문자열

: .DLQ

기본값: 없음

 

defaultAddressRoutingType

자동으로 생성된 주소에 사용되는 라우팅 유형입니다.

유형: 문자열

: ANYCAST

기본값: MULTICAST

 

defaultConsumersBeforeDispatch

메시지 디스패치 전에 필요한 소비자 수는 주소의 큐에 대해 시작될 수 있습니다.

유형: 정수

: 5

기본값: 0

 

defaultConsumerWindowSize

소비자의 기본 창 크기(바이트)입니다.

유형: 정수

: 300000

기본값: 1048576 (1024*1024)

 

defaultDelayBeforeDispatch

defaultConsumersBeforeDispatch 에 지정된 값에 도달하지 않은 경우 브로커가 메시지를 디스패치하기 전에 대기하는 기본 시간(밀리초)입니다.

유형: 정수

: 5

기본값: -1 (마운트 없음)

 

defaultExclusiveQueue

기본적으로 주소의 모든 큐가 배타적 대기열인지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

defaultGroupBuckets

메시지 그룹화에 사용할 버킷 수입니다.

유형: 정수

: 0 (메시지 그룹화 비활성화)

기본값: -1 (제한 없음)

 

defaultGroupFirstKey

그룹에서 첫 번째 메시지를 소비자에 나타내는 데 사용되는 키입니다.

유형: 문자열

: firstMessageKey

기본값: 없음

 

defaultGroupRebalance

새 소비자가 브로커에 연결할 때 그룹을 재조정할지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

defaultGroupRebalancePauseDispatch

브로커가 그룹 재조정하는 동안 메시지 디스패치를 일시 중지할지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

defaultLastValueQueue

주소의 모든 큐가 기본적으로 마지막 값 대기열인지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

defaultLastValueKey

마지막 값 큐에 사용할 기본 키입니다.

유형: 문자열

: shares_ticker

기본값: 없음

 

defaultMaxConsumers

언제든지 큐에 허용된 최대 소비자 수입니다.

유형: 정수

: 100

기본값: -1 (제한 없음)

 

defaultNonDestructive

주소의 모든 큐가 기본적으로 파괴되지 않는지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

defaultPurgeOnNoConsumers

소비자가 없으면 브로커가 대기열의 내용을 제거하는지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

defaultQueueRoutingType

자동으로 생성된 큐에 사용되는 라우팅 유형입니다. 기본값은 MULTICAST 입니다.

유형: 문자열

: ANYCAST

기본값: MULTICAST

 

defaultRingSize

링 크기가 명시적으로 설정되지 않은 일치하는 큐의 기본 링 크기입니다.

유형: 정수

: 3

기본값: -1 (크기 제한 없음)

 

enableMetrics

Prometheus 플러그인과 같이 구성된 메트릭 플러그인이 일치하는 주소 또는 주소 세트에 대한 지표를 수집하는지 여부를 지정합니다.

유형: 부울

: false

기본값: true

 

expiryAddress

만료된 메시지를 수신하는 주소입니다.

유형: 문자열

: myExpiryAddress

기본값: 없음

 

expiryDelay

기본 만료 시간을 사용하는 메시지에 적용되는 만료 시간(밀리초)입니다.

유형: 정수

: 100

기본값: -1 (연장 시간이 적용되지 않음)

 

expiryQueuePrefix

브로커가 자동으로 생성된 만료 큐의 이름에 적용되는 접두사입니다.

유형: 문자열

: myExp.

기본값: EXP.

 

expiryQueueSuffix

브로커가 자동으로 생성된 만료 대기열 이름에 적용되는 접미사입니다.

유형: 문자열

: .EXP

기본값: 없음

 

lastValueQueue

큐에서 마지막 값만 사용하는지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

managementBrowsePageSize

관리 리소스에서 검색할 수 있는 메시지 수를 지정합니다.

유형: 정수

: 100

기본값: 200

 

일치*

브로커에 구성된 주소에 대한 주소 설정과 일치하는 문자열입니다. 정확한 주소 이름을 지정하거나 주소 설정과 주소 집합과 일치하도록 와일드카드 표현식을 사용할 수 있습니다.

와일드카드 표현식을 match 속성의 값으로 사용하는 경우 값을 작은따옴표로 묶어야 합니다(예: 'myAddresses*' ).

유형: 문자열

: 'myAddresses*'

기본값: 없음

 

maxDeliveryAttempts

구성된 dead letter 주소로 메시지를 보내기 전에 브로커가 메시지를 전달하려고 하는 횟수를 지정합니다.

유형: 정수

: 20

기본값: 10

 

maxExpiryDelay

이 값보다 큰 만료 시간을 사용하는 메시지에 적용되는 만료 시간(밀리초)입니다.

유형: 정수

: 20

기본값: -1 (최대 만료 시간이 적용되지 않음)

 

maxRedeliveryDelay

브로커가 수행한 메시지 재전송 시도 사이의 최대 값(밀리초)입니다.

유형: 정수

: 100

기본값 은 기본값인 redeliveryDelay 의 10배입니다. 기본값은 0 입니다.

 

maxSizeBytes

주소에 대한 최대 메모리 크기(바이트)입니다. addressFullPolicyPAGING,BLOCK 또는 FAIL 로 설정된 경우 사용됩니다. 또한 "K", "Mb" 및 "GB"와 같은 바이트 표기법을 지원합니다.

유형: 문자열

: 10Mb

기본값: -1 (제한 없음)

 

maxSizeBytesRejectThreshold

브로커가 메시지 거부를 시작하기 전에 주소가 도달할 수 있는 최대 크기(바이트)입니다. address-full-policyBLOCK 으로 설정될 때 사용됩니다. AMQP 프로토콜에 대해서만 maxSizeBytes 와 함께 작동합니다.

유형: 정수

: 500

기본값: -1 (최대 크기 없음)

 

messageCounterHistoryDayLimit

브로커가 주소에 대한 메시지 카운터 기록을 유지하는 일 수입니다.

유형: 정수

: 5

기본값: 0

 

minExpiryDelay

이 값보다 낮은 만료 시간을 사용하는 메시지에 적용되는 만료 시간(밀리초)입니다.

유형: 정수

: 20

기본값: -1 (최소 만료 시간이 적용되지 않음)

 

pageMaxCacheSize

페이징 탐색 중에 I/O를 최적화하기 위해 메모리에 저장할 페이지 파일 수입니다.

유형: 정수

: 10

기본값: 5

 

pageSizeBytes

크기(바이트)입니다. 또한 K,MbGB 와 같은 바이트 표기법을 지원합니다.

유형: 문자열

: 20971520

기본값: 10485760 (약 10.5MB)

 

redeliveryDelay

브로커가 취소된 메시지를 다시 전달할 때까지 대기하는 시간(밀리초)입니다.

유형: 정수

: 100

기본값: 0

 

redistributionDelay

나머지 메시지를 다시 배포하기 전에 브로커가 대기열에서 마지막 소비자를 종료한 후 대기하는 시간(밀리초)입니다.

유형: 정수

: 100

기본값: -1 (설정되지 않음)

 

retroactiveMessageCount

주소에서 향후 대기열을 생성할 메시지 수입니다.

유형: 정수

: 100

기본값: 0

 

sendToDlaOnNoRoute

메시지를 큐로 라우팅할 수 없는 경우 구성된 dead letter 주소로 전송할지 여부를 지정합니다.

유형: 부울

: true

기본값: false

 

slowConsumerCheckPeriod

브로커가 느린 소비자를 확인하는 빈도( )입니다.

유형: 정수

: 15

기본값: 5

 

slowConsumerPolicy

느린 소비자가 식별될 때 발생하는 상황을 지정합니다. 유효한 옵션은 KILL 또는 NOTIFY 입니다. KILL 은 소비자의 연결을 종료하여 동일한 연결을 사용하여 모든 클라이언트 스레드에 영향을 미칩니다. NOTIFYCONSUMER_SLOW 관리 알림을 클라이언트에 보냅니다.

유형: 문자열

: KILL

기본값: NOTIFY

 

slowConsumerThreshold

소비자가 느리게 간주되기 전에 초당 메시지의 최소 사용률입니다.

유형: 정수

: 100

기본값: -1 (설정되지 않음)

env

<변수 이름>=<value>

브로커의 환경 변수를 설정합니다.

유형: array

:

이름: TZ
값: Europe/Vienn

기본값: 해당 없음

brokerProperties

 

브로커의 CRD(Custom Resource Definitions)에 노출되지 않고 사용자 정의 리소스(CR)에서 구성할 수 없는 브로커 속성을 구성합니다.

 

<속성 이름>=<value>

브로커에 대해 구성할 속성 이름 및 값 목록입니다.

유형: 문자열

: globalMaxSize=512m

기본값: 해당 없음

version

 

Operator에서 배포할 AMQ Broker 컨테이너 이미지의 버전을 지정합니다. 예를 들어 버전 값을 7.11.1 에서 7.12.0 으로 변경하면 Operator는 브로커 이미지를 7.12.0으로 업그레이드합니다.

버전 번호에서 마이크로 및 마이너 숫자를 생략하여 최신 마이크로 또는 마이너 릴리스에서 사용할 수 있는 브로커 이미지로 자동 업그레이드할 수 있습니다. 예를 들어 7.11 버전을 지정하면 Operator는 최신 7.11.x 릴리스의 이미지로 업그레이드합니다. 또는 7 버전을 지정하면 Operator는 최신 7.x.x 릴리스의 이미지로 업그레이드합니다.

유형: 문자열

: 7.12.3

기본값: AMQ Broker의 현재 버전

8.1.2. 주소 사용자 정의 리소스 구성 참조

주소 CRD를 기반으로 하는 CR 인스턴스를 사용하면 배포에서 브로커의 주소와 큐를 정의할 수 있습니다. 다음 표에서는 구성할 수 있는 항목에 대해 자세히 설명합니다.

중요

배포하는 해당 CR(사용자 정의 리소스)에 별표(*)로 표시된 구성 항목이 필요합니다. 필수가 아닌 항목의 값을 명시적으로 지정하지 않으면 구성은 기본값을 사용합니다.

표 8.2. address CR 참조
항목설명 및 사용

addressName*

브로커에서 생성할 주소 이름입니다.

유형: 문자열

: address0

기본값: 지정되지 않음

queueName

브로커에 생성할 대기열 이름입니다. queueName 을 지정하지 않으면 CR에서 주소만 생성합니다.

유형: 문자열

: queue0

기본값: 지정되지 않음

removeFromBrokerOnDelete*

해당 배포에 대한 주소 CR 인스턴스를 제거할 때 Operator가 배포의 모든 브로커의 기존 주소를 제거하는지 여부를 지정합니다. 기본값은 false 입니다. 즉 CR을 제거할 때 Operator에서 기존 주소를 삭제하지 않습니다.

유형: 부울

: true

기본값: false

routingType*

사용할 라우팅 유형; anycast 또는 multicast.

유형: 문자열

: anycast

기본값: 멀티 캐스트

8.1.3. 보안 사용자 정의 리소스 구성 참조

보안 CRD를 기반으로 하는 CR 인스턴스를 사용하면 다음을 포함하여 배포의 브로커에 대한 보안 구성을 정의할 수 있습니다.

  • 사용자 및 역할
  • propertiesLoginModule,guestLoginModulekeycloakLoginModule을 포함한 로그인 모듈
  • 역할 기반 액세스 제어
  • 콘솔 액세스 제어
참고

많은 옵션을 사용하려면 보안 브로커에 설명된 브로커 보안 개념을 이해해야 합니다. https://access.redhat.com/documentation/en-us/red_hat_amq_broker/7.12/html-single/configuring_amq_broker/#assembly-br-securing-brokers_configuring

다음 표에서는 구성할 수 있는 항목에 대해 자세히 설명합니다.

중요

배포하는 해당 CR(사용자 정의 리소스)에 별표(*)로 표시된 구성 항목이 필요합니다. 필수가 아닌 항목의 값을 명시적으로 지정하지 않으면 구성은 기본값을 사용합니다.

표 8.3. Security CR 참조
항목하위 항목설명 및 사용

loginModules

 

하나 이상의 로그인 모듈 구성.

로그인 모듈은 다음 유형 중 하나일 수 있습니다.

  • propertiesLoginModule - 브로커 사용자를 직접 정의할 수 있습니다.
  • guestLoginModule - 로그인 인증 정보가 없거나 인증 정보가 실패한 사용자의 경우 게스트 계정을 사용하여 브로커에 대한 제한된 액세스 권한을 부여할 수 있습니다.
  • keycloakLoginModule. - Red Hat Single Sign-On을 사용하여 브로커를 보호할 수 있습니다.

propertiesLoginModule

name*

로그인 모듈의 이름입니다.

유형: 문자열

: my-login

기본값: 해당 없음

 

users.name*

사용자 이름입니다.

유형: 문자열

: jdoe

기본값: 해당 없음

 

users.password*

사용자 암호입니다.

유형: 문자열

: password

기본값: 해당 없음

 

users.roles

역할의 이름입니다.

유형: 문자열

: viewer

기본값: 해당 없음

guestLoginModule

name*

게스트 로그인 모듈의 이름입니다.

유형: 문자열

: guest-login

기본값: 해당 없음

 

guestUser

게스트 사용자의 이름입니다.

유형: 문자열

: myguest

기본값: 해당 없음

 

guestRole

guest 사용자의 역할 이름입니다.

유형: 문자열

: guest

기본값: 해당 없음

keycloakLoginModule

name

KeycloakLoginModule의 이름

유형: 문자열

: sso

기본값: 해당 없음

 

moduleType

KeycloakLoginModule 유형(directAccess 또는 bearerToken)

유형: 문자열

: 베어러Token

기본값: 해당 없음

 

configuration

다음 구성 항목은 Red Hat Single Sign-On과 관련이 있으며 자세한 내용은 OpenID Connect 설명서에서 확인할 수 있습니다.

 

configuration.realm*

KeycloakLoginModule의 영역

유형: 문자열

: myrealm

기본값: 해당 없음

 

configuration.realmPublicKey

영역의 공개 키

유형: 문자열

기본값: 해당 없음

 

configuration.authServerUrl*

keycloak 인증 서버의 URL

유형: 문자열

기본값: 해당 없음

 

configuration.sslRequired

SSL이 필요한지 여부를 지정

유형: 문자열

유효한 값은 'all', 'external' 및 'none'입니다.

 

configuration.resource*

리소스 이름

애플리케이션의 클라이언트 ID입니다. 각 애플리케이션에는 애플리케이션을 식별하는 데 사용되는 클라이언트 ID가 있습니다.

 

configuration.publicClient

공용 클라이언트인지 여부를 지정합니다.

유형: 부울

기본값: false

: false

 

configuration.credentials.key

인증 정보 키를 지정합니다.

유형: 문자열

기본값: 해당 없음

유형: 문자열

기본값: 해당 없음

 

configuration.credentials.value

인증 정보 값 지정

유형: 문자열

기본값: 해당 없음

 

configuration.useResourceRoleMappings

리소스 역할 매핑 사용 여부를 지정합니다.

유형: 부울

: false

 

configuration.enableCors

CORS(Cross-Origin Resource Sharing) 활성화 여부를 지정합니다.

CORS preflight 요청을 처리합니다. 또한 액세스 토큰을 살펴보고 유효한 출처를 확인합니다.

유형: 부울

기본값: false

 

configuration.corsMaxAge

CORS 최대 기간

CORS가 활성화된 경우 Access-Control-Max-Age 헤더의 값을 설정합니다.

 

configuration.corsAllowedMethods

CORS 허용 방법

CORS가 활성화된 경우 Access-Control-Allow-Methods 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다.

 

configuration.corsAllowedHeaders

CORS 허용 헤더

CORS가 활성화된 경우 Access-Control-Allow-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다.

 

configuration.corsExposedHeaders

CORS 노출된 헤더

CORS가 활성화된 경우 Access-Control-Expose-Headers 헤더 값을 설정합니다. 쉼표로 구분된 문자열이어야 합니다.

 

configuration.exposeToken

액세스 토큰을 노출할지 여부 지정

유형: 부울

기본값: false

 

configuration.bearerOnly

전달자 토큰을 확인할지 여부 지정

유형: 부울

기본값: false

 

configuration.autoDetectBearerOnly

자동 감지 전달자 토큰만 지정할지 여부 지정

유형: 부울

기본값: false

 

configuration.connectionPoolSize

연결 풀의 크기

유형: 정수

기본값: 20

 

configuration.allowAnyHostName

호스트 이름을 허용할지 여부 지정

유형: 부울

기본값: false

 

configuration.disableTrustManager

신뢰 관리자를 비활성화할지 여부를 지정

유형: 부울

기본값: false

 

configuration.trustStore*

신뢰 저장소의 경로

ssl-required가 none 또는 disable-trust-manager 가 true인 경우를 제외하고 이는 REQUIRED입니다.

 

configuration.trustStorePassword*

truststore 암호

truststore가 설정되어 있고 truststore에 암호가 필요한 경우 이는 REQUIRED입니다.

 

configuration.clientKeyStore

클라이언트 키 저장소의 경로

유형: 문자열

기본값: 해당 없음

 

configuration.clientKeyStorePassword

클라이언트 키 저장소 암호

유형: 문자열

기본값: 해당 없음

 

configuration.clientKeyPassword

클라이언트 키 암호

유형: 문자열

기본값: 해당 없음

 

configuration.alwaysRefreshToken

토큰을 항상 새로 고칠지 여부 지정

유형: 부울

: false

 

configuration.registerNodeAtStartup

시작 시 노드를 등록할지 여부 지정

유형: 부울

: false

 

configuration.registerNodePeriod

노드 재등록 기간

유형: 문자열

기본값: 해당 없음

 

configuration.tokenStore

토큰 저장소 유형(세션 또는 쿠키)

유형: 문자열

기본값: 해당 없음

 

configuration.tokenCookiePath

쿠키 저장소의 쿠키 경로

유형: 문자열

기본값: 해당 없음

 

configuration.principalAttribute

UserPrincipal 이름을 채울 OpenID Connect ID 토큰 속성

UserPrincipal 이름을 채울 OpenID Connect ID 토큰 속성입니다. token 속성이 null인 경우 기본값은 sub입니다. 가능한 값은 sub, preferred_username, email, name, nickname, given_name, family_name입니다.

 

configuration.proxyUrl

프록시 URL

 

configuration.turnOffChangeSessionIdOnLogin

성공적인 로그인 시 세션 ID를 변경할지 여부를 지정

유형: 부울

: false

 

configuration.tokenMinimumTimeToLive

활성 액세스 토큰을 새로 고치는 최소 시간

유형: 정수

기본값: 0

 

configuration.minTimeBetweenJwksRequests

새 공개 키를 검색하기 위해 Keycloak로의 두 요청 사이의 최소 간격

유형: 정수

기본값: 10

 

configuration.publicKeyCacheTtl

새 공개 키를 검색하기 위해 Keycloak에 대한 두 요청 사이의 최대 간격

유형: 정수

기본값: 86400

 

configuration.ignoreOauthQueryParameter

전달자 토큰 처리를 위해 access_token 쿼리 매개변수 처리를 해제할지 여부

유형: 부울

: false

 

configuration.verifyTokenAudience

토큰에 이 클라이언트 이름(리소스)이 대상자로 포함되어 있는지 확인합니다.

유형: 부울

: false

 

configuration.enableBasicAuth

기본 인증 지원 여부

유형: 부울

기본값: false

 

configuration.confidentialPort

SSL/TLS를 통한 보안 연결을 위해 Keycloak 서버에서 사용하는 기밀 포트

유형: 정수

: 8443

 

configuration.redirectRewriteRules.key

Redirect URI를 일치시키는 데 사용되는 정규식입니다.

유형: 문자열

기본값: 해당 없음

 

configuration.redirectRewriteRules.value

대체 문자열

유형: 문자열

기본값: 해당 없음

 

configuration.scope

DirectAccessGrantsLoginModule의 OAuth2 범위 매개변수

유형: 문자열

기본값: 해당 없음

securityDomains

 

브로커 보안 도메인

 

brokerDomain.name

브로커 도메인 이름

유형: 문자열

: activemq

기본값: 해당 없음

 

brokerDomain.loginModules

하나 이상의 로그인 모듈. 각 항목은 위의 loginModules 섹션에 미리 정의되어 있어야 합니다.

 

brokerDomain.loginModules.name

로그인 모듈 이름

유형: 문자열

: prop-module

기본값: 해당 없음

 

brokerDomain.loginModules.flag

propertiesLoginModule과 동일하지만 필수 , 필수 조건,sufficientoptional 가 유효한 값입니다.

유형: 문자열

: 충분합니다.

기본값: 해당 없음

 

brokerDomain.loginModules.debug

Debug

 

brokerDomain.loginModules.reload

다시 로드

 

consoleDomain.name

브로커 도메인 이름

유형: 문자열

: activemq

기본값: 해당 없음

 

consoleDomain.loginModules

단일 로그인 모듈 구성.

 

consoleDomain.loginModules.name

로그인 모듈 이름

유형: 문자열

: prop-module

기본값: 해당 없음

 

consoleDomain.loginModules.flag

propertiesLoginModule과 동일하지만 필수 , 필수 조건,sufficientoptional 가 유효한 값입니다.

유형: 문자열

: 충분합니다.

기본값: 해당 없음

 

consoleDomain.loginModules.debug

Debug

유형: 부울

: false

 

consoleDomain.loginModules.reload

다시 로드

유형: 부울

: true

기본값: false

securitySettings

 

broker.xml 또는 management.xml에 추가할 추가 보안 설정

 

broker.match

보안 설정 섹션의 주소 일치 패턴입니다. 일치 패턴 구문에 대한 자세한 내용은 AMQ Broker 와일드카드 구문을 참조하십시오.

 

broker.permissions.operationType

권한 설정에 설명된 대로 보안 설정 의 작업 유형입니다.

유형: 문자열

: createAddress

기본값: 해당 없음

 

broker.permissions.roles

보안 설정은 권한 설정에 설명된 대로 이러한 역할에 적용됩니다.

유형: 문자열

: root

기본값: 해당 없음

securitySettings.management

 

management.xml 을 구성하는 옵션

 

hawtioRoles

브로커 콘솔에 로그인할 수 있는 역할입니다.

유형: 문자열

: root

기본값: 해당 없음

 

connector.host

관리 API에 연결하기 위한 커넥터 호스트입니다.

유형: 문자열

: myhost

기본값: localhost

 

connector.port

관리 API에 연결하기 위한 커넥터 포트입니다.

유형: 정수

: 1099

기본값: 1099

 

connector.jmxRealm

관리 API의 Cryostat 영역.

유형: 문자열

: activemq

기본값: activemq

 

connector.objectName

관리 API의 개체 이름입니다.

유형: 문자열

: connector:name=rmi

기본값: connector:name=rmi

 

connector.authenticatorType

관리 API 인증 유형입니다.

유형: 문자열

: password

기본값: password

 

connector.secured

관리 API 연결의 보안 여부입니다.

유형: 부울

: true

기본값: false

 

connector.keyStoreProvider

관리 커넥터의 키 저장소 공급자입니다. connector.secured="true"를 설정하는 경우 필수 항목입니다. 기본값은 JKS입니다.

 

connector.keyStorePath

키 저장소의 위치입니다. connector.secured="true"를 설정하는 경우 필수 항목입니다.

 

connector.keyStorePassword

관리 커넥터의 키 저장소 암호입니다. connector.secured="true"를 설정하는 경우 필수 항목입니다.

 

connector.trustStoreProvider

connector.secured="true"를 설정한 경우 필요한 관리 커넥터의 신뢰 저장소 공급자입니다.

유형: 문자열

: JKS

기본값: JKS

 

connector.trustStorePath

관리 커넥터를 위한 신뢰 저장소의 위치입니다. connector.secured="true"를 설정하는 경우 필수 항목입니다.

유형: 문자열

기본값: 해당 없음

 

connector.trustStorePassword

관리 커넥터의 truststore 암호입니다. connector.secured="true"를 설정하는 경우 필수 항목입니다.

유형: 문자열

기본값: 해당 없음

 

connector.passwordCodec

관리 커넥터용 암호 코드c입니다. 구성 파일에서 암호 암호화에 설명된 대로 사용할 암호 codec의 정규화된 클래스 이름입니다.

 

authorisation.allowedList.domain

allowedList의 도메인

유형: 문자열

기본값: 해당 없음

 

authorisation.allowedList.key

allowedList의 키

유형: 문자열

기본값: 해당 없음

 

authorisation.defaultAccess.method

defaultAccess 목록의 방법

유형: 문자열

기본값: 해당 없음

 

authorisation.defaultAccess.roles

defaultAccess List의 역할

유형: 문자열

기본값: 해당 없음

 

authorisation.roleAccess.domain

roleAccess List의 도메인

유형: 문자열

기본값: 해당 없음

 

authorisation.roleAccess.key

roleAccess List의 키

유형: 문자열

기본값: 해당 없음

 

authorisation.roleAccess.accessList.method

roleAccess List의 방법

유형: 문자열

기본값: 해당 없음

 

authorisation.roleAccess.accessList.roles

roleAccess List의 역할

유형: 문자열

기본값: 해당 없음

 

applyToCrNames

현재 네임스페이스에서 이름이 지정된 CR에 의해 정의된 브로커에 이 보안 구성을 적용합니다. 값이 * 또는 빈 문자열은 모든 브로커에 적용되는 것을 의미합니다.

유형: 문자열

: my-broker

기본값: 현재 네임스페이스의 CR에 의해 정의된 모든 브로커입니다.

8.2. JAAS 로그인 모듈 구성 예

다음 예제에서는 properties 로그인 모듈과 LDAP 로그인 모듈이 모두 구성된 JAAS 로그인 모듈 구성을 보여줍니다. properties 로그인 모듈은 Operator가 브로커로 인증하는 데 사용하는 인증 정보가 포함된 기본 로그인 모듈을 참조합니다.

	activemq {
  		org.apache.activemq.artemis.spi.core.security.jaas.LDAPLoginModule required
     		debug=true
	   		initialContextFactory=com.sun.jndi.ldap.LdapCtxFactory
	    	connectionURL="LDAP://localhost:389"
	    	connectionUsername="CN=Administrator,CN=Users,OU=System,DC=example,DC=com"
	   		connectionPassword=redhat.123
	    	connectionProtocol=s
	    	connectionTimeout="5000"
	    	authentication=simple
     		userBase="dc=example,dc=com"
	    	userSearchMatching="(CN={0})"
    		userSearchSubtree=true
	    	readTimeout="5000"
     		roleBase="dc=example,dc=com"
     		roleName=cn
     		roleSearchMatching="(member={0})"
     		roleSearchSubtree=true;

		org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule
			reload=true
			org.apache.activemq.jaas.properties.user="artemis-users.properties"
			org.apache.activemq.jaas.properties.role="artemis-roles.properties"
			baseDir="/home/jboss/amq-broker/etc";
};

다음 예제에서는 별도의 영역에 두 개의 속성 로그인 모듈이 있는 JAAS 로그인 모듈 구성을 보여줍니다.

  • 기본 속성 로그인 모듈은 console 이라는 영역에 있으며 브로커로 인증하는 데 Operator 및 AMQ Management Console에서 사용하는 속성 파일이 있습니다.
  • activemq 영역의 로그인 모듈에는 새 속성 파일이 있으며, 예를 들어 메시징 사용자를 인증하는 인증 정보가 포함될 수 있습니다.

예를 들어 Operator가 브로커로 인증하는 데 사용하는 로그인 모듈이 포함된 영역에 특정 보안 제어를 적용할 수 있습니다.

activemq {
 	org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule
	 	reload=true
		org.apache.activemq.jaas.properties.user="new-users.properties"
		org.apache.activemq.jaas.properties.role="new-roles.properties"
};

console {
org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule
		reload=true
 		org.apache.activemq.jaas.properties.user="artemis-users.properties"
		org.apache.activemq.jaas.properties.role="artemis-roles.properties"
		baseDir="/home/jboss/amq-broker/etc";
};
참고

기본적으로 AMQ 관리 콘솔은 인증을 위해 activemq 영역의 기본 속성 로그인 모듈을 사용합니다. 예제와 같이 기본 속성 로그인 모듈이 다른 영역에 구성된 경우 브로커 CR의 환경 변수를 설정하여 해당 영역을 사용하도록 AMQ 관리 콘솔을 구성해야 합니다. 예를 들면 다음과 같습니다.

spec:
  ...
  env:
  - name: JAVA_ARGS_APPEND
    value: --Hawtio.realm=console
  ...

CR에서 환경 변수 설정에 대한 자세한 내용은 4.9절. “브로커 컨테이너의 환경 변수 설정” 을 참조하십시오.

8.3. 예: Red Hat Single Sign-On을 사용하도록 AMQ 브로커 구성

이 예에서는 JAAS 로그인 모듈을 사용하여 인증 및 권한 부여에 Red Hat Single Sign-On을 사용하도록 AMQ Broker를 구성하는 방법을 보여줍니다.

사전 요구 사항

  • LDAP 디렉터리와 통합된 Red Hat Single Sign-On 인스턴스.

    • LDAP 디렉터리는 AMQ Broker의 사용자 및 역할 정보로 채워집니다.
    • Red Hat Single Sign-On은 LDAP 서버에서 사용자를 통합하도록 구성되어 있습니다.
    • Red Hat Single Sign-On은 role-ldap-mapper를 사용하여 LDAP의 역할 정보를 Red Hat Single Sign-On에 매핑하도록 구성되어 있습니다.
  • 다음을 포함하는 Red Hat Single Sign-On 영역

    • oAuth 프로토콜을 사용하여 토큰을 가져올 수 있는 AMQ 관리 콘솔과 같은 애플리케이션에 대해 다음 설정으로 구성된 클라이언트는 다음과 같습니다.

      인증 흐름: 표준 흐름

      유효한 리디렉션 URI: AMQ Management Console의 OpenShift Container Platform 경로입니다. 예: http://artemis-wconsj-0-svc-rte-kc-ldap-tests-0eae49.apps.redhat-412t.broker.app-services-dev.net/console/*

    • oAuth 프로토콜을 사용하여 토큰을 가져올 수 없는 메시징 클라이언트 애플리케이션이 있는 경우 다음 설정으로 구성된 별도의 클라이언트입니다.

      인증 흐름: 직접 액세스 권한 부여

      유효한 리디렉션 URI: *

참고

Red Hat Single Sign-On의 각 영역에는 Broker 라는 클라이언트가 포함되어 있습니다. 이 클라이언트는 AMQ Broker와 관련이 없습니다.

프로세스

  1. login.config 라는 텍스트 파일을 생성하고 JAAS 로그인 모듈 구성을 추가하여 AMQ Broker를 Red Hat Single Sign-On과 연결합니다. 예를 들면 다음과 같습니다.

    console {
        // ensure the operator can connect to the broker by referencing the existing properties config
        org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient
            org.apache.activemq.jaas.properties.user="artemis-users.properties"
            org.apache.activemq.jaas.properties.role="artemis-roles.properties"
            baseDir="/home/jboss/amq-broker/etc";
    
       org.keycloak.adapters.jaas.BearerTokenLoginModule sufficient
            keycloak-config-file="/amq/extra/secrets/sso-jaas-config/_keycloak-bearer-token.json"
            role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal;
    };
    activemq {
        org.keycloak.adapters.jaas.BearerTokenLoginModule sufficient
            keycloak-config-file="/amq/extra/secrets/sso-jaas-config/_keycloak-bearer-token.json"
            role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal;
    
        org.keycloak.adapters.jaas.DirectAccessGrantsLoginModule sufficient
            keycloak-config-file="/amq/extra/secrets/sso-jaas-config/_keycloak-direct-access.json"
            role-principal-class=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal;
    
        org.apache.activemq.artemis.spi.core.security.jaas.PrincipalConversionLoginModule required
           principalClassList=org.keycloak.KeycloakPrincipal;
    };
    참고
    • .json 구성 파일의 경로는 /amq/extra/secrets/name-jaas-config 형식이어야 합니다. name 의 경우 문자열 값을 지정합니다. 이 절차의 뒷부분에서 생성하는 시크릿의 이름을 지정하려면 동일한 문자열 값과 -jaas-config 접미사를 사용해야 합니다.
    • login.config 파일에서 console 이라는 영역은 AMQ Management Console 사용자 및 메시징 클라이언트를 인증하기 위해 activemq 라는 영역을 인증하는 데 사용됩니다.

다음 로그인 모듈은 login.config 파일 예제에서 구성됩니다.

표 8.4. 로그인 모듈
로그인 모듈설명 및 사용

org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule

이는 기본 로그인 모듈이며 브로커로 인증하는 Operator에 필요한 기본 사용자가 포함된 artemis-users.properties 파일을 포함합니다.

org.keycloak.adapters.jaas.BearerTokenLoginModule

이 로그인 모듈은 oAuth 프로토콜을 사용하여 토큰을 가져올 수 있는 AMQ 관리 콘솔과 같은 애플리케이션용입니다. 사용자가 브라우저 창에서 AMQ Management Console을 열면 전달자 토큰을 얻기 위해 Red Hat Single Sign-On 콘솔로 리디렉션됩니다.

org.keycloak.adapters.jaas.DirectAccessGrantsLoginModule

이 로그인 모듈은 oAuth 프로토콜을 사용할 수 없는 메시징 클라이언트와 같은 HTTP 이외의 애플리케이션에 필요합니다. 이 로그인 모듈을 사용하여 브로커는 먼저 Red Hat Single Sign-On에 구성된 시크릿을 사용하여 클라이언트를 인증한 다음 클라이언트를 대신하여 토큰을 가져옵니다.

org.apache.activemq.artemis.spi.core.security.jaas.PrincipalConversionLoginModule

이 로그인 모듈은 수신된 Keycloak 주체를 AMQ Broker에서 사용할 수 있는 JAAS 주체로 변환하는 데 필요합니다.

참고

login.config 파일 예에서 각 .json 속성 파일 이름에 밑줄 접두사가 있습니다. Operator는 JaasPropertiesApplied 조건의 상태를 보고할 때 밑줄이 붙은 파일을 무시합니다. 밑줄 접두사가 없는 경우 브로커가 타사 로그인 모듈에서 사용하는 속성 파일을 인식하지 못하기 때문에 JaasPropertiesApplied 조건의 상태는 OutofSync 로 표시됩니다. 상태 보고에 대한 자세한 내용은 4.3.2.1절. “보안 사용자 정의 리소스(CR)를 사용하여 기본 JAAS 로그인 모듈 구성” 을 참조하십시오.

  1. 로그인 모듈에서 참조하는 각 .json 속성 파일에 대한 텍스트 파일을 생성하고 AMQ Broker를 Red Hat Single Sign-On에 연결하는 데 필요한 세부 정보를 구성합니다. 예를 들면 다음과 같습니다.

    _keycloak-bearer-token.json
    {
        "realm": "amq-broker-ldap",
        "resource": "amq-console",
        "auth-server-url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net",
        "principal-attribute": "preferred_username",
        "use-resource-role-mappings": false,
        "ssl-required": "external",
        "confidential-port": 0
    }
    _keycloak-direct-access.json
    {
        "realm": "amq-broker-ldap",
        "resource": "amq-broker",
        "auth-server-url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net",
        "principal-attribute": "preferred_username",
        "use-resource-role-mappings": false,
        "ssl-required": "external",
        "credentials": {
            "secret": "Lfk6g1ZKlGzNT6eRkz0d1scM4M29Ohmn"
        }
    }
    realm
    Red Hat Single Sign-On에서 AMQ Broker 애플리케이션 및 서비스를 인증하도록 구성된 영역입니다.
    resource
    Red Hat Single Sign-On에 구성된 클라이언트의 클라이언트 ID입니다.
    auth-server-url
    Red Hat Single Sign-On 서버의 기본 URL입니다.
    principal-attribute
    UserPrincipal 이름을 채울 토큰 특성입니다.
    use-resource-role-mappings
    true로 설정하면 Red Hat Single Sign-On은 토큰 내부에서 사용자의 애플리케이션 수준 역할 매핑을 찾습니다. false인 경우 사용자 역할 매핑의 영역 수준을 확인합니다. 기본값은 false입니다.
    SSL-필수
    Red Hat Single Sign-On 서버와의 모든 통신이 HTTPS를 초과하도록 합니다. 기본값은 external 입니다. 즉, 외부 요청에 HTTPS가 기본적으로 필요합니다.
    credentials
    브로커가 Red Hat Single Sign-On에 로그인하고 클라이언트를 대신하여 토큰을 얻는 데 사용하는 Red Hat Single Sign-On에 구성된 시크릿입니다.
  2. _keycloak-js-client.json 이라는 텍스트 파일을 생성하고 AMQ Management Console에서 사용자를 자격 증명을 입력하는 Red Hat Single Sign-On 관리 콘솔의 URL로 리디렉션하는 데 필요한 구성을 추가합니다. 예를 들면 다음과 같습니다.

    {
      "realm": "amq-broker-ldap",
      "clientId": "amq-console",
      "url": "https://keycloak-svc-rte-kc-ldap-tests-0eae49.apps.412t.broker.app-services-dev.net"
    }
  3. oc create secret 명령을 사용하여 로그인 모듈 구성에서 참조되는 파일이 포함된 보안을 생성합니다. 예를 들면 다음과 같습니다.

    oc create secret generic sso-jaas-config --from-file=login.config --from-file=artemis-users.properties --from-file=artemis-roles.properties --from-file=_keycloak-bearer-token.json --from-file=_keycloak-direct-access.json --from-file=_keycloak-js-client.json
    참고
    • Operator가 로그인 모듈 구성이 포함되어 있음을 인식하고 각 브로커 Pod에 업데이트를 전파할 수 있도록 시크릿 이름에 -jaas-config 접미사가 있어야 합니다.
    • 시크릿 이름은 login.config 파일에 지정한 .json 구성 파일의 경로에 있는 마지막 디렉터리 이름과 일치해야 합니다. 예를 들어 구성 파일의 경로가 /amq/extra/secrets/sso-jaas-config 인 경우 시크릿 이름을 sso-jaas-config 여야 합니다.

    시크릿 생성 방법에 대한 자세한 내용은 Kubernetes 문서의 시크릿을 참조하십시오. https://kubernetes.io/docs/concepts/configuration/secret/

  4. 브로커 배포를 위해 ActiveMQArtemis CR(사용자 정의 리소스) 인스턴스에 생성한 시크릿을 추가합니다.

    1. OpenShift 명령줄 인터페이스 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 수 있는 권한이 있는 사용자로 OpenShift에 로그인합니다.
      2. 배포에 사용할 CR을 편집합니다.

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. OpenShift Container Platform 웹 콘솔 사용:

      1. 브로커 배포를 위해 프로젝트에 CR을 배포할 권한이 있는 사용자로 콘솔에 로그인합니다.
      2. 왼쪽 창에서 OperatorsInstalled Operator 를 클릭합니다.
      3. Red Hat Integration - AMQ Broker for RHEL 8 (Multiarch) Operator를 클릭합니다.
      4. AMQ Broker 탭을 클릭합니다.
      5. ActiveMQArtemis 인스턴스 이름의 이름을 클릭합니다.
      6. YAML 탭을 클릭합니다.

        콘솔에서 YAML 편집기가 열리고 CR 인스턴스를 구성할 수 있습니다.

  5. extraMounts 속성 및 secret 속성을 생성하고 시크릿 이름을 추가합니다. 다음 예제에서는 custom-jaas-config 라는 시크릿을 CR에 추가합니다.

    deploymentPlan:
      ...
      extraMounts:
        secrets:
        - "sso-jaas-config"
      ...
  6. ActiveMQArtemis CR에서 인증에 Red Hat Single Sign-On을 사용하기 위해 AMQ Management Console에 필요한 hawtio 설정이 포함된 환경 변수를 생성합니다. 환경 변수의 내용은 브로커를 호스팅하는 JVM이 시작될 때 Java 애플리케이션 시작자에게 인수로 전달됩니다. 예를 들면 다음과 같습니다.

    env:
    - name: JAVA_ARGS_APPEND
      value: -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal
          -Dhawtio.keycloakEnabled=true -Dhawtio.keycloakClientConfig=/amq/extra/secrets/sso-jaas-config/_keycloak-js-client.json
          -Dhawtio.authenticationEnabled=true -Dhawtio.realm=console

    hawtio 설정에 대한 자세한 내용은 hawtio 설명서 를 참조하십시오.

  7. ActiveMQArtemis CR의 spec 섹션에서 brokerProperties 속성을 추가하고 LDAP 디렉터리에 구성된 역할에 대한 권한을 추가합니다. 단일 주소에 대한 역할 권한을 부여할 수 있습니다. 또는 # 기호를 사용하여 와일드카드를 지정하여 모든 주소에 역할 권한을 부여할 수 있습니다. 예를 들면 다음과 같습니다.

    spec:
      ...
      brokerProperties:
      - securityRoles.#.producers.send=true
      - securityRoles.#.consumers.consume=true
      ...
  8. CR을 저장합니다.

    Operator는 각 Pod의 /amq/extra/secrets/시크릿 이름 디렉터리에 있는 시크릿에 파일을 마운트하고 기본 login.config 파일 대신 SSO 구성이 포함된 마운트된 login.config 파일을 읽도록 브로커 JVM을 구성합니다.

8.4. 로깅

OpenShift 로그를 보는 것 외에도 컨테이너 콘솔에 출력되는 AMQ 로그를 확인하여 OpenShift Container Platform 이미지에서 실행 중인 AMQ Broker 문제를 해결할 수 있습니다.

프로세스

  • 명령줄에서 다음 명령을 실행합니다.
$ oc logs -f <pass:quotes[<pod-name>]> <pass:quotes[<container-name>]>

2024-12-04에 최종 업데이트된 문서

법적 공지

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.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

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

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.